JavaWeb静态资源访问流程

1. url-patten 缺省值

想要了解JavaWeb静态资源访问流程,首先要先了解“url-patten 缺省值”的使用

当浏览器发送一个http请求时,tomcat通过请求中URL的路径,从应用中web.xml中查找“url-patten”对应的Servlet,实现对应Servlet的响应。

而有一种特殊的url-patten,即

<url-pattern>/</url-pattern>

当在web.xml中找不到对应的url-patten时,如果存在上面这样的url-patten 缺省值,则会找到其对应的servlet名字,从而找到对应的Servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>test20201005</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>
  
  <servlet>
  	<servlet-name>mytest1</servlet-name>
  	<servlet-class>com.test.servlet.myservelet1</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>mytest1</servlet-name>
  	<url-pattern>/myservelet1</url-pattern>
  </servlet-mapping>

  <servlet>
  	<servlet-name>mytest2</servlet-name>
  	<servlet-class>com.test.servlet.myservelet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>mytest2</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

如web.xml的内容如上,当tomcat找不到该应用中对应的url-pattern时,则会根据url-pattern的缺省值设置,找到com.test.servlet.myservelet2这个servlet(类)。

2. 静态资源访问流程

了解完上面的url-pattern后。当访问一个静态资源(如http://localhost:8080/test20201003/index.html)时,也会当应用中的web.xml中查找对应的servlet(示例链接对应的url-pattern为/index.html),如果找不到,则会查找url-pattern的缺省值,如果该应用中web.xml没有配置url-pattern的缺省值,则会到全局的web.xml(conf/web.xml)查找有没有该servlet,如果在全局的web.xml中查找不到该servlet,则会在全局的web.xml中查找url-pattern的缺省值,而全局的web.xml中配置了url-pattern的缺省值如下:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

对应的servlet为

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

org.apache.catalina.servlets.DefaultServlet这个类会逐行读取静态资源文件(如示例链接中的index.html)并响应给浏览器,浏览器进行显示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值