CMS项目总结:5、编写EncodingFilter统一设置POST请求的编码

由于jsp页面通常是UTF-8编码的,而jsp转向的servlet中,requestresponse是用ISO-8859-1获取post传过来的数据的,所以会出现乱码,可以在每个servlet页面中设置request.setCharacterEncoding(encoding);但是这种做法太繁琐,所以使用filter来实现这个功能。

下面这段是web.xml中的关于encodingFilter部分配置代码:

<filter> 

       <filter-name>encodingFilter</filter-name>

       <filter-class>com.zhongbeidaxue.cms.backend.view.EncodingFilter</filter-class>

               <init-param>

                       <param-name>encoding</param-name>

                       <param-value>UTF-8</param-value>

              </init-param>

      </filter>

  

  <filter-mapping>

          <filter-name>encodingFilter</filter-name>

          <url-pattern>/backend/*</url-pattern>

  </filter-mapping>

Filter是有先后顺序的,由于可能在LoginFilter中使用request.getParameter("")获取参数,所以在web.xml中必须将EncodingFilter写在LoginFilter前(request.setCharacterEncoding(encoding);必须写在所有request.getParameter("");)。

EncodingFilter的代码:

CMS项目总结:5、编写EncodingFilter统一设置POST请求的编码_第1张图片

 

通过在web.xml中配置

  <init-param>

  <param-name>encoding</param-name>

  <param-value>UTF-8</param-value>

  </init-param>

可以更好的实现扩展,而不是定死request.setCharacterEncoding("UTF-8")

所以在请求一个servlet时的执行过程是:

1、通过EncodingFilter,获取encoding = config.getInitParameter("encoding");设置request.setCharacterEncoding(encoding)

2、通过LoginFilter,判断session中有没有LOGIN_ADMIN;

3、如果有LOGIN_ADMIN的话,才到达具体的servlet

你可能感兴趣的:(cms,jsp,servlet,filter,login,encoding)