-
过滤器分类查看全部
-
生命周期查看全部
-
Web.xml 配置查看全部
-
request.getContextPath(); save user info to session 在doFilter中获得ServletRequest convert to HttpServletRequest之后,request.getSession,接着在获得的session中设置 过滤的黑名单和白名单需要在FitlerConfig中配置 对于白名单放行 if true chain.doFilter 黑名单跳转到相应的处理页面 else response.sendRedirect FilterConfig配置 filter url:/*(*号是全匹配) request.getRequestURI();(获得当前request请求的URI地址,用于判断是否合法请求) 使用参数配置->init()->config.getInitParameter(name)(获得FilterConfig)查看全部
-
forward转发 :一次请求一次回应 服务器跳转 sendredirect重定向: 两次请求两次回应 客户端跳转 由于sendredirect是request,会激活REQUEST类型的过滤器,因此要注意,是否会形成重定向循环 request 过滤request请求 forward 过滤重定向请求 include 过滤include请求 过滤器默认是REQUETS类型查看全部
-
过滤器查看全部
-
不放行,循环中直接return退出;
放行,循环中直接continue跳出。
查看全部 -
过滤器在实际项目中的应用场景
查看全部 -
过滤器不能处理用户请求,但是可以改变请求路径
查看全部 -
过滤器的分类(Servlet2.5)
【1】REQUEST:默认的过滤器(我们配置过滤器默认选择的),用户直接访问页面时,Web容器将会调用过滤器,通过链接访问直接到达过滤器。
重定向:会使用REQUEST过滤器,response.sendRedirect(request.getContextPath() + "/main.jsp");
转发:会使用RESPONSE过滤器,request.getRequestDispatcher("main.jsp").forward(request, response);
【2】FORWARD:目标资源是通过RequestDispatcher的forward访问时,该过滤器被调用。<dispatcher>FORWARD</dispatcher>
【3】INCLUDE:目标资源时通过RequestDispatcher的include方法调用时,过滤器将被调用。<dispatcher>INCLUDE</dispatcher>
request.getRequestDispatcher("main.jsp").include(request, response);使用这个跳转其他过滤器将不起作用,只有INCLUDE的过滤器会起作用。
【4】ERROR
查看全部 -
一.过滤器的工作原理
用户发送请求到过滤器,过滤器将用户请求发送到web资源,web资源将响应发送到过滤器,过滤器将响应发送给用户
二.过滤器的工作周期
1.实例化阶段-->一启动服务器就会从Web容器的web.xml文件中自动去加载实例化过滤器.且只会实例化一次.即生成了过滤器. 2.初始化阶段-->生成过滤器之后便是初始化,加载一些初始化信息.调用init()方法.且只执行一次. 3.过滤阶段-->执行过滤器的doFilter()方法进行过滤.执行n次的,凡是过滤器捕获到用户的请求,都会执行这个过滤方法. 4.销毁阶段-->当Web容器关闭即服务器关闭的时候,便执行destroy()方法销毁.查看全部 -
Filter的三个方法:
过滤器可以改变用户请求的web资源,也就是说可以改变用户请求的路劲
过滤器不能直接返回数据,不能直接处理用户请求,它不是一个标准的servlet
/*中(*)代表任意值
红色区域代表过滤器类的配置
<filter>...</filter>
绿色区域配置过滤器URL相关映射配置
<filter-mapping>...</filter-mapping>
URL是需要过滤的路径
@JAVA过滤机制——第一个过滤器案例
1、创建一个过滤器类 ,继承自servlet下的Filter
2、重写三个方法init() doFilter() destroy()方法
(1)init()初始化:这个方法可以读取web.xml文件中的过滤器初始化参数。通过参数FilterConfig arg0可以获取更多参数
(2)doFIlter()核心:完成实际的过滤操作。当用户请求访问与过滤器【关联的URL】时,Web容器将先调用过滤器的doFilter方法,FilterChain arg2参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发,重定向将请求转发给其他资源。
(3)web容器在消耗过滤器前调用该方法,用于释放过滤器占用的资源。(大多数情况用不到)
3、过滤器的配置如图:
(1)一般配置一个<filter>,然后用多个<filter-mapping>与之关联
在过滤器对象的doFilter()方法中,业务逻辑处理完成之后,需要通过FilterChain对象的doFilter()方法将请求传递到下一个过滤器或者目标资源,否则将出现错误。
查看全部 -
可以用@webfilter注解进行filter配置查看全部
-
我来说说我对异步过滤器的理解吧。根据过滤器的规则,过滤器得等servlet执行结束才能停止,所以如果servlet执行很久,过滤器得等很久,所以说呢,为了使得过滤器早点执行结束,就让servlet在后台执行,过滤器提前结束,这就是异步过滤器的优点所在
@WebServlet(asyncSupported = true, displayName = "/AsyncServlet", urlPatterns={"/servlet/AsyncServlet"})
asyncSupported = true 是必须开启用以支持异步
@WebFilter(filterName="AsynFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})
asyncSupported = true 是必须开启用以支持异步
dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}
DispatcherType.REQUEST必须要加上,否则过滤器就不会生效了
同时注意在过滤的地址和servlet的地址必须相同查看全部 -
request 用户直接访问页面时(eg:请求response.sendredirect请求重定向),Web容器将会调用过滤器
forward 目标资源通过RequestDispatcher的forward访问时,该过滤器被调用 <jsp:forward也能触发
include 目标资源通过RequestDispatcher的include访问时,该过滤器被调用 <jsp:include也能触发
error 目标资源通过声明式处理机制调用时,该过滤器被调用<error-page>
<error-code>404</error-code>//500
<location>/error.jsp</location>
</error-page>
<filter>
<filter-name>ErrorFilter</filter-name>
<filter-class>com.imooc.filter.ErrorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ErrorFilter</filter-name>
<url-pattern>/error.jsp</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
@error.jsp
您输入的路径有误!
@ErrorFilter.java
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("检测到有错误的信息!");
filterchain.doFilter(servletrequest, servletresponse);//注意:放行
}
Servlet3.0中加入了@引言的这种方式.
@WebFilter用来将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器.(部署理解为项目发布,就会把Web.xml文件与项目的文件读取在Web容器里,部署的时候容器就会识别注解,将相应的类部署为过滤器.启动服务器才执行过滤器的初始化方法.)
则添加过滤器不需要再web.xml中配置.直接在过滤器类里加入@WebFilter声明即可.
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。
过滤器filter-mapping的<servlet-name>标签意思是过滤器关联Servlet,当某些用户请求访问Servlet的时候,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)
过滤器filter-mapping的<url-pattern>标签意思是过滤器关联的URL地址.当用户访问关联的URLWeb资源时,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)
图中上部分是Servlet3.0配置过滤器的方法.下部分是Servlet2.5的配置过滤器方法.查看全部
举报