1. 配置文件web.xml
<filter>
<filter-name>CharacterEncodingFilter2</filter-name>
<filter-class>cn.itcast.web.filter.CharacterEncodingFilter2</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. 定义类并实现Filter
2. 定义类并实现Filter
public class CharacterEncodingFilter2 implements Filter {
private FilterConfig config;
private String defaultCharset="UTF-8";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.config=filterConfig;
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
//获取要设置的字符集
String charset=this.config.getInitParameter("charset");
if(charset==null){
charset=defaultCharset;
}
//将ServletRequest/ServletResponse强转为HttpServletRequest/HttpServletResponse
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//按参数设置编码格式
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
response.setContentType("text/html;charset="+charset);
//放行
chain.doFilter(
new Myrequest(request), response);
//因为以上方法,只解决了post提交方式的乱码问题,没有解决get方式乱码问题,所以要对request方法进行增强。
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
3.定义包装类增强功能
/*增强包装类
* 1.写一个类,实现与被增强对象相同的接口(通常继承sun公司已为用户写好的包装类,则可简化代码书写)
* 2.定义一个变量,记住被增强对象
* 3.定义一个构造方法,接收被增强对象
* 4.覆盖想增强的方法
* 5.对于不想增加的方法,直接调用被增强对象(目标对象)的方法
* */
class Myrequest extends HttpServletRequestWrapper{
通常继承sun公司已为用户写好的包装类,则可简化代码书写
private HttpServletRequest request;
public Myrequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public String getParameter(String name) {
String value=this.request.getParameter(name);
if(!request.getMethod().equalsIgnoreCase("get")){
return value;
}
if(value==null){
return null;
}
try {
return value=new String(value.getBytes("iso8859-1"),request.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}