映射请求到Servlet
Web容器需要本章描述的映射技术去映射客户端请求到Servlet(该规范2.5以前的版本,使用这些映射技术是作为一个建议而不是要求,允许servlet容器各有其不同的schema用于映射客户端请求到servlet)。
12.1 使用URL路径
在收到客户端请求时,web容器确定转发到哪一个Web应用。选择的Web应用必须具有最长的上下文路径匹配请求URL的开始。当映射到Servlet时,URL匹配的一部分是上下文。
Web容器接下来必须用下面描述的路径匹配步骤找出servlet来处理请求。
用于映射到Servlet的路径是请求对象的请求URL减去上下文和路径参数部分。下面的URL路径映射规则按顺序使用。使用第一个匹配成功的且不会进一步尝试匹配:
1. 容器将尝试找到一个请求路径到servlet路径的精确匹配。成功匹配则选择该servlet。
2. 容器将递归地尝试匹配最长路径前缀。这是通过一次一个目录的遍历路径树完成的,使用‘/’字符作为路径分隔符。最长匹配确定选择的servlet。
3. 如果URL最后一部分包含一个扩展名(如 .jsp),servlet容器将视图匹配为扩展名处理请求的Servlet。扩展名定义在最后一部分的最后一个‘.’字符之后。
4. 如果前三个规则都没有产生一个servlet匹配,容器将试图为请求资源提供相关的内容。如果应用中定义了一个“default”servlet,它将被使用。许多容器提供了一种隐式的default servlet用于提供内容。
容器必须使用区分大小写字符串比较匹配。
12.2 映射规范
在web应用部署描述符中,以下语法用于定义映射:
■ 以‘/’字符开始、以‘/*’后缀结尾的字符串用于路径匹配。
■ 以‘*.’开始的字符串用于扩展名映射。
■ 空字符串“”是一个特殊的URL模式,其精确映射到应用的上下文根,即,http://host:port/<context-root>/请求形式。在这种情况下,路径信息是‘/’且servlet路径和上下文路径是空字符串(“”)。
■ 只包含“/”字符的字符串表示应用的“default”servlet。在这种情况下,servlet路径是请求URL减去上下文路径且路径信息是null。
■ 所以其他字符串仅用于精确匹配。
12.2.1 隐式映射
如果容器有一个内部的JSP容器,*.jsp扩展名映射到它,允许执行JSP页面的要求。该映射被称为隐式映射。如果Web应用定义了一个*.jsp映射,它的优先级高于隐式映射。
Servlet容器允许进行其他的隐式映射,只要显示映射的优先。例如,一个*.shtml隐式映射可以映射到包含在服务器上的功能。
12.2.2 示例映射集合
请看下面的一组映射:
表 12-1
示例映射集合
Path Pattern
|
Servlet
|
/foo/bar/*
|
servlet1
|
/baz/*
|
servlet2
|
/catalog
|
servlet3
|
*.bop
|
servlet4
|
将产生以下行为:
表 12-2 传入路径应用于示例映射
Incoming Path
|
Servlet Handling Request
|
/foo/bar/index.html
|
servlet1
|
/foo/bar/index.bop
|
servlet1
|
/baz
|
servlet2
|
/baz/index.html
|
servlet2
|
/catalog
|
servlet3
|
/catalog/index.html
|
“default” servlet
|
/catalog/racecar.bop
|
servlet4
|
/index.bop
|
servlet4
|
请注意,在/catalog/index.html和/catalog/racecar.bop的情况下,不使用映射到“/catalog”的servlet,因为不是精确匹配的。
分享到:
相关推荐
2. **异步Servlet处理**:Servlet3.1引入了异步处理能力,允许Servlet在接收到请求后,将其挂起并返回,然后在后台执行耗时的操作,如数据库查询或远程调用,最后再将结果发送回客户端。这提高了并发性能,减轻了...
还有,Servlet3.1规范改进了URL路径映射,允许更加灵活的路径匹配。例如,可以使用`@WebServlet("/myPath/*")`来匹配所有以"/myPath/"开头的URL,这简化了路由规则的设定。 总之,Servlet3.1规范带来了许多创新和...
Servlet 3.1 规范是Java服务器端编程的重要组成部分,是Java EE 7标准的一部分。...通过阅读提供的"Servlet 3.1规范说明中文版"和"Servlet3.1规范(最终版)"文档,可以更全面地了解这些概念并应用于实际开发中。
Servlet3.1引入了更强大的异步处理模型,允许Servlet在接收到请求后,不立即返回响应,而是启动一个后台线程进行处理。这极大地改善了服务器性能,特别是在处理长时间运行的任务时,避免了阻塞主线程,提升了并发...
Java Servlet 3.1 规范是Java Web开发中的一个重要里程碑,它定义了Servlet容器(如Tomcat、Jetty)与Web应用程序之间的交互标准。这个规范不仅提供了对HTTP协议的处理,还包括了对WebSocket、异步处理、依赖注入等...
Servlet3.1规范是Java Web开发中的重要标准,它定义了服务器端Java应用程序接口,用于处理HTTP请求并生成响应。这个规范的最终版为开发者提供了更高效、更灵活的编程模型,增强了对异步处理的支持,并引入了许多新的...
Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 ...
Servlet3.1规范是Java Web开发中的一个重要里程碑,它在Servlet3.0的基础上进行了一系列的增强和优化,为开发者提供了更多的灵活性和效率提升。这个规范的最终版于2013年07月发布,旨在改善服务器端应用程序的性能...
在构建Web应用程序时,"spring mvc3.2.7 + servlet3.1(jetty) + maven3 + eclipse"的组合提供了一种高效且灵活的开发环境。这个配置涉及了多个关键组件,它们共同作用于项目的搭建、管理和运行。 **Spring MVC ...
本项目"基于servlet3.1,实现模块化扩展"旨在利用这些特性来构建一个可扩展、模块化的Web应用程序。 Servlet 3.1引入了以下几个关键知识点: 1. **异步处理**:Servlet 3.1引入了异步Servlet的概念,允许在服务...
随着技术的发展,Servlet规范也不断进化,Servlet 3.1作为其重要的版本,引入了许多增强功能和优化,极大地提高了开发效率和应用性能。本篇将围绕"Servlet 3.1"这一主题,详细阐述其主要特性,并结合提供的"Servlet ...
Servlet 3.1引入了更强大的异步处理能力,允许Servlet在接收到请求后不立即返回响应,而是启动一个异步操作并在完成后通知调用者。这样可以避免阻塞线程,提高服务器性能。通过`HttpServletRequest.startAsync()`...
同时,Servlet 3.1 规范支持异步处理请求,允许 Servlet 异步处理请求,无需一直占用线程直到响应返回,提高了服务器的并发处理能力。 最后,作为规范的一部分,也提供了一些最佳实践和设计模式,以帮助开发者有效...
1. **异步处理**:Servlet 3.1引入了异步Servlet,使得服务器可以在不阻塞线程的情况下处理请求,提高了性能和可扩展性。 2. **WebSocket支持**:Servlet 3.1为WebSocket提供了一种标准的集成方式,使得服务器和...
7. **URL映射**:通过web.xml配置文件或注解,可以将URL路径映射到特定的Servlet,实现请求分发。 8. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在`service()`方法内启动一个异步操作,释放请求...
根据提供的文件内容,我们可以了解到《Java Servlet 3.1规范》中文版详细地介绍了Servlet技术的基础知识、功能、以及与Java EE的关系。下面将对文件中的关键知识点进行详细说明: 1. Servlet简介 Servlet是一种运行...
当服务器启动或首次接收到对Servlet的请求时,Servlet容器(如Tomcat)会加载并初始化Servlet。然后,每当有新的请求到达,Servlet容器都会调用Servlet的service()方法,根据请求类型分派到doGet()或doPost()等具体...
1.6 与 Java Servlet 规范 2.5 版本间的兼容性 ..............................................................................................14 1.6.1 监听器(Listener)顺序 .................................
Servlet 3.0是Java Web开发中的一个关键规范,它极大地扩展了Servlet API的功能,并引入了许多新特性,使得Web应用程序的开发更为灵活和高效。在这个规范中,Java Servlet技术进行了许多改进,旨在提升性能,简化...
Servlet 2.3中文规范是Java Web开发领域中极为重要的文档,它...尽管后续版本的Servlet规范(如Servlet 3.0、3.1、4.0)引入了许多新的特性和改进,但Servlet 2.3的基础知识仍然是理解和学习现代Java Web开发的基石。