博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet容器如何处理请求资源路径
阅读量:4677 次
发布时间:2019-06-09

本文共 1676 字,大约阅读时间需要 5 分钟。

 

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错误。

转载于:https://www.cnblogs.com/wwqqnn123456/p/7376410.html

你可能感兴趣的文章
SQL的主键和外键约束
查看>>
Bookmarklet
查看>>
c++primer 第l六章编程练习答案
查看>>
上海秋季HCC小记
查看>>
Illustrator 上色
查看>>
truncate表恢复
查看>>
this关键字的使用
查看>>
Console.Read()、Console.ReadLine()、Console.ReadKey()
查看>>
ecere 编译过程中遇到的问题
查看>>
Cyclone V 与 Avalon-MM资料整理——DE1-SOC学习笔记(1)
查看>>
异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
查看>>
Flask-SQLAlchemy
查看>>
C# - Generics
查看>>
.NET LINQ 转换数据类型
查看>>
[LGP2791] 幼儿园篮球题
查看>>
[linux-内核][转]内核日志及printk结构浅析
查看>>
SWMM[Storm Water Management Model]模型代码编译调试环境设置
查看>>
s11 day Linux 和nginx 部署
查看>>
程序猿的爱情-2012-01-22
查看>>
CentOS7.2 安装iptables
查看>>