过滤器:
1. 作用:
拦截源数据和目的数据之间的内容;
比如说:将客服端发送的‘jr’替换成‘×××’,浏览器显示的就是替换后的内容;
2.什么叫表链接:
对同一个内容多次过滤;
过滤器和包装器实现步骤:
1.实现javax.servlet.Filter接口
2.重写方法
public class TestFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method
stub
}
@Override
public void doFilter(ServletRequest arg0,
ServletResponse arg1,
FilterChain
arg2) throws IOException, ServletException {
// TODO Auto-generated method
stub
HttpServletRequest request
=(HttpServletRequest) arg0;------必须强转成父接口
arg2.doFilter(new
Mycharset(request), arg1);------调用dofilter()方法执行后面的操作
}
//写了一个内部类继承HttpServletRequestWrapper包装类
public class Mycharset extends
HttpServletRequestWrapper{
private
HttpServletRequest request;
public Mycharset(HttpServletRequest request)
{
super(request);
this.request=request;
}
//重写getParameter()获得界面输入的参数进行过滤
@Override
public String getParameter(String name) {
String
all=this.request.getParameter(name);
try {
//
将所有的参数转成ISO8859-1这种类型的字符编码
byte []
by=all.getBytes("ISO8859-1");
//再转成gbk,输出来就不会是乱码
all= new
String(by,"gbk");
} catch
(UnsupportedEncodingException e) {
// TODO
Auto-generated catch block
e.printStackTrace();
}
//进行其它业务扩展,比如说将"jr"替换成‘*’,在浏览器看到的就是‘*’
if(all.indexOf("jr")!=-1){
all=all.replaceAll("jr",
"*");
}
return all;
}
}
//重写初始化方法
@Override
public void init(FilterConfig arg0) throws
ServletException {
// TODO Auto-generated method
stub
}
}
##########
配置过滤器 ######
使用filter标签
<filter>
<filter-name>HelloWorldFilter</filter-name>
<filter-class>com.lovobook.HelloWorldFilter</filter-class>
</filter>
<!--
将过滤器与URL模式关联,表示对什么资源进行过滤-->
<filter-mapping>
<filter-name>HelloWorldFilter</filter-name>
<url-pattern>/filter/*</url-pattern>//对请求URL对应的资源过滤/*表示对所有的请求过滤
<servlet-name>testServlet</servlet-name>//对servlet过滤
</filter-mapping>
######### 过滤器类型#########
一共有四种:REQUEST,表示对请求过滤
FORWORD,请求转发过滤
INCLUDE,请求资源经过include才会执行
ERROR,定义异常机制才会执行;
<filter-mapping>
<filter-name>ValidatorFilter</filter-name>
<url-pattern>/filter/*</url-pattern>
<dispatcher></dispatcher>-------过滤器标记
############
过滤器执行顺序############
1.如果是配置的都是url-pattern,按照配置顺序执行;
2.如果url-pattern和servlet-name同时出现,先执行url-pattern,再执行url-pattern
############
包装器
################
作用:用于在客服端请求的内容在显示之前更改
HttpServletRequestWrapper和HttpServletResponseWrappe实现了HttpServletReques和HttpServletResponse接口
当我们继承HttpServletRequestWrapper和HttpServletResponseWrappe时就可以实HttpServletReques和HttpServletResponse
就可以写自己的业务逻辑;