include方式的原理
include方式不能理解谁执行了过滤器,web.xml文件中设置过滤的url为test2.jsp,dispatch设置为INCLUDE,怎么访问test2.jsp没有执行doFilter方法呢,反而访问test1.jsp执行了doFilter方法。
代码:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>filterDemo1</display-name> <welcome-file-list> <welcome-file>test1.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>testFilter</filter-name> <filter-class>filter.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>testFilter</filter-name> <url-pattern>/test2.jsp</url-pattern> <dispatcher>INCLUDE</dispatcher> </filter-mapping> </web-app>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <jsp:include page="/test2.jsp"></jsp:include> <h1>Test1</h1> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <h1>Test2</h1> </body> </html>
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TestFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println(">>>>>>>TestFilter doFilter<<<<<<<<<");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}0
收起
正在回答
1回答
同学你好!
同学是直接在地址栏中访问test2.jsp,过滤器没有调用吗?如果是那没有问题呢
在浏览器中直接访问test2.jsp,使用的是request方式,所以过滤器没有执行
访问test1.jsp执行了,原因是因为在test1.jsp中使用include的方式调用了test2.jsp,所以看起来是访问test1.jsp时执行了过滤器,实际上是在test1.jsp中使用include方式调用test2.jsp时执行的过滤器

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星