JavaWeb三大组件
1、都需要在web.xml中进行配置
Servlet
Listener(2个感知监听器不需要配置)
Filter
2、过滤器
它会在一组资源(jsp、servlet、.class、.html)的前面执行
可以让请求得到目标资源,也可以不让请求达到
过滤器有拦截请求的能力
如果在拦截范围内 那么都会拦一次
登录:
允许它访问AServlet、BServlet、CServlet
过滤器如何编写
1、写一个类实现Filter
2、在web.xml中进行配置
Filter
void init(FilterConfig)
创建之后马上执行 Filter会在服务器启动时就创建
void destroy()
销毁之前执行。在服务器关闭时
void doFilter(ServletRequest,ServletResponse,FilterChain)
每次过滤时都会执行
Filter是单例的。
web.xml
<filter>
<filter-name>xxx</filter-name>
<filter-calss>my.web.filter.AFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>xxx</filter-name>
<url-patter>/*</url-pattern
</filter-mapping>
FilterConfig(与ServletConfig相似)
获取初始化参数:getInitParameter()
获取过滤器名称:getFilterName()
获取application:getServletContext()
FilterChain
doFilter(ServletRequest,ServletResponse):放行
放行,就相当于调用了目标的 Servlet的service()方法
多过滤器
FilterChain#doFilter()方法
执行目标资源,或是执行下一个过滤器。如果没有下一个过滤器那么执行的是目标资源,如果有,那么就执行下一个过滤器
过滤器的四种拦截方式
请求 REQUEST
转发 FORWARD
包含 INCLUDE
错误 ERROR
<dispatcher>REQUEST</dispatcher> 默认的 如果有其他的那么没默认的
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
在<filter-mapping>里面配置
多个过滤器的执行顺序
在<filter-mapping>的配置顺序决定了过滤器的执行顺序
过滤器的应用场景
执行目标资源之前做预处理工作,例如设置编码,这种通常会放行,几乎所有的Servlet中都需要写request.setCharacterEncoding()可以放到Filter中
通过条件判断是否放行,例如检验当前用户是否登录 或者用户ip是否被禁用
在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理:回程连接
在<servlet-mapping>中可以使用<servlet-name></servlet-name> 过滤指定的servlet
day19JavaWeb(filter过滤器)
猜你喜欢
转载自blog.csdn.net/Entermomem/article/details/83856791
今日推荐
周排行