问题:想要从JSP页面跳转到另外一个JSP页面,而不经过后台Controller,但是跳转之后,页面是乱码的,开始想到了JSP页面的编码设置问题,但是没解决问题,
后来看了最后面的两篇文章之后,解决了问题;
笼统的总结:一般的前端页面request请求数据,要经过后端的Controller设置编码,并返回response,这样就不会有乱码问题,但是这里前端直接跳转,由于没有设置编码,所以,
编码会出问题。
详细的总结:一个完整的前端请求到后端响应过程中所涉及到的编码:
第一,由于JSP页面本身就是在HTML静态框架中加入了Java代码的页面,最后再编译成.class文件(即本身还是一个servlet),所以JSP本身就有两个地方涉及到编码的地方:
JSP页面本身的编码:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" %>
HTML页面的编码(包含在HTML的<head>标签中):
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
第二,页面的内容准备好之后,就要将内容提交到服务器;如果项目是运行在Tomcat中的,那么接下来的流程为:
请求数据(包括get请求,post请求,以及ajax请求)-> 拦截器Interceptor -> 过滤器Filter -> Servlet处理业务数据;
所以这里Tomcat也参与一次编码的设置(该设置是在Tomcat的安装目录下的server.xml文件中):
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
其中URIEncoding主要是针对get请求而言的,URI就是指网页域名后的参数部分,所以其编码就是针对get参数设置的。
因此,也不会影响到post请求的编码。至于ajax中的请求方式,可以自定义。
下一个是拦截器,没有拦截器就进入了过滤器,在SprignMVC有关于编码的设置:
<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>
这里是一个过滤器。在web.xml中设置了一系列的过滤器,其执行顺序就是按照先后的顺序执行的,
所以为了设置编码,会把编码过滤器放在前面。
这里涉及到的encoding,就是为了设置request的编码,forceEncoding是表示是否同时设置response的编码,默认是false。
======================到此为止,我的问题解决了,下面是新学到的东西,mark=====================
最后,是ajax乱码的问题;
在SpringMVC中某个controller上加上@ResponseBody标签,SpringMVC就可以自动返回字符串,json等格式的数据,并返回到浏览器,
这里需要设置的是:
@RequestMapping(value = "test.html",produces = "application/json;charset=utf-8")
produces属性,表示响应编码,该方法只能解决一个controller中的额编码问题。
总体配置:
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=utf-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
参考鸣谢:
1. https://www.lagou.com/lgeduarticle/16507.html -------》“SpringMvc中转发的html文件中文是乱码”
2. https://my.oschina.net/u/3551926/blog/1600136 -------》“SpringMVC下会碰到的乱码问题”