1.先写一个HttpFillter类实现Fillter接口
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class HttpFilter implements Filter {
private FilterConfig filterConfig;
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
// 将 request 和 response 强转为子类
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) res;
doFilter(request, response, chain);
}
public abstract void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException;
public void init(FilterConfig filterConfig) throws ServletException {
init();
this.filterConfig=filterConfig;
}
private void init() {
//让子类去实现
}
public void destroy() {
}
public FilterConfig getFilterConfig() {
return this.filterConfig;
}
}
2.再写一个类CharacterFilter,继承HttpFillter类
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
public class CharacterFilter extends HttpFilter {
@Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
/* String requestedWith = request.getHeader("x-requested-with");
String type = request.getContentType();
if (requestedWith != null && "XMLHttpRequest".equals(requestedWith)
&& null != type
&& ("application/x-www-form-urlencoded".equals(type)||"application/x-www-form-urlencoded; charset=UTF-8".equals(type))) {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
request.getParameterMap();
}
*/
// 解决全站response乱码问题
response.setContentType("text/html;charset=utf-8");
//解决全站request中文参数乱码问题
request.setCharacterEncoding("utf-8");//只能解决post方式下的乱码
//对request进行包装,包装getParameter方法
Myrequest myrequest=new Myrequest(request);
chain.doFilter(myrequest, response);
}
}
class Myrequest extends HttpServletRequestWrapper{
public Myrequest(HttpServletRequest request) {
super(request);
// 将被包装对象给父类用
}
// 覆写 getParameter
@Override
public String getParameter(String name) {
// 调用被包装对象的方法获得表单参数
String value=super.getParameter(name);
if(value==null)
return null;
//通过父类调用被包装的对象的方法 获得请求方式
String method=super.getMethod();
if(!"get".equalsIgnoreCase(method)){
return value;
}
//是get方式
try {
value=new String(value.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return Message(value);
}
public String Message(String message){
if(message==null){
return null;
}
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}