Servlet的Filter
来源:互联网 发布:詹姆斯新秀赛季数据 编辑:程序博客网 时间:2024/06/15 11:22
Filter
用于对用户请求进行预处理或者对响应进行后处理,是个典型的处理链
Filter与Servlet的区别
Filter不能直接向用户生成响应。
完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter的创建
- 建Filter处理类
- web.xml文件中配置Filter
在web.xml配置Filter
init-param元素:为该Filter配置初始化参数,这里设置的初始值会封装在Filter的init()方法的FilterConfig参数中。
- param-name子元素:指定参数名。
- param-value子元素:指定参数值。
filter-mapping的在web.xml中的顺序决定Filter的过滤顺序。
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter> <filter-name>AFilter</filter-name> <filter-class>test.AFilter</filter-class> <init-param> <param-name>name</param-name> <param-value>AFilter</param-value> </init-param> </filter> <filter> <filter-name>BFilter</filter-name> <filter-class>test.BFilter</filter-class> </filter> <filter-mapping> <filter-name>BFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>test.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping></web-app>
MyServlet.java
public class MyServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(req.getAttribute("name")+"write in MyServlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); }}
AFilter.java
public class AFilter implements Filter{ private FilterConfig config=null; @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("AFilter initing"); this.config=filterConfig; } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("before invoke AFilter's chain.doFilter() "); HttpServletRequest HservletRequest=(HttpServletRequest)servletRequest; servletRequest.setAttribute("name",config.getInitParameter("name")); filterChain.doFilter(servletRequest,servletResponse); System.out.println("after invoke AFilter's chain.doFilter() "); } @Override public void destroy() { this.config=null; System.out.println("AFilter destroy"); }}
BFilter.java
public class BFilter implements Filter{ private FilterConfig config=null; @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("BFilter initing"); this.config=filterConfig; } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("before invoke BFilter's chain.doFilter() "); filterChain.doFilter(servletRequest,servletResponse); System.out.println("after invoke BFilter's chain.doFilter() "); } @Override public void destroy() { this.config=null; System.out.println("BFilter destroy"); }}
访问该Servlet,在控制台的输出
//Filter在WEB应用加载时就进行了初始化,两个Filter的初始化顺序如下BFilter initingAFilter initing//访问Serlvet时的,过滤顺序如下before invoke BFilter's chain.doFilter() before invoke AFilter's chain.doFilter() AFilterwrite in MyServletafter invoke AFilter's chain.doFilter() after invoke BFilter's chain.doFilter() //卸载WEB应用时,Filter的销毁顺序BFilter destroyAFilter destroy
阅读全文
0 0
- Servlet的Filter过滤器
- Servlet的Filter过滤器
- Servlet/Filter 的生命周期
- 关于servlet的filter
- filter、servlet的区别
- Servlet/Filter 的生命周期
- Servlet的过滤器Filter
- servlet的filter过滤器
- Servlet的Filter
- servlet的filter的使用
- javax.servlet.Filter 的应用
- Java Servlet的Filter 技术
- servlet-filter的一个例子
- javax.servlet.Filter的使用
- javax.servlet.Filter 的应用
- Servlet Filter的调用顺序
- servlet和filter的异同
- Servlet的Filter功能学习
- C++:函数求阶乘(如有不好之处还请谅解)
- 移动端1px实现
- [cnblogs镜像]Github 团队协作基本流程与命令操作 图解git工作流程
- C/C++基础-static作用/数据库范式/随机数生成
- 剑指offer-63题 数据流的中位数
- Servlet的Filter
- DEV中多个xtrareport导出excel,多个sheet页导出
- Java
- [cnblogs镜像][Shell] echo/输出 中引用命令
- Project facet Java version 1.8 is not supported解决记录
- VS2008在Release版本下调试程序
- SimpleDateFormat时间格式化存在线程安全问题
- http你不得不知道的那些事(三)-XHR
- [cnblogs镜像]Mac 查看 剪贴板/剪切板/粘贴板 内容与格式