网页右边,向下滑有目录索引,可以根据标题跳转到你想看的内容 |
---|
如果右边没有就找找左边 |
一、Filter
1、快速入门
但是此时我们会发现页面数据没有显示,因为被过滤,我们没有放行这个请求,所以访问不到页面
package com.yzpnb.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")//客户端访问任何资源都需要经过此过滤器过滤
public class Filter1 implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter1----------doFilter");
//放行
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy() {
}
}
2、使用web.xml配置过滤器Filter
上面快速入门,我们使用的是注解@WebFilter()来配置过滤器,接下来介绍web.xml文件配置 |
---|
<?xml version="1.0" encoding="UTF-8"?><!-- 这是xml文档的文档声明 -->
<!--
- 这是XML Schema格式约束文件,此文件将约束用户编写xml文档的规则
-->
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--与Servlet一样,先指定filter的名称和类-->
<filter>
<filter-name>filter1</filter-name><!--filter的名字-->
<filter-class>com.yzpnb.filter.Filter1</filter-class><!--filter的实体类-->
</filter>
<!--filter映射-->
<filter-mapping>
<filter-name>filter1</filter-name><!--通过filter名字,映射到指定filter-->
<url-pattern>/*</url-pattern><!--配置当前过滤器的拦截路径-->
</filter-mapping>
</web-app>
3、Filter执行流程
执行流程 |
---|
执行过滤器 |
执行放行后的资源 |
执行过滤器放行代码下面的代码 |
4、Filter生命周期
生命周期 |
---|
1、init()方法,会在服务器启动时,创建Filter对象时执行 |
2、doFilter(),会在客户端访问被拦截资源时执行,不需要拦截的不会执行 |
3、destroy(),服务器正常关闭时,执行 |
5、Filter配置详解
配置拦截路径,就是规定用户请求哪些路径时,会被过滤器拦截 |
---|
@WebFilter("/*")//此注解标识的Filter类,过滤所有请求,只要它请求是这个项目
@WebFilter("/user/*")//过滤/user/路径下资源,只要用户请求地址有/user/就过滤
@WebFilter("*.jsp") //过滤所有后缀为jsp的文件,只要用户请求jsp文件就过滤
@WebFilter("index.jsp")//只过滤这一个静态资源,用户只有请求index.jsp文件才会被过滤
配置拦截方式,就是某用户请求某路径资源,此时与过滤器的拦截路径匹配,那么此时不会直接拦截,而是看拦截方式,比如配置了拦截方式为浏览器,那么只有浏览器直接来的请求会拦截,而转发等其它方式来的请求,不会拦截 |
---|
@WebFilter(urlPatterns = "/*",dispatcherTypes = DispatcherType.REQUEST)//过滤所有由浏览器直接请求资源的请求
@WebFilter(urlPatterns = "/*",dispatcherTypes = DispatcherType.FORWARD)//过滤转发来的所有请求
6、过滤器链(多个Filter配置)
Listener