filterlistener
2017-08-21 本文已影响0人
无聊新生
什么是过滤器
概念:过滤器是javaweb三大组件之一,它的本质是一个接口
作用:可以拦截用户每次的请求与响应
特点:
1、每次请求与响应都拦截
2、可以拦截请求,转发,重定向
Filter入门
1、创建类,实现filter接口
public class AFilter implements Filter{}
2、实现init、doFilter、destory方法
public void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
chain.doFilter(request, response);//只有过滤器的时候相当于放行
}
public void destroy() {}
3、配置web.xml
1.pngFilter过滤原理
-
服务器启动,调用init()方法创建filter实例对象
-
用户每次请求会响应都会调用doFilter()方法
-
调用chain.doFilter(request, response),如果只有一个过滤器,相当于放行,如果有多个过滤器,根据web.xml文件配置的顺序依次过滤
-
当服务器关闭后,调用destory()方法
拦截级别
在web.xml中可以配置过滤器拦截的级别,常用的级别如下:
<!-- 拦截转发 -->
<dispatcher>FORWARD</dispatcher>
<!-- 拦截请求 -->
<dispatcher>REQUEST</dispatcher>
<!-- 拦截包含 -->
<dispatcher>INCLUDE</dispatcher>
Filter的应用
//强转为子类,因为有更多的方法可以使用
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
//获取请求方式
String method = req.getMethod();
if("post".equalsIgnoreCase(method)){//如果是post请求
req.setCharacterEncoding("utf-8");//进行编码
}
resp.setContentType("text/html;charset=utf-8");//所有的响应进行utf-8编码
chain.doFilter(req, resp);//放行所有编码后的请求和响应
- 权限控制
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
String path=req.getRequestURI();//获取请求地址
//放过loginservlet和login.jsp
String op =req.getParameter("op");
if(path.endsWith("login.jsp")||"login".equals(op)){
chain.doFilter(request, response);
return;
}
//判断session是否有user对象
User user=(User)req.getSession().getAttribute("user");
if(user!=null){
chain.doFilter(request, response);//如果有就放行
}else{
resp.sendRedirect("login.jsp");//如果没有就会登录页面
}
监听器
监听器种类
2.pngListener入门
1、创建类,实现接口
2、重写方法
3、web.xml配置
3.png