include方式的原理

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 {
		
		
	}

}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好!

  1. 同学是直接在地址栏中访问test2.jsp,过滤器没有调用吗?如果是那没有问题呢

  2. 在浏览器中直接访问test2.jsp,使用的是request方式,所以过滤器没有执行

  3. 访问test1.jsp执行了,原因是因为在test1.jsp中使用include的方式调用了test2.jsp,所以看起来是访问test1.jsp时执行了过滤器,实际上是在test1.jsp中使用include方式调用test2.jsp时执行的过滤器

    http://img1.sycdn.imooc.com//climg/5d26ae6e0001f3e403770068.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师