zoukankan      html  css  js  c++  java
  • Servlet容器如何处理请求资源路径

     

    1.. 什么是请求资源路径

    在地址栏中输入的请求地址中,端口号之后的部分都是请求资源路径。紧跟端口号的是部署到Web服务器上的应用名(appName),紧跟应用名的则是具体的应用内的组件路径。

    2. Web服务器对请求地址的处理过程

    浏览器依据地址中的IP和端口号与Web服务器建立连接,服务器会获取到请求资源路径信息。根据端口号后面的应用名找到服务器上对应的应用。默认情况下容器会认为应用名后面的是一个Servlet,所以回到web.xml文件中所有是否有与该值匹配的<url-pattern>,找到匹配的值之后再按照<servlet-name>完成对应关系的查找,进而找到要执行的Servlet。如果没有找到匹配的资源服务器就会返回404错误。

    3. 匹配Servlet的规则

    容器在进行url-pattern比对的时候是遵循一定的匹配原则的。这些原则主要有:

    精确匹配

    即具体资源名称与web.xml文件中的url-pattern严格匹配相等才执行。如,配置的内容如下:

     
    1. <servlet>
    2.     <servlet-name>someServlet</servlet-name>
    3.     <servlet-class>test.MyServlet</servlet-class>
    4. </servlet>
    5. <servlet-mapping>
    6.     <servlet-name>someServlet</servlet-name>
    7.     <url-pattern>/abc.html</url-pattern>
    8. </servlet-mapping>

    则在地址栏中输入 http://ip:port/appName/abc.html 时,服务器就会去执行test.MyServlet这个组件,就算是在应用的根目录下的确有abc.html这个文件,也不会执行。

    通配符匹配

    使用“*”这个符号来匹配0个或多个字符,已达到路径的批量匹配的效果。

    如配置文件中的节点为如下代码所示:

    1. <servlet>
    2.     <servlet-name>someServlet</servlet-name>
    3.     <servlet-class>test.MyServlet</servlet-class>
    4. </servlet>
    5. <servlet-mapping>
    6.     <servlet-name>someServlet</servlet-name>
    7.     <url-pattern>/*</url-pattern>
    8. </servlet-mapping>

    则,在地址栏中输入以下任何地址时都是匹配成功的。

     
    1. http://ip:port/appName/abc.html
    2. http://ip:port/appName/abc/def/ghi.html

    后缀匹配

    在配置url-pattern节点时,不使用斜杠开头,用“*.”开头来匹配任意多个字符的模式叫做后缀匹配。

    如配置文件中的节点为如下代码所示:

    1. <servlet>
    2.     <servlet-name>someServlet</servlet-name>
    3.     <servlet-class>test.MyServlet</servlet-class>
    4. </servlet>
    5. <servlet-mapping>
    6.     <servlet-name>someServlet</servlet-name>
    7.     <url-pattern>*.do</url-pattern>
    8. </servlet-mapping>

    则,在地址栏中输入以下任何地址时都是匹配成功的。

    1. http://ip:port/appName/abc.do
    2. http://ip:port/appName/abc/def/ghi.do

    在这三种匹配方式中,优先级最高的是精确匹配。如果容器在使用以上原则都不能找到相匹配的资源来执行时,就按照地址到应用中查找对应的文件。此时如果找到文件则返回,找不到资源来执行就返回404错误。

  • 相关阅读:
    解决:TypeError: object() takes no parameters
    刷题(三)
    刷题(二)
    web自动化流程总结
    不能在Python Console中运行pytest
    关于pytest的一些问题
    UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView
    android系统下消息推送机制
    Android中的动画,选择器,样式和主题的使用
    内存监测工具 DDMS --> Heap
  • 原文地址:https://www.cnblogs.com/wwqqnn123456/p/7376410.html
Copyright © 2011-2022 走看看