-
过滤器链执行顺序:
用户请求-->过滤器1-->过滤器2-->servlet service-->过滤器2-->过滤器1-->用户
查看全部 -
项目启动时 init,
访问项目时 doFilter,
项目停止时 destroy
查看全部 -
init--->doFilter--->destroy
查看全部 -
@web.xml <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.imooc.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/main.jsp</url-pattern> <dispatcher>FORWARD</dispatcher> </filter-mapping> @FirstFilter.java public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException{ HttpServletRequest hsreq = (HSReq) req; HttpServletResponse hsres = (HSRes) res; // 重定向:Dispatcher走REQUEST // hsres.sendRedirect(hsreq.getContextPath()+"/main.jsp"); hsres.sendRedirect(hsreq.getContextPath() + "/middle.jsp"); // 转发:Dispatcher走FORWARD // hsreq.getRequestDispatcher("main.jsp").forward(hsreq, hsres); // hsreq.getRequestDispatcher("main.jsp").include(hsreq, hsres);//同理
查看全部 -
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter有如下几个用处。
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
Filter可负责拦截多个请求或响应;一个请求或响应也可被多个请求拦截。
创建一个Filter只需两个步骤:
创建Filter处理类(实现Filter接口).
web.xml文件中配置Filter(配置<filter>与<filter-mapping>)每个过滤器都有它对应的<url-pattern>地址.即过滤器关联的url地址.<url-pattern>标签是<filter-mapping>下的子标签. 假如多个过滤器相关联的地址都不一样没有交集,则它们都是相互独立的.互不相干. 假如多个过滤器相关联的地址都一样.则它们便构成过滤器链.此时用户请求就会依次通过所有关联这个Web资源地址的过滤器. 过滤器链就是针对一个客户的请求,找到匹配的过滤器有多个.用户请求就会依次通过所有关联这个Web资源的过滤器.服务器会按照web.xml文件中过滤器定义的先后顺序组装成一条链.执行的顺序也是沿着这条链. 当过滤器的doFilter()方法中的chain调用doFilter(request,response)方法.符合规则则会把请求传递给下一个过滤器,下一个过滤器依次调用chain.doFilter(),直到传递到Web资源.当Web资源处理完传递过来的请求并返回响应后.此时便执行doFilter()方法放行后的方法.过滤器把响应传递给用户,从最接近Web资源的过滤器开始传递响应给用户. 假设定义过滤器的顺序为filter1、filter2、filter3.(都关联同一个web资源或Servlet) 初始化顺序(一启动服务器时加载,根据web.xml的定义过滤器的顺序初始化):filter1-->filter2-->filter3 过滤器执行顺序:cilent发送request-->filter1-->filter2-->filter3-->Web资源-->Web资源发送响应返回-->通过filter3-->filter2-->filter1-->到达client. 其中doFilter()结束顺序filter3-->filter2-->filter1.跟递归一样,因为放行是chain.doFilter(),必须当此方法执行完,即当请求去到Web资源并处理完信息返回响应后,doFilter()方法便执行放行后的语句.然后就结束. 摧毁顺序(关闭服务器):filter1-->filter2-->filter3.
查看全部 -
<filter> <filter-name>FirstFilter</filter-name> <filter-class>com.imooc.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 注意: /index.jsp:只有index.jsp /index*:带有index前缀的所有URL /*:所有URL “*”代表任意值。
Ps1:<filter>...</filter>:只能有一个;但是<filter-mapping>...</filter-mapping>可以有多个。 Ps2:<filter>...<filter-name>Filter的名字</filter-name>...</filter>必须和<filter-mapping>...<filter-name>Filter的名字</filter-name>...</filter-mapping>一致。
查看全部 -
过滤器的生命周期. 1.实例化阶段-->一启动服务器就会从Web容器的web.xml文件中自动去加载实例化过滤器.且只会实例化一次.即生成了过滤器. 2.初始化阶段-->生成过滤器之后便是初始化,加载一些初始化信息.调用init()方法.且只执行一次. 3.过滤阶段-->执行过滤器的doFilter()方法进行过滤.执行n次的,凡是过滤器捕获到用户的请求,都会执行这个过滤方法. 4.销毁阶段-->当Web容器关闭即服务器关闭的时候,便执行destroy()方法销毁.
查看全部 -
JAVA过滤机制——过滤简介 1、过滤器三部分:过滤源(用户请求)——>过滤规则——>过滤结果 2、过滤器不处理结果,只做辅助性操作 3、定义:过滤器是一个【服务器端】的组件,它可以【截取用户端的请求和响应信息】,并对这些信息过滤
查看全部 -
同一个URL请求要经过多个过滤器时,过滤器的执行顺序按照过滤器在Web.xml中的定义顺序来执行。
查看全部 -
查看全部
-
1.一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起
request -> filter1 -> filter2 ->filter3 -> …. -> request resource.
2.chain.doFilter将请求转发给过滤器链下一个filter , 如果没有filter那就是你请求的资源
想当于一个放行方法,之前的请求是到 index.jsp 放行后就会到index.jsp页面 就会执行里面的代码
查看全部 -
在过滤器对象的doFilter()方法中,业务逻辑处理完成之后,需要通过FilterChain对象的doFilter()方法将请求传递到下一个过滤器或者目标资源,否则将出现错误。
查看全部 -
查看全部
-
过滤器链执行过程
查看全部 -
过滤器web.xml的配置
查看全部
举报