过滤器
2016-03-07 09:19
218 查看
JavaWeb三大组件:Servlet、Listener(2个感知监听器不需要配置)、Filter,都需要在web.xml中进行配置
过滤器的作用是拦截请求,它会在一组资源(jsp、servlet、.css、.html等等)的前面执行!
过滤器如何编写
1. 写一个类实现Filter接口
2. 在web.xml中进行配置
Filter接口
void init(FilterConfig)
* 创建之后,马上执行;Filter会在服务器启动时就创建!
*FilterConfig有三个方法,作用是获取参数,获取过滤器名,获取appliction
**getInitParameter()
** getFilterName()
**getServletContext()
void destory()
* 销毁之前执行!在服务器关闭时销毁
void doFilter(ServletRequest,ServletResponse,FilterChain)
* 每次过滤时都会执行
* FilterChain有一个方法,doFilter(ServletRequest, ServletResponse): 放行,就相当于调用了目标Servlet的service()方法!
Filter是单例的!
过滤器的四种拦截方式
<dispatcher>REQUEST</dispatcher>默认的!
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
在<filter-mapping>中进行配置!
举个栗子:
运行结果:
BServlet statrt!
AServlet...
BServlet end
程序首先查看web.xml中的配置,AFilter拦截了AServlet,BFilter拦截了AServlet以及转发功能,BFilter拦截BServlet进行转发,然后放行,执行了AServlet
<filter-mapping>的配置顺序决定了过滤器的执行顺序!
过滤器的应用场景:
*执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行
*通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用
*在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理
过滤器的作用是拦截请求,它会在一组资源(jsp、servlet、.css、.html等等)的前面执行!
过滤器如何编写
1. 写一个类实现Filter接口
2. 在web.xml中进行配置
package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class AFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub //chain.doFilter(request, response); //放行 } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } }
<filter> <filter-name>Afilter</filter-name> <filter-class>filter.AFilter</filter-class> </filter> <filter-mapping> <filter-name>Afilter</filter-name> <url-pattern>/AServlet</url-pattern> </filter-mapping>
Filter接口
void init(FilterConfig)
* 创建之后,马上执行;Filter会在服务器启动时就创建!
*FilterConfig有三个方法,作用是获取参数,获取过滤器名,获取appliction
**getInitParameter()
** getFilterName()
**getServletContext()
void destory()
* 销毁之前执行!在服务器关闭时销毁
void doFilter(ServletRequest,ServletResponse,FilterChain)
* 每次过滤时都会执行
* FilterChain有一个方法,doFilter(ServletRequest, ServletResponse): 放行,就相当于调用了目标Servlet的service()方法!
Filter是单例的!
过滤器的四种拦截方式
<dispatcher>REQUEST</dispatcher>默认的!
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
在<filter-mapping>中进行配置!
举个栗子:
<filter> <filter-name>Afilter</filter-name> <filter-class>filter.AFilter</filter-class> </filter> <filter-mapping> <filter-name>Afilter</filter-name> <url-pattern>/AServlet</url-pattern> </filter-mapping>
<filter>
<filter-name>Bfilter</filter-name>
<filter-class>filter.BFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Bfilter</filter-name>
<url-pattern>/AServlet</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("AServlet..."); } }
public class BServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/AServlet").forward(request, response); } }
public class AFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub System.out.println("过滤器死亡了"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("AServlet statrt!"); chain.doFilter(request, response); System.out.println("AServlet end"); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("过滤器出生了"); } }
public class BFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("BServlet statrt!"); chain.doFilter(request, response); System.out.println("BServlet end"); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } }在地址栏输入http://localhost:8080/项目名/BServlet
运行结果:
BServlet statrt!
AServlet...
BServlet end
程序首先查看web.xml中的配置,AFilter拦截了AServlet,BFilter拦截了AServlet以及转发功能,BFilter拦截BServlet进行转发,然后放行,执行了AServlet
<filter-mapping>的配置顺序决定了过滤器的执行顺序!
过滤器的应用场景:
*执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行
*通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用
*在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理
相关文章推荐
- 模拟器cmd指令
- 代码重构(二):类重构规则
- RecyclerView重用导致的元素重复问题
- idea设置todo快捷键
- “新ICT”时代,商业与科技共同进化
- C语言实现使用动态数组实现循环队列
- 改变心态:让技术安全工作不再枯燥
- 课程进度总结
- Linux环境变量PS1_命令行提示符设置
- 用yum来安装jenkins
- poj 2479 Maximum sum 最大数字连续和
- 日经春秋 20160307
- 天声人語 20160307 命ひしめく春に
- 下载文件到指定文件夹
- 管理win2012文件服务器-笔记
- java.util.Properties类的使用详解
- 试试用有限状态机的思路来定义javascript组件
- 详解iOS App中调用AVAudioPlayer播放音频文件的用法
- 言
- Myeclipse10中 如果出现不小心删掉了某些类和包,进行数据回复