过滤器初探
来源:互联网 发布:台视网络直播 编辑:程序博客网 时间:2024/06/05 22:41
为什么要引入过滤器
在web开发中,对于web客户端的每一个请求,我们需要进行相同的处理,比如判断用户是否有权限访问特定的web资源(Servlet,JSP页面等)。当然我们可以在所有的web资源都增加相应的代码进行权限判断。但显然这个方法不是最好的,因为增加了很多的重复性操作。于是过滤器就出现了。。。
什么是过滤器
它是一种向web应用程序的请求响应处理添加功能的web服务组件。过滤器会对请求进行相应的处理操作。这样只需要编写一个过滤器,并将该过滤器添加到需要添加的页面,即可实现上面的功能,而且能够大大的简化重复性的操作。
如何编写过滤器
1>编写一个Java类,实现Filter接口
//这里我们以一个判断用户是否登录的例子为例public class UserFilter implements Filter { public void destroy() { //容器删除过滤器实例之前调用该方法,只执行一次 } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //过滤器的逻辑处理部分 HttpServletRequest request = (HttpServletRequest)req; //判断用户是否登录(及Session值是否为空) HttpSession session = request.getSession(); if (session.getAttribute("user") != null){ chain.doFilter(req, resp); return; } request.setAttribute("error", "请先进行登录"); //转发到登录操作 request.getRequestDispatcher("/login").forward(req, resp); } public void init(FilterConfig config) throws ServletException { //创建实例后,调用init方法,只执行一次 }}
关于chain.doFilter(req, resp);作用:将请求转发到下一个过滤器,如果没有,就返回相应的资源。
特别注意
chain.doFilter(req, resp);下面的代码不能有请求,如果有,加上return.
2>为Servlet设置过滤器
在web.xml中进行设置
<filter> <!--过滤器的名称,任意,与下面保持一致--> <filter-name>UserFilter</filter-name> <!--过滤器的项目路径(包名.类名)--> <filter-class>com.web.filter.UserFilter</filter-class> </filter> <filter-mapping> <filter-name>UserFilter</filter-name> <!--要过滤Servlet路径,过滤路径可设置多个--> <url-pattern>/blog</url-pattern> <url-pattern>/record</url-pattern> </filter-mapping>
当然,还可以进行一些初始化参数的配置,这里由于没有用到,就不进行讲解了。
阅读全文
0 0
- 过滤器初探
- MVC过滤器-AOP思想初探
- spring security3.x学习(3)_初探过滤器机制
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- Python :不用加减乘除做加法
- mac os x下配置Android Studio本地gradle
- ASoC框架详细分析
- React Native应用部署/热更新-CodePush最新集成总结(新)
- sql建表
- 过滤器初探
- debian vsftpd
- Vim命令合集
- java编程必看的《OOD启思录》的61条经验原则!
- 50个C/C++源代码网站
- C++中string::find()函数和string::npos函数的使用
- React Native 研究与实践
- 快速查看Mysql帮助文档
- 初识三层