基于Spring+SpringMVC+MyBatis开发书评网Spring和SpringMVC的整合

Posted 被雨遗忘的夏天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Spring+SpringMVC+MyBatis开发书评网Spring和SpringMVC的整合相关的知识,希望对你有一定的参考价值。

前提概要:

首先得创建一个Web工程项目

可以参考:https://blog.csdn.net/wo9aiwuchunmin/article/details/116463220

 

一、 maven配置依赖

<!-- 引入阿里云镜像,加速 -->
    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>

    <dependencies>
        <!-- 一、 spring与springMVC的整合-->
        <!-- 1. 配置Maven依赖: 核心依赖:spring-webmvc -->
        <!-- 注意: maven的依赖需要引入到lab中 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- Freemarker模板引擎 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>

        <!-- Freemaker整合支持包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- Jackson 序列化工具包-->
        <!-- 核心 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- 实体类注解包,用于序列化与反序列化-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- 数据绑定包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>

 

二、 配置DispatcherServlet

<!--2.配置DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置文件的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!-- 只要在classpath路径下有applicationContext开头的xml文件,即可自动加载-->
            <param-value>classpath:applicationContext*.xml</param-value>
        </init-param>
        <!-- 0 : 表示项目启动的时候就初始化这个servlet-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!-- 映射URL -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 

三、 开启SpringMVC注解模式

<!--3. 开启SpringMVC注解模式-->
    <context:component-scan base-package="com.imooc"/>
    <mvc:annotation-driven>
        <!-- 设置响应的字符集,解决响应时的中文乱码问题 -->
        <!-- 作用场景: 未使用freemaker的情况下,直接通过响应向客户端输出-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 将css、js排除在外,进而提高springMVC对URL的处理效率-->
    <mvc:default-servlet-handler/>

 

四、 配置请求与响应字符集,解决中文乱码

<!-- 4. 配置请求与响应字符集,解决中文乱码 -->
    <!-- 过滤器: 请求中的乱码解决 -->
    <filter>
        <filter-name>characterFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!-- 映射,对所以文件拦截 -->
    <filter-mapping>
        <filter-name>characterFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

五、 配置Freemarker模板引擎

<!-- 5. 配置Freemarker模板引擎 -->
    <!-- Freemarker配置对象,通知springMVC在ftl文件下加载Freemarker脚本 -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!-- Freemarker脚本存放地址 -->
        <property name="templateLoaderPath" value="/WEB-INF/ftl"/>
        <!-- 针对于Freemarker本身需要配置哪些参数 -->
        <property name="freemarkerSettings">
            <!-- 核心属性: defaultEncoding , 默认的编码类型 -->
            <!-- 这里的编码设置和请求响应处的utf-8是没有关系的,此处解决的是读取ftl脚本时,脚本内的中文乱码问题-->
            <props>
                <prop key="defaultEncoding">UTF-8</prop>
            </props>
        </property>
    </bean>
    <!-- ViewResolver视图解析器 , 决定了选择哪种模板引擎来对数据进行解析 -->
    <bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!-- contentType响应类型 -->
        <!-- 使用视图解析器将模板引擎和数据结合,产生新的html片段,向响应输出时设置为utf-8 -->
        <!-- 作用场景: springMVC加载freemaker产生html片段时-->
        <property name="contentType" value="text/html;charset=utf-8"/>
        <!-- 模板引擎拓展名 -->
        <property name="suffix" value=".ftl"/>
    </bean>

 

六、 JSON(Jackson)序列化输出配置(在第3步中添加设置)

<!--3. 开启SpringMVC注解模式-->
    <context:component-scan base-package="com.imooc"/>
    <mvc:annotation-driven>
        <!-- 设置响应的字符集,解决响应时的中文乱码问题 -->
        <!-- 作用场景: 未使用freemaker的情况下,直接通过响应向客户端输出-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                        <!-- 6. JSON(Jackson)序列化输出配置 -->
                        <!-- 解决JSON字符串输出时中文乱码的问题-->
                        <value>application/json;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 将css、js排除在外,进而提高springMVC对URL的处理效率-->
    <mvc:default-servlet-handler/>

 

七、 测试  TestController

测试类

package com.imooc.reader.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName TestController
 * @Description TODO
 * @date 2021/5/6 22:03
 * @Param
 * @return
 */
@Controller
public class TestController {
    // 测试freemaker能否使用
    @GetMapping("/test/t1")
    public ModelAndView test1() {
        return new ModelAndView("/test");
    }

    // 测试JSON序列化输出
    @GetMapping("/test/t2")
    @ResponseBody
    public Map test2() {
        Map result = new HashMap();
        result.put("test", "测试文本");
        return result;
    }
}

freemaker能使用

JSON输出没毛病

 

八、 项目结构以及完整代码块

项目结构

代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>imooc-reader</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 引入阿里云镜像,加速 -->
    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>

    <dependencies>
        <!-- 一、 spring与springMVC的整合-->
        <!-- 配置Maven依赖: 核心依赖:spring-webmvc -->
        <!-- 注意: maven的依赖需要引入到lab中 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- Freemarker模板引擎 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>

        <!-- Freemaker整合支持包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- Jackson 序列化工具包-->
        <!-- 核心 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- 实体类注解包,用于序列化与反序列化-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- 数据绑定包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>

</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--2.配置DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置文件的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!-- 只要在classpath路径下有applicationContext开头的xml文件,即可自动加载-->
            <param-value>classpath:applicationContext*.xml</param-value>
        </init-param>
        <!-- 0 : 表示项目启动的时候就初始化这个servlet-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!-- 映射URL -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 4. 配置请求与响应字符集,解决中文乱码 -->
    <!-- 过滤器: 请求中的乱码解决 -->
    <filter>
        <filter-name>characterFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!-- 映射,对所以文件拦截 -->
    <filter-mapping>
        <filter-name>characterFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/task
            http://www.springframework.org/schema/task/spring-task.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--3. 开启SpringMVC注解模式-->
    <context:component-scan base-package="com.imooc"/>
    <mvc:annotation-driven>
        <!-- 设置响应的字符集,解决响应时的中文乱码问题 -->
        <!-- 作用场景: 未使用freemaker的情况下,直接通过响应向客户端输出-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                        <!-- 6. JSON(Jackson)序列化输出配置 -->
                        <!-- 解决JSON字符串输出时中文乱码的问题-->
                        <value>application/json;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 将css、js排除在外,进而提高springMVC对URL的处理效率-->
    <mvc:default-servlet-handler/>

    <!-- 5. 配置Freemarker模板引擎 -->
    <!-- Freemarker配置对象,通知springMVC在ftl文件下加载Freemarker脚本 -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!-- Freemarker脚本存放地址 -->
        <property name="templateLoaderPath" value="/WEB-INF/ftl"/>
        <!-- 针对于Freemarker本身需要配置哪些参数 -->
        <property name="freemarkerSettings">
            <!-- 核心属性: defaultEncoding , 默认的编码类型 -->
            <!-- 这里的编码设置和请求响应处的utf-8是没有关系的,此处解决的是读取ftl脚本时,脚本内的中文乱码问题-->
            <props>
                <prop key="defaultEncoding">UTF-8</prop>
            </props>
        </property>
    </bean>
    <!-- ViewResolver视图解析器 , 决定了选择哪种模板引擎来对数据进行解析 -->
    <bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!-- contentType响应类型 -->
        <!-- 使用视图解析器将模板引擎和数据结合,产生新的html片段,向响应输出时设置为utf-8 -->
        <!-- 作用场景: springMVC加载freemaker产生html片段时-->
        <property name="contentType" value="text/html;charset=utf-8"/>
        <!-- 模板引擎拓展名 -->
        <property name="suffix" value=".ftl"/>
    </bean>
</beans>

 

Maven依Maven依赖Maven依赖赖

以上是关于基于Spring+SpringMVC+MyBatis开发书评网Spring和SpringMVC的整合的主要内容,如果未能解决你的问题,请参考以下文章

spring与mybati整合方法

自己开发的音乐视频网站

Spring Boot整合Mybati之逆向工程

抽奖活动啦!5本SpringMVC+MyBatis相关3本Android Studio相关6本Kafka相关

spring+mybati java config配置引起的bean相互引用日志报警告问题

Spring基于注解及SpringMVC