做外贸做什么英文网站好江北seo页面优化公司
1.过滤器的作用
Filter的作用:过滤器处于客户端和服务器端资源之间,对所有的请求或者响应进行拦截操作
一般用于完成通用的操作,如:登录验证、统一编码处理、敏感字符过滤
2.快速入门步骤
-
定义一个类,实现接口Filter
-
复写方法
-
配置拦截路径
-
web.xml
-
注解
-
-
代码
import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter("/*")//访问所有资源之前,都会执行该过滤器 public class FilterDemo implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {} @Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("过滤器被执行了");//放行filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {} }
3.过滤器细节
-
web.xml配置
<filter><filter-name>demo1</filter-name><filter-class>com.xszx.filter.FilterDemo</filter-class></filter><filter-mapping><filter-name>demo1</filter-name><!--拦截路径--><url-pattern>/*</url-pattern></filter-mapping>
-
过滤器执行流程
-
执行过滤器
-
执行放行后的资源
-
回来执行过滤器放行代码下边的代码
-
-
过滤器声明周期方法
-
init:在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次,用于加载资源
-
doFilter:每一次请求被拦截资源时,会执行,执行多次
-
destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法,只执行一次。
-
-
过滤器配置详解
-
拦截路径配置
-
具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
-
拦截目录:/user/* 访问/uesr下的所有资源时,过滤器都会被执行
-
后缀名:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
-
拦截所有资源: /* 访问所有资源时,过滤器都会被执行
-
-
拦截方式配置:资源被访问的方式
-
注解配置
-
设置dispatcherType属性
-
REQUEST:默认值。浏览器直接请求资源
//浏览器直接请求index.jsp资源时,该过滤器会被执行 @WebServlet(value="/index.jsp",dispatcherType=DispatcherType.REQUEST)
-
FORWARD:转发访问资源
//只有转发访问index.jsp时,该过滤器才会被执行 @WebServlet(value="/index.jsp",dispatcherType=DispatcherType.FORWARD)
-
INCLUDE:包含访问资源
-
ERROR:错误跳转资源
-
ASYNC:异步访问资源
-
-
-
web.xml配置
设置<dispatcher></dispatcher>标签即可
<filter><filter-name>demo1</filter-name><filter-class>com.xszx.filter.FilterDemo</filter-class></filter><filter-mapping><filter-name>demo1</filter-name><!--拦截路径--><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher></filter-mapping>
-
-
-
过滤器链(配置多个过滤器)
-
执行顺序:如果有两个过滤器:过滤器1和过滤器2
过滤器1——>过滤器2——>资源执行——>过滤器2——>过滤器1
-
过滤器先后顺序问题“
-
注解配置:按照类名的字符串比较规则比较,值小的先执行,如:AFilter和BFilter,AFilter就先执行了
-
web.xml配置:<filter-mapping>谁定义在上边,谁先执行
-
-
-
4.登录过滤案例
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/*")
public class LoginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//强转HttpServletRequest request= (HttpServletRequest) servletRequest;//获取资源请求路径String uri=request.getRequestURI();//判断是否包含登录相关资源路径,注意排除css/js/图片资源if (uri.contains("/login.jsp")||uri.contains("/loginServlet")){//包含,放行filterChain.doFilter(servletRequest,servletResponse);}else{//不包含,验证用户是否登录,从session中获取userObject user = request.getSession().getAttribute("user");if(user!=null){filterChain.doFilter(servletRequest,servletResponse);}else{//没有登录,跳转登录页面request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);}}}@Overridepublic void destroy() {
}
}