SpringMVC获取请求参数的几个方法及注意点 |
您所在的位置:网站首页 › springmvc获取参数的几种方式 › SpringMVC获取请求参数的几个方法及注意点 |
解决获取请求参数乱码的问题 通过测试发现get方法不会乱码,是因为我们设置了tomcat的Servlet.xml配置文件中的字符集,而使用post方法时,中文显示经常会出现乱码的情况,我们该如何解决? 回顾JavaWeb中所学习的,我们是在创建baseServlet类时就设置了字符集编码,也就是说要在获取请求参数之前设置字符集编码,在之前的学习过程中,为了使用户第一次发起请求速度更快一些,我们将dipatchrServlet的初始化时间设置为(Servlet)服务器启动时,而服务器的三大组件,监听器、过滤器、Servlet程序在服务器启动时的顺序为:监听器–>过滤器–>Servlet程序,所以我们可以将字符集编码设置在过滤器中 那么我们就先来配置web.xml文件,加上过滤器 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter CharacterEncodingFilter /*光加上过滤器并无作用,通常我们都时设置字符集=utf-8,这里还没有设置,那我们就要看一下CharacterEncodingFilter的源码了 有三个属性,encoding此属性是设置字符集的,另外两个属性(request接收,response响应)初始化的时候都为false public class CharacterEncodingFilter extends OncePerRequestFilter { @Nullable private String encoding; private boolean forceRequestEncoding; private boolean forceResponseEncoding; public CharacterEncodingFilter() { this.forceRequestEncoding = false; this.forceResponseEncoding = false; } //主要是看这一段方法 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String encoding = this.getEncoding(); if (encoding != null) { //如果isForceRequestEncoding或者request.getCharacterEncoding() == null其中一个为true我们才可以设置字符集,encoding属性在没有设置的情况下肯定为空,所以这个条件是成立的 if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) { request.setCharacterEncoding(encoding); } //这里就只是判断isForceResponseEncoding是否为true,所以我们要将forceResponseEncoding属性设置为true if (this.isForceResponseEncoding()) { response.setCharacterEncoding(encoding); } } filterChain.doFilter(request, response); } }看了源码之后,我们知道需要在filter中配置他的两个属性 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forceResponseEncoding true CharacterEncodingFilter /* |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |