JAVAWEB学习(4) — 处理请求资源路径

Servlet 容器如何处理请求资源路径

1. 什么是请求资源路径

在浏览器地址栏输入:http://ip:port/appName/xxx.html

其中 /appName/xxx.html 就是请求资源路径

容器默认认为访问的是一个servlet,所以,会查看web.xml配置,看有没有匹配的servlet

2. Web服务器对请求路径的处理过程

在浏览器地址栏输入:http://ip:port/appName/xxx.html

  1. 浏览器依据ip,port建立与Servlet容器之间的连接,然后将请求资源路径/appName/xxx.html 发送过去给容器
  2. 容器依据应用名“/appName”找到应用所在的文件夹,容器会默认请求的是一个Servlet,查找web.xml文件中所有的Servlet配置“”,看是否有匹配的<url-pattern>
  3. 找到匹配的值之后再按照<servlet-name>完成对应关系的查找,进而找到要执行的Servlet
  4. 如果没有查找匹配的servlet,容器会查找对应位置的文件
  5. 如果没有找到对应位置的文件就会返回404错误

3. 匹配servlet的规则

  • 精准匹配

    具体资源名称与web.xml文件中的url-pattern严格匹配相等才执行

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>someServlet</servlet-name>
        <url-pattern>/abc.html</url-pattern>
    </servlet-mapping>
    
  • 通配符匹配

    使用"*"匹配一个或者多个任意的字符

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>someServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
  • 后缀匹配

    在配置url-pattern节点时,不使用斜杠开头,用“*.”开头来匹配任意多个字符

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>someServlet</servlet-name>
        <!-- 会匹配所有以.do结尾的请求 -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    

优先级最高的是 精确匹配

4. 如何让一个Servlet处理多种请求

  1. 采用后缀匹配

    <servlet>
        <servlet-name>someServlet</servlet-name>
        <servlet-class>test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>SomeServlet</servlet-name>
       <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
  2. 分析请求资源路径,进行相应的处理

猜你喜欢

转载自blog.csdn.net/yisany_Q/article/details/83268087