增强request中的getParameter方法】
- 继承 :控制这个类构造.
- 装饰者模式 :增强的类和被增强类实现相同的接口,增强的类中获得到被增强的类的引用.
- 动态代理 :被增强的类实现接口就可以.
EncodingServlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username1");
System.out.println(username);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username2");
System.out.println(username);
}
GenericEncodingFilter:
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
MyHttpServletRequestWrapper myHttpSercletRequestWrapper = new MyHttpServletRequestWrapper(req);
chain.doFilter(myHttpSercletRequestWrapper, response);
}
MyHttpServletRequestWrapper:
package encoding.filter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
public MyHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String method = request.getMethod();
if("get".equalsIgnoreCase(method)) {
String value = null;
try {
value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value;
}
if("post".equalsIgnoreCase(method)) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return super.getParameter(name);
}
}