HttpServletWrapper 和 HttpServletResponseWrapper

1). Servlet API 中提供了一个 HttpServletRequestWrapper 类来包装原始的 request 对象,
HttpServletRequestWrapper 类实现了 HttpServletRequest 接口中的所有方法,
这些方法的内部实现都是仅仅调用了一下所包装的的 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 的方法: 调用被包装的那个成员变量的方法实现。 
public Object getAttribute(String name) {
	return this.request.getAttribute(name);
}

public Enumeration getAttributeNames() {
	return this.request.getAttributeNames();
}    

//...	

}

相类似 Servlet API 也提供了一个 HttpServletResponseWrapper 类来包装原始的 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

转载自尚硅谷是视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值