专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 配置SpringMVC的讲解

配置SpringMVC的讲解

更新时间:2021-06-11 15:47:33 来源:动力节点 浏览875次

SpringMVC默认就是以转发的形式响应JSP,也就是说直接返回视图名称的方式就是转发

重定向:需要使用redirect:+视图路径,当然也可以重定向到指定url再次进行处理,比如:redirect:/user/list

需要注意的是业务方法中,设置重定向不能像转发一样写逻辑视图,必须写明目标资源的物理路径,如"redirect:/index.jsp"

    @RequestMapping("redirectTest")
    public String redirectTest(){
        return "redirect:/index.jsp";
    }

中文乱码配置

如果是get请求带中文参数,后台接收到乱码,需要修改tomcat的配置(或者Maven项目中修改tomcat插件配置)

    <!-- 1.tomcat 修改配置文件server.xml,添加URIEncoding -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding ="UTF-8"/>
    <!-- Maven项目中修改tomcat插件编码 -->
    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <uriEncoding>UTF-8</uriEncoding>
        </configuration>
    </plugin>

如果请求中接收到参数没有乱码,但是返回json字符串时候乱码了,可以添加produce解决

每个方法加produce解决未免过于麻烦,那么可以修改转换器的编码处理,这里处理String的转换器为StringHttpMessageConverter,查看源码发现默认的编码是ISO-8859-1

所以在springmvc配置文件中统一修改

    <!-- 注解驱动 -->
    <mvc:annotation-driven>
        <!-- 处理请求返回json字符串的中文乱码问题 -->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

针对POST表单提交,我们还需要配置过滤器进行统一编码处理(最好都配上),该过滤器就是springmvc自带CharacterEncodingFilter,查看源码可知,配置forceEncoding将会强制使用这里配置的编码,而不管请求响应有没有设置编码

     <filter>  
        <filter-name>encodingFilter</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>  
        <init-param>  <!--强制使用Encoding设置的编码格式-->
           <param-name>forceEncoding</param-name>
           <param-value>true</param-value>
       </init-param>
    </filter>  
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>

加入Spring的配置

真正的应用肯定少不了Spring,所以这里将spring配置加上

    <!-- spring应用上下文 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

springmvc的上下文层级,理解层次化的ApplicationContext

配置springmvc

带小s的loaderlistener所加载形成的上下文,可以有多个,为我们提供了所有应用公共所使用的组件和服务,如sevice、dao,这些服务应该被整个应用所共享,而不应该被局限在某个dispatcherServlet上下文之中

不带小s的,就是与我们的dispatcherServlet相关的上下文。dispatcherservlet可以有多个,因为在现在的互联网中,一个应用可能需要提供多种服务,而让dispatcherservlet针对不同的服务请求去分发。因为有些服务是完全不同于其他服务的,所以需要作区分,根据配置的url-pattern进行拦截。

spring配置文件

    <context:component-scan base-package="com.rxy.mvcdemo">
        <!-- 不需要管理controller -->
        <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

&lt;MVC:annotation-driven/&gt;

该配置作用是注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为 Controller分发请求所必需的,并且提供了数据绑定支持, NumberFormatannotation支持, DateTimeFormat支持, Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能

静态资源映射

location:指location指定的目录不要拦截,直接请求

mapping:指在static目录下的所有文件(**代表所有文件)

cache-period:设置静态资源在客户端浏览器中的缓存有效时间

该配置意思就是在根目录下static的所有文件不会被DispatcherServlet拦截,直接访问,当做静态资源交给Servlet处理

<!-- 静态资源映射 -->
<mvc:resources mapping="/static/**" location="/static/" cache-period="31536000"/>

配置ViewResolver

可以配置多个ViewResolver。使用order属性排序。InternalResourceViewResolver需要放在最后。

    <bean
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
                <entry key="htm" value="text/html" />
            </map>
        </property>

        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean
                    class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                </bean>
            </list>
        </property>
        <property name="ignoreAcceptHeader" value="true" />
    </bean>

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsps/" />
        <property name="suffix" value=".jsp" />
    </bean>

使用Servlet相关对象

如果想在方法中直接使用HttpServletRequestHttpServletResponseHttpSession等对象,需要引入servlet的依赖包

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <!-- 编译测试有效,必须设置,否则运行tomcat容器会报错 -->
        <scope>provided</scope>
    </dependency>

以上就是动力节点小编介绍的"配置SpringMVC的讲解",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>