关于这节课的一点疑问

关于这节课的一点疑问

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
this is test index html
</body>
</html>


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
this is index.jsp
</body>
</html>
package filter;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SampleServlet2
 */
@WebServlet("/")
public class SampleServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SampleServlet2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
      response.getWriter().println("I am" + this.getClass().getSimpleName());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UrlPatternFilter implements Filter{

  @Override
  public void destroy() {
    // TODO Auto-generated method stub
    
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    // TODO Auto-generated method stub
    HttpServletRequest req = (HttpServletRequest)request;
    HttpServletResponse res = (HttpServletResponse)response;
    System.out.println("拦截到" + req.getRequestURI());
    chain.doFilter(request, response);
    
  }

  @Override
  public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub
    
  }

}
<?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>url-pattern</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>url-pattern</filter-name>
    <filter-class>filter.UrlPatternFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>url-pattern</filter-name>
    <url-pattern>/</url-pattern>
  </filter-mapping>
  
</web-app>

老师这里是我的代码,我又新建了一个index.html文件,那么理论上默认主页会变成index html才对,但我这么做了以后,默认首页直接变成了 sample servlet 2, 并且就算把index.html输入地址栏(http://localhost/url-pattern/index.html),也是会显示sample servlet 2 的页面, index.jsp 如果输入地址栏的话还是可以正常跳转,并且过滤器没有拦截到任何东西,问下这个是什么原因呢? 

正在回答

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

2回答

同学你好,设置url-pattern为/,将html也进行拦截,所以访问index.html,会跳转到sample servlet2。

祝:学习愉快~

好帮手慕珊 2020-07-18 15:47:01

同学,你好!过滤器的url-pattern和Servlet路径都设置为/,是一种比较特殊的情况,index.jsp是可以生效,但是系统对于index.html并没有特殊处理,还是会去执行Servlet。同学可以把这个当作一种特殊的情况去记忆。

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

  • 提问者 慕前端8369922 #1
    但是这样子的话为什么我输入http://localhost/url-pattern/index.html 还是会跳转到sample servlet2 的页面呢?
    2020-07-19 01:57:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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