servlet容器的工具:Filter
来源:互联网 发布:软件开发报价清单 编辑:程序博客网 时间:2024/05/31 19:39
- 介绍
- 执行流程
- 过滤器的生命周期
- 代码示例
介绍
javax.servlert.Filter是servlert里常用的工具,能够对servlet容器的请求和响应进行修改和检查,是个典型的处理链。可以认为是servlet的一个变种,它与servlet的区别在于:他不能直接为用户生成响应,只提供过滤功能。
执行流程
当一个请求满足了一个filter的过滤条件后,请求会被移交到下一个filter处理。这就涉及到了过滤链FilterChain。服务器会按照web.xlm中定义的filter组装成一条过滤链,依次执行其 doFilter()方法。
过滤器的生命周期
每个过滤器都要实现 javax.servlert.Filter,Filter只有三个方法,对应着Filter的生命周期
public interface Filter { //初始化过滤器,servlet容器创建过滤器实例将调用该方法,该方法读取web.xml文件里的配置初始化参数。 void init(FilterConfig var1) throws ServletException; //执行过滤内容 void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException; //销毁实例,servlet容器在销毁过滤器时调用该方法,释放过滤器占用的资源。 void destroy();}
再来看看FilterChain源码:
public interface FilterChain { //filter调用此方法执行下一个filter void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;}
FilterConfig
public interface FilterConfig { //返回web.xml中定义的该过滤器的名称 String getFilterName(); //返回调用者所处的servlet上下文环境 ServletContext getServletContext(); //返回过滤器初始化参数值的字符串形式 String getInitParameter(String var1); //以Enumeration形式返回过滤器所有初始化参数值,如果没有初始化参数,返回null. Enumeration getInitParameterNames();}
代码示例
web.xlm 配置
<filter> <filter-name>myFilter</filter-name> <filter-class>com.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
实现:
public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { String name = filterConfig.getFilterName(); System.out.println("my filter name:" + name); Student student = new Student(); student.setEmail("asdasdas"); context.setAttribute("myself", student); Student studentFromContext = (Student) context.getAttribute("myself"); System.out.println(studentFromContext.getEmail()); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String addr = servletRequest.getRemoteAddr(); if (addr.equals("10.1.6.77")) { servletResponse.setLocale(new Locale("en_w")); } if (addr.equals("10.1.6.56")) { //在响应头设置session状态 servletResponse.getWriter().write("非法请求..."); servletResponse.getWriter().write("<script>$(function (){window.location.href('/user/login.do');});</script>"); } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { }}
0 0
- servlet容器的工具:Filter
- Servlet容器Filter的使用(Filter解决乱码问题实例)
- servlet容器中servlet,filter,listener的生命周期
- web容器加载Servlet,Filter,Listener的顺序
- web容器加载Servlet,Filter,Listener的顺序(转)
- 容器执行Servlet API 中ServletContext、ServletContextListener、Filter、Servlet的顺序
- 容器执行Servlet API (ServletContext、ServletContextListener、Filter、Servlet的执行顺序)
- 了解 Servlet 和 Filter,容器启动时~
- 在Servlet Filter中使用Spring容器
- 在Servlet Filter中使用Spring容器
- Servlet的Filter过滤器
- Servlet的Filter过滤器
- Servlet/Filter 的生命周期
- 关于servlet的filter
- filter、servlet的区别
- Servlet/Filter 的生命周期
- Servlet的过滤器Filter
- servlet的filter过滤器
- 斯坦福 cs106A Assignment7
- Java学习之string类练习
- UVALive
- Ispci命令详解
- python基础之单引号、双引号和三引号
- servlet容器的工具:Filter
- Leetcode 231. Power of Two
- Android里Fragment的相关知识(二)
- win7 生成jar包
- CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64
- Zoj 3870 Team Formation(异或运算),zoj3870
- 常用Javascript语句
- php $_SERVER['HTTP_USER_AGENT'] 用法介绍
- ReactNative系列之六TouchableOpactity