04.乱码问题解决以及静态资源忽略被DispatcherServlet拦截的配置方案

一、乱码问题的解决方案

1). POST请求方式

web.xml中配置一个过滤器

<!-- 配置springMVC编码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</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>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <!-- 过滤所有请求 -->
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2). GET请求方式

tomcat对GET和POST请求处理方式是不同的,GET请求的编码问题,要修改tomcat的server.xml配置文件

<Connector connectionTimeout="20000" port="8080"
    protocol="HTTP/1.1" redirectPort="8443"/>

改为

<Connector connectionTimeout="20000" port="8080"
    protocol="HTTP/1.1" redirectPort="8443"
    useBodyEncodingForURI="true"/>

如果遇到ajax请求任然乱码,就将useBodyEncodingForURI="true"改为URIEncoding="UTF-8"

二、静态资源不被前端控制拦截的配置

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置

1). 常用配置方式

  1. <mvc:resources...标签配置不过滤
    1. location元素表示webapp目录下的包下的所有文件
    2. mapping元素表示以/xxx开头的所有请求路径,如/xxx/a或者/xxx/a/b
<!
-- 配置静态资源不进行过滤-编码过滤
location表示路径;mapping表示文件;**表示该目录下的文件以及子目录的文件-->

<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/scripts/**" location="/scripts/"/>

2). 其他配置方式

  1. spring3.0之后,可以这样配置,将会过滤所有的静态资源
<mvc:default-servlet-handler/>
  1. 在web.xml中配置,寻找默认的servlet,不经过前端控制器进行判断了
<servlet-mapping>
    <servlet-name>default<servlet-name/>
    <url-pattern>*.js<url-pattern/>
<servlet-mapping/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容