一、乱码问题的解决方案
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). 常用配置方式
-
<mvc:resources...
标签配置不过滤- location元素表示webapp目录下的包下的所有文件
- 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). 其他配置方式
- spring3.0之后,可以这样配置,将会过滤所有的静态资源
<mvc:default-servlet-handler/>
- 在web.xml中配置,寻找默认的servlet,不经过前端控制器进行判断了
<servlet-mapping>
<servlet-name>default<servlet-name/>
<url-pattern>*.js<url-pattern/>
<servlet-mapping/>