今天在写jsp+servlet的项目的时候,遇到了一个get方式请求中,url出现中文乱码的问题,在这里和大家分享一下问题已经解决经过,如果有遇到同样的问题的朋友可以作为参考。
这个项目是一个练手的项目,纯jsp+servlet,没有使用任何框架。
问题的具体情况是这样的:我在进入一个servlet的时候,在servlet中执行一切正常,但是在最后,我需要跳转到一个查询所有列表的servlet中出重新查找一遍首页的内容,再跳转首页。
我在这里将第一个servlet取名为FirstServlet,第二个servlet取名为SecondServlet。
FirstServlet的执行流程描述如下:
- 获取参数:【正常】
- 调用service层执行Dao层:【正常,数据库数据已响应】
- 重定向到SecondServlet中,并携带一个英文参数和一个中文参数:【url显示正常】
SecondServlet的执行流程描述如下:
- 获取FirstServlet中传过来的两个参数:【英文参数获取正常,中文变成了???】
问题就是如此,而我最终的解决方法为:将FirstServlet最后一步中的重定向变为请求转发,同样携带参数,最后在SecondServlet中获取到了正常的中文参数。
我的编码环境配置:
Post方式:我编写了一个过滤器。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
}
public CharacterEncodingFilter() {
}
public void destroy() {
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
Get方式:我使用的tomcat版本为8.5,在tomcat中,8.0以上的版本默认处理get请求的编码就是UTF-8,所以我并没有进行处理,但是为了保险起见,我还是在server.xml中配置了get方式的编码格式,用于处理中文乱码。
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
但是事实也证明,我的这个编码并没有针对到我的问题,而且我在同样的tomcat环境中对其他项目的get方式写了Demo,但是可以正常携带中文参数。
所以,我认为我的这个问题并不是因为编码格式错误而引起的问题,而且最后的解决方法就如上面说的一样,将重定向改为请求转发,那么就正常了。
目前引发这个问题的具体原因不知,分享至此,与广大网友共同探讨!