@WebFilter
过滤器种类:
- REQUEST【DEFAULT】
- FORWARD
- INCLUDE
- ERROR
过滤器分类
过滤器的分类
ERROR:目标资源是通过声明式异常处理机制调用时,过滤器将被调用。
在web.xml中配置错误状态码,错误页面路径。
再配置过滤器处理异常请求,url-pattern配置为错误页面路径,注意dispatcher必须要配置为ERROR,才能在发生错误,跳转到错误页面时调用过滤器。
Servlet3.0 ASYNC 支持异步处理:Filter将异步处理完成相关操作,将一直往下执行。
@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。
webFilter的常用属性
注解方式配置的过滤器
错误页面的配置
<error-page>
过滤器的分类:
过滤器注解
@WebFilter
servlet2.5的分类
@WebFilter的常用属性
servlet3支持@WebFilter的注解形式
过滤器的分类2
ERROR:目标资源是通过声明式异常处理机制调用时,过滤器将被调用。(例如:我们访问一个路径,出现一个错误,系统会给出一个错误提示,我们可以通过它来实现人性化提示)
路径找不到时,通过xml进行友好型提示。
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
ERROR的用途:发生错误时,系统记录这个错误,并且通过<error-page>标签进行跳转到错误页面,通过ERROR过滤器程序员可以检测这个错误的来源以及位置。
Servlet3.0——>添加了ASYNC:支持异步处理。(例如:有时我们的跳转资源不是JSP页面,而是一个Servlet处理业务逻辑,并且处理时间非常长,这时过滤器接下来的代码就会一直等待Servlet完成,这样就会一直等待,所以Servlet3.0支持无论执行完与否,都会向下执行。)
另一种实现过滤器功能的方式
@WebFilter:用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。
过滤器的异步处理:
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的配置过滤器方法
Servlet3.0支持注解形式的Filter
@WebFilter注解的常用属性:
Servelt2.5:过滤器的分类:
@WebFilter的常用属性
过滤器分类
使用FilterChain chain时,转发到下一个filter,如果没有下一个即调整转到所需的资源
Java EE 6.0 支持异步处理 ASYNC
过滤器分类三
过滤器的分类
安徽随便打个