关于Servlet中重定向url出现中文乱码和请求转发url中文正常

今天在写jsp+servlet的项目的时候,遇到了一个get方式请求中,url出现中文乱码的问题,在这里和大家分享一下问题已经解决经过,如果有遇到同样的问题的朋友可以作为参考。

这个项目是一个练手的项目,纯jsp+servlet,没有使用任何框架。

问题的具体情况是这样的:我在进入一个servlet的时候,在servlet中执行一切正常,但是在最后,我需要跳转到一个查询所有列表的servlet中出重新查找一遍首页的内容,再跳转首页。

我在这里将第一个servlet取名为FirstServlet,第二个servlet取名为SecondServlet。
FirstServlet的执行流程描述如下:

  1. 获取参数:【正常】
  2. 调用service层执行Dao层:【正常,数据库数据已响应】
  3. 重定向到SecondServlet中,并携带一个英文参数和一个中文参数:【url显示正常】

SecondServlet的执行流程描述如下:

  1. 获取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,但是可以正常携带中文参数。

所以,我认为我的这个问题并不是因为编码格式错误而引起的问题,而且最后的解决方法就如上面说的一样,将重定向改为请求转发,那么就正常了。

目前引发这个问题的具体原因不知,分享至此,与广大网友共同探讨!

发布了6 篇原创文章 · 获赞 4 · 访问量 316

猜你喜欢

转载自blog.csdn.net/qq_45193304/article/details/103526660