Filter-过虑器应用之1-设置request编码

来源:互联网 发布:mysql rename table 编辑:程序博客网 时间:2024/06/06 00:55

    写一个过虑器,对所有url全部过虑,/*.doFilter方法中,设置request的编码为utf-8

一般情况下,这个过虑器永远是第一个要执行的过虑器。

    最好是通过配置设置编码。<filter><init-param>…

第一步:实现Filter接口,在doFIlter中接收初始化参数,设置编码

public class CharFilter implements Filter {//声明编码的成员变量private String encoding;public void init(FilterConfig config) throws ServletException {encoding = config.getInitParameter("bm");}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(encoding);//放行,必须要放行。chain.doFilter(request, response);}public void destroy() {}}

第二步:将上面的类配置到web.xml

<filter>  <filter-name>char</filter-name>  <filter-class>cn.itcast.filter.CharFilter</filter-class>  <init-param>  <!-- 为了便于配置,在配置文件中设置编码 -->  <param-name>bm</param-name>  <param-value>UTF-8</param-value>  </init-param>  </filter><filter-mapping><filter-name>char</filter-name><url-pattern>/*</url-pattern></filter-mapping>

对get可以处理中文


在CharFilter中对reuqest进行包装。
目的:修改增强getParameter方法,如果是get转码。

第一步:声明包装类:

//声明包装类class MyRequest extends HttpServletRequestWrapper{public MyRequest(HttpServletRequest request) {super(request);}//增强getParamter@Overridepublic String getParameter(String name) {String val = super.getParameter(name);if(super.getMethod().equals("GET")){try {val = new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return val;}}

第二步:在doFilter方法中,声明包装类的实例

public class CharFilter implements Filter {// 声明编码的成员变量private String encoding;public void init(FilterConfig config) throws ServletException {encoding = config.getInitParameter("bm");}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(encoding);response.setContentType("text/html;charset=" + encoding);// 判断是否需要包装HttpServletRequest req = (HttpServletRequest) request;if (req.getMethod().equals("GET")) {request = new MyRequest(req);}// 声明包装类的实例// 放行chain.doFilter(request, response);}public void destroy() {}}// 声明包装类class MyRequest extends HttpServletRequestWrapper {public MyRequest(HttpServletRequest request) {super(request);}// 增强getParamter@Overridepublic String getParameter(String name) {String val = super.getParameter(name);try {val = new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());} catch (UnsupportedEncodingException e) {e.printStackTrace();}return val;}}


0 0
原创粉丝点击