WEB开发 16:Servlet Filter
程序员文章站
2022-05-13 19:05:23
...
doFilter方法中有一个FilterChain参数,用于表示过滤器链,下面这个草图就是过滤器链的简单表述。
将在第15课中的登录程序使用过滤器重写
LoginFilter.java 在这个过滤器中判断session中的user是否存在,如不存在就返回登录界面
package com.test.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class LoginFilter implements Filter {
public void destroy() {
System.out.println("filter destroy invoed");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest r = (HttpServletRequest)request;
String requestURI = r.getRequestURI();
//下面这两个页面,不能过滤,在MyLoginServlet中还是需要判断session中的user是否为空
if(requestURI.endsWith("login.jsp") || requestURI.endsWith("MyLoginServlet")){
chain.doFilter(request, response);
return;
}
HttpSession session = r.getSession();
//如果session中的user为空,则返回登录页面
if(null == session.getAttribute("user")){
request.getRequestDispatcher("/filter/login.jsp").forward(request, response);
return;
}else{
chain.doFilter(request, response);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter init invoked");
}
}
过滤器新建好后,需要配置web.xml文件
<filter> <filter-name>loginfilter</filter-name> <filter-class>com.test.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
过滤链
存在多个过滤链时,是以在web.xml文件中的序列来排队过滤。
如下图,两个url-pattern是一样的,表示都对note进行过滤,先进filter1再进filter2过滤器。
此外还可以为过滤器配置初始参数
<filter> <filter-name>loginfilter</filter-name> <filter-class>com.test.filter.LoginFilter</filter-class> <init-param> <param-name>hello</param-name> <param-value>world</param-value> </init-param> <init-param> <param-name>zhang</param-name> <param-value>sang</param-value> </init-param> </filter>
然后在filter类的init方法中取出。
public void init(FilterConfig filterConfig) throws ServletException {
String value1 = filterConfig.getInitParameter("hello");
String value2 = filterConfig.getInitParameter("zhang");
}
此外还可以在filter类中获取application对象,如下
filterConfig.getServletContext();
HttpServletRequest r = (HttpServletRequest)request;
r.getSession().getServletContext();
推荐阅读
-
web.xml中servlet, bean, filter, listenr 加载顺序_动力节点Java学院整理
-
java web开发之servlet图形验证码功能的实现
-
Web开发:关于16进制颜色代码你又知道多少
-
web.xml 中的listener、 filter、servlet 加载顺序及其详解
-
Java web实验购物网站(IDEA开发环境,JavaScript,JSP,Servlet,jQuery,Ajax,MySql等)——实现购物车
-
web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)
-
荐 2020-07-16-----web前端开发中用到的PS基础操作(PS取色、PS测量、PS切片)
-
web.xml 中的listener、 filter、servlet 加载顺序及其详解
-
Tomcat 源码分析(三)-(二)-WEB应用中的Listener、Filter、Servlet 的加载和调用
-
EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架