转自一位国外哥们儿写的分析,写的很不错:
Let's consider this servlet mapping in web.xml that defines "App" as the default servlet:
<servlet-mapping>
<servlet-name>App</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Now call http://server/context/path/to/test.html. Here are the request properties:
getPathInfo() : null
getServletPath() : "/path/to/test.html"
Why is path info null, and why does the servlet path have what we could have expected to see in path info?
Let's change web.xml like this, so that "App" eats the same URLs but is no more the default servlet:
<servlet-mapping>
<servlet-name>App</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
And call again the same http://server/context/path/to/test.html:
getPathInfo() : "/path/to/test.html"
getServletPath() : "" (empty string)
WTF? Is it a bug in the servlet engine? Let's check the servlet specification...
In the "Mapping request to servlets" chapter, the specification of mappings is described:
A string beginning with a ‘/’ character and ending with a ‘/*’ postfix is used for path mapping.
A string beginning with a‘*.’ prefix is used as an extension mapping.
A string containing only the ’/’ character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.
All other strings are used for exact matches only.
When writing the "/" mapping, we use rule 3, whereas when using the "/*" mapping, we use rule 1.
So that means that a servlet that needs to map a resource according to the request URL must behave differently depending on whether it is defined as the default servlet or mounted to a particular location. What's the reason for this?
分享到:
相关推荐
- **加载Servlet**:容器读取`web.xml`文件中的配置,加载指定的Servlet类。 - **初始化Servlet**:容器调用`init()`方法对Servlet进行初始化。 - **处理请求**:容器调用`service()`方法处理客户端请求。 - **...
- **Servlet与Applet的区别**:虽然两者都是Java程序,但Servlet运行在服务器端而非客户端浏览器中,主要用于处理来自客户端的请求并生成响应。 - **Servlet与CGI/NSAPI比较**:相比于传统的CGI脚本或NSAPI,Servlet...
根据提供的文件信息,以下是对达内servlet/jsp/jquery培训资料中的关键知识点的详细解析: ### 1. 架构 - **C/S 架构(Client-Server 架构)**: - 客户端和服务端通过TCP/IP协议进行通信。 - 特点包括:需要...
7. **Servlet的过滤器**:Filter是Servlet API中的另一个重要概念,它可以拦截请求和响应,在请求到达Servlet之前或响应离开Servlet之后进行处理。例如,可以使用Filter实现登录验证或字符编码转换。 8. **Servlet...
### jsp与servlet的联系和区别 在深入探讨JSP与Servlet的联系与区别的过程中,我们首先需要理解这两个概念的基本定义以及它们在Web开发中的角色。 #### JSP(JavaServer Pages) JSP是一种基于Java技术的动态网页...
- **GET 和 POST 方法的区别** - **GET**: 通常用于获取数据,数据附在 URL 后面,对数据长度有限制。 - **POST**: 用于发送数据,数据放在请求体中,没有长度限制。 **3.3 Servlet简介和优点** - **Servlet 的...
Servlet和JSP是Java Web开发中的重要组成部分,用于构建动态网页应用。Servlet是Java编写的服务端程序,负责处理客户端请求并生成响应。JSP(JavaServer Pages)则是一种视图技术,它允许开发者将HTML代码与Java代码...
虽然 Servlet 和 JSP 都可以用来处理客户端请求,但它们之间存在一定的区别。Servlet 更侧重于业务逻辑的处理,而 JSP 主要用于生成动态 HTML 页面。通常情况下,Servlet 和 JSP 结合使用可以实现更高效、灵活的 Web...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个关键组件,它们共同构建了动态Web应用程序的基础。** **JSP技术:** JSP是一种服务器端的技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...
本文详细介绍了JSP和Servlet中关于请求与响应的关键知识点,包括JSP内置对象的作用、请求与响应对象的使用方法、中文乱码问题及其解决办法、转发与重定向的区别以及Servlet的基本创建和配置流程。希望这些内容能够...
1. **Servlet与CGI的区别**:Servlet作为一种轻量级服务器端组件技术,相比于传统的CGI(Common Gateway Interface),具有更好的性能优势和易用性。在处理每一个请求时,CGI都需要创建一个新的进程来执行,而...
- **/work**:Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录下。这些文件是动态生成的,用于支持JSP页面的运行。 #### JAR文件存放区别 从上面的目录结构中可以看出,`/common/lib`、`/server/lib`和`/...
- 实践如何在Servlet中转发和重定向请求,以及如何在`session`和`cookie`中存储用户信息。 - 学习如何配置和使用Servlet容器,如Tomcat,部署Web应用。 通过这个项目,开发者可以巩固Servlet的基础知识,逐步掌握...
### Servlet的基本知识详解 #### 一、Servlet简介与特点 **Servlet**是一种用Java语言编写的...通过理解Servlet的基本概念、工作原理及其与其他技术的区别,开发者可以更好地利用这项技术来实现复杂的应用需求。
### servlet与jsp的区别 在Web开发领域中,servlet与JSP是两种非常重要的技术,它们都是Java EE标准的一部分,并且被广泛应用于构建动态网页。虽然它们都可以用来处理客户端请求并生成动态页面,但它们之间还是存在...
在当前的IT行业中,Java作为一门历史悠久且应用广泛的编程语言,受到了广大程序员和技术爱好者的青睐。无论是初学者还是有一定经验的开发者,都能从Java的学习过程中获得巨大的收获。本文将针对“Java学习视频以及...
- Java的基本数据类型(整型、浮点型、字符型等)及其区别 - 变量声明与初始化 - 运算符(算术运算符、比较运算符、逻辑运算符等) - **控制语句** - 流程控制:顺序结构、选择结构(if语句、switch语句)、循环...
本项目“Servlet的用户管理系统”是一个基于Servlet技术实现的用户管理应用,专为初学者设计,提供完整的源代码和相关数据表,帮助初学者快速理解并实践Servlet在实际开发中的应用。 首先,我们要了解Servlet的基本...