JavaWeb学习总结:Filter

发布时间:2026/7/28 15:28:50

JavaWeb学习总结:Filter Filter过滤器1概念web中的过滤器当访问服务器的资源时过滤器可以将请求拦截下来完成一些特殊的功能过滤器的作用一般用于完成通用的操作。如登录验证、统一编码处理、敏感字符过滤。。快速入门注意一点Filter这里的包是javax.servlet下的。步骤1定义一个类实现接口Filter2复写方法3配置拦截路径web.xml注解通过注解配置WebFilter(/*)//访问所有资源之前都会执行该过滤器publicclassFilterDemo1implementsFilter{Overridepublicvoidinit(FilterConfig filterConfig)throwsServletException{}OverridepublicvoiddoFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throwsIOException,ServletException{System.out.println(filterDemo1.....);//放行 filterChain.doFilter(servletRequest,servletResponse);}Overridepublicvoiddestroy(){}}通过web.xml配置?xml version1.0 encodingUTF-8?web-appxmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1filterfilter-namedemo1/filter-namefilter-classcn.jsp.web.filter.FilterDemo1/filter-class/filterfilter-mappingfilter-namedemo1/filter-name!--拦截路径--url-pattern/*/url-pattern/filter-mapping/web-app过滤器的细节1web.xml配置2过滤器执行流程执行过滤器执行放行后的资源回来执行过滤器放行代码下边的代码3过滤器生命周期方法4过滤器配置详解5过滤器链配置多个过滤器过滤器执行流程publicvoiddoFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throwsServletException,IOException{//对request对象请求消息增强System.out.println(filterDemo2执行了。。。。);//放行chain.doFilter(req,resp);//对response对象的响应消息增强System.out.println(filterDemo2回来了。。。。);}过滤器生命周期方法WebFilter(/*)publicclassFilterDemo3implementsFilter{/** * 在服务器关闭后Filter对象被销毁如果服务器正常关闭则会执行destroy方法 * 只执行一次 */publicvoiddestroy(){System.out.println(destroy。。。。);}/** * 每一次请求被拦截资源时会执行执行多次 * param req * param resp * param chain * throws ServletException * throws IOException */publicvoiddoFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throwsServletException,IOException{System.out.println(doFilter。。。。);chain.doFilter(req,resp);}/** * 在服务器启动后会创建Filter对象然后调用init方法只执行一次 * param config * throws ServletException */publicvoidinit(FilterConfig config)throwsServletException{System.out.println(init。。。。);}}过滤器配置详解1拦截路径配置具体路径资源/index.jsp 只有访问index.jsp资源时过滤器才会被执行拦截目录/user/* 访问/user下所有资源时过滤器都会被执行后缀名拦截*.jsp 访问所有后缀名为jsp资源时过滤器都会被执行拦截所有资源/* 访问所有资源时过滤器都会被执行2拦截方式配置资源被访问的方式注解配置设置dispatcherTypes属性1REQUEST默认值。浏览器直接请求资源2FORWARD转发访问资源3INCLUDE包含访问资源4ERROR错误跳转资源5ASYNC异步访问资源web.xml配置设置dispatcher/dispatcher标签即可过滤器链配置多个过滤器执行顺序如果有两个过滤器(过滤器1和过滤器2)1过滤器12过滤器23资源执行4过滤器25过滤器1过滤器先后顺序问题1注解配置按照类名的字符串比较规则比较值小的先执行如AFilter 和 BFilterAFilter就先执行了。2web.xml配置filter-mapping谁定义在上边谁先执行案例1 登录验证 需求访问案例的资源。验证其是否登录如果登录了则直接放行。如果没有登录则跳转到登录页面提示您尚未登录请先登录/** * 登录验证的过滤器 */WebFilter(/*)publicclassLoginFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throwsServletException,IOException{//强制转换HttpServletRequest request(HttpServletRequest)req;//1获取资源请求路径 String urirequest.getRequestURI();//2判断是否包含登录相关资源路径,要注意排除掉css/js/图片/验证码等资源if(uri.contains(/login.jsp)||uri.contains(/loginServlet)||uri.contains(/js/)||uri.contains(/css/)||uri.contains(/fonts/)||uri.contains(/checkCodeServlet)){//包含用户想登录放行 chain.doFilter(req,resp);}else{//不包含需要验证用户是否登录//3从获取session中获取user Object userrequest.getSession().getAttribute(user);if(user!null){//登录放行 chain.doFilter(req,resp);}else{//没有登录跳转登录页面 request.setAttribute(login_msg,您尚未登录请登录);request.getRequestDispatcher(login.jsp).forward(request,resp);}}}publicvoidinit(FilterConfig config)throwsServletException{}}

相关新闻