Servlet —— Filter示例:字符编码

来源:互联网 发布:苹果抢购软件 编辑:程序博客网 时间:2024/05/17 13:12

功能

字符编码Filter是最常用的Filter之一,常用来解决Tomcat等服务器里request、response乱码的问题。

字符编码Filter是在request提交到Servlet之前对request进行指定编码方式的编码。

 

代码

publicclass CharacterEncodingFilterimplements Filter {

private StringcharacterEncoding;// 编码方式,配置在web.xml

privatebooleanenabled;// 是否启用该Filter,配置在web.xml

 

@Override

publicvoid init(FilterConfig filterConfig)throws ServletException {

this.characterEncoding = filterConfig.getInitParameter("characterEncoding")

.trim();

this.enabled ="true".equalsIgnoreCase(filterConfig.getInitParameter(

"enabled").trim());

}

 

@Override

publicvoid doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) resp;

HttpServletRequest request = (HttpServletRequest) req;

if (enabled) {

String method = request.getMethod();

if ("GET".equalsIgnoreCase(method)) {

// GET方式提交

chain.doFilter(new RequestWrapper(request), response);

} elseif ("POST".equalsIgnoreCase(method)) {

// POST方式提交

request.setCharacterEncoding(characterEncoding);

chain.doFilter(request, response);

}

} else {

chain.doFilter(request, response);

}

}

 

privateclass RequestWrapperextends HttpServletRequestWrapper {

public RequestWrapper(HttpServletRequest request) {

super(request);

}

 

@Override

public String getParameter(String name) {

try {

returnnew String(super.getParameter(name).getBytes("iso8859-1"),

characterEncoding);

} catch (UnsupportedEncodingException e) {

thrownew RuntimeException("不支持编码:" + characterEncoding);

}

}

}

 

@Override

publicvoid destroy() {

}

}

 

 

<filter>

<filter-name>characterEncodingFilter</filter-name>

<filter-class>cn.itcast.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>enabled</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>characterEncoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

 

<filter-mapping>

<filter-name>characterEncodingFilter</filter-name>

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

</filter-mapping>

0 0