Servlet之过滤器Filter总结

您所在的位置:网站首页 过滤器操作培训心得 Servlet之过滤器Filter总结

Servlet之过滤器Filter总结

2024-07-13 13:49| 来源: 网络整理| 查看: 265

目录 概述解决以往难题过滤器过滤过程样例 配置过滤器方式拦截路径三种形式 过滤器链和优先级过滤器链优先级 应用场景之解决乱码问题

概述

  过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术

解决以往难题

  当存在很多冗余的代码,多个servlet都要重复编写,当有了过滤器的存在,则可把共性的代码抽取出来,只编写一遍

过滤器过滤过程 当客户端发送一个请求,对应的过滤器则会拦截该请求执行逻辑代码,执行完毕之后,通过filterChain.doFilter(servletRequest, servletResponse);发送回去当请求执行完毕,返回到过滤器给它一个完成动作的响应 样例

过滤器代码

package filtertest; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(value = "/Servlet") public class Filter1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 1.拦截之后会先执行逻辑代码 System.out.println("该网页已被拦截"); // 2.完成完逻辑代码之后,发送回去,继续执行客户端请求 filterChain.doFilter(servletRequest, servletResponse); // 3.当发送回去,执行完客户端请求之后,又会给拦截一个响应 System.out.println("没想到吧,我又回来了"); } @Override public void destroy() { } }

Servlet请求代码

package filtertest; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(value = "/Servlet") public class Servlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("你正在调用本浏览网页!"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }

运行结果

该网页已被拦截 你正在调用本浏览网页! 没想到吧,我又回来了

配置过滤器方式 注解配置:@WebFilter(name = “过滤器命名” value = “拦截路径”)配置xml文件 过滤器命名 该过滤器所属全名:包名.类名 过滤器命名(对应上面一模一样) 拦截路径 拦截路径三种形式 精准拦截 xx.xxx后缀式拦截 *.html *.jsp *.jpg 等等通配符拦截 /* 过滤器链和优先级 过滤器链

  当客户端对服务器请求之后,服务器调用Servlet会执行多个过滤器,那么这样的过滤器称为过滤器链。

优先级 如果是用注解配置,则按照拦截路径的类全名称的字符串顺序决定作用顺序如果是用web.xml配置,则按照filter-mapping注册顺序,从上往下web.xml配置高于注解方式如果通过使用了注解和web.xml进行配置,则会创建多个过滤器对象,造成过滤多次 应用场景之解决乱码问题 package filtertest; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; // 采用通配符,匹配所有类型的文件都使其拦截 @WebFilter(value = "/*") public class Chinese implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 1.执行逻辑代码。解决乱码 servletRequest.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html;charset=utf-8"); // 2.返回请求回去 filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3