HttpServletWrqpper和HttpServletResponseWrapper
1).Servlet API中提供了一个HttpServletRequestWrapper类来包装原始的request对象,
HttpServletRequestWrapper类实现了HttpSe rvletRequest接口中的所有方法,
这些方法的内部实现都是调用了一下所包装的request镀锡抢的对应方法
//包装类实现ServletRequest接口。
public class ServletRequestWrapper implements ServletRequest {
//被包装的那个ServletRequest对象
private ServletRequest request;
//构造器传入ServletRequest实现类对象
public ServletRequestWrapper(ServletRequest request) {
if (request == null) {
throw new IllegalArgumentException("Request cannot be null");
}
this.request = request;
}
//具体实现ServletRequest的方法:调用被包装的那个成员变量的方法实现
@Override
public Object getAttribute(String name) {
return this.request.getAttribute(name);
}
@Override
public Enumeration<String> getAttributeNames() {
return this.request.getAttributeNames();
}
}
相类似Servlet API 也提供了一个HttpServletResponseWrqpper类来包装原始的response对象
2).作用:用于对HttpServletRequest或HttpServletResponse的某一个方法进行修改或增强
public class MyHttpServletRequest extends HttpServletRequestWrapper {
public MyHttpServletRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String val=super.getParameter(name);
if(val !=null&&val.contains(" fuck ")){
val=val.replace("fuck", "*****");
}
return val;
}
}
3).使用:在Filter中,利用MyHttpServletRequest替换传入的HttpServletRequest
HttpServletRequest req=new MyHttpServletRequest(request);
filterChain.doFilter(req, response);
此时 到达目标Servlet或JSP的HttpServletRequest实际上是MyHttpServletRequest