Context Path + servlet path + path info = request uri
2004-11-19 18:38
387 查看
|-- Context Path --|-- Servlet Path -|--Path Info--| http://www.myserver.com /mywebapp /helloServlet /hello |-------- Request URI ----------------------------|
Remember the following three points:
1. Request URI = context path + servlet path + path info.
2. Context paths and servlet paths start with a / but do not end with it.
3. HttpServletRequest provides three methods getContextPath(),
getServletPath() and getPathInfo() to retrieve the context path,
the servlet path, and the path info, respectively, associated with a request.
Identifying the servlet path
To match a request URI with a servlet, the servlet container follows a simple algorithm.
Once it identifies the context path, if any, it evaluates the remaining part of the
request URI with the servlet mappings specified in the deployment descriptor, in the
following order. If it finds a match at any step, it does not take the next step.
1 The container tries to match the request URI to a servlet mapping. If it finds a
match, the complete request URI (except the context path) is the servlet path. In
this case, the path info is null.
2 It tries to recursively match the longest path by stepping down the request URI
path tree a directory at a time, using the / character as a path separator, and determining
if there is a match with a servlet. If there is a match, the matching part
of the request URI is the servlet path and the remaining part is the path info.
3 If the last node of the request URI contains an extension (.jsp, for example),
the servlet container tries to match it to a servlet that handles requests for the
specified extension. In this case, the complete request URI is the servlet path
and the path info is null.
4 If the container is still unable to find a match, it will forward the request to the
default servlet. If there is no default servlet, it will send an error message indicating
the servlet was not found.
<servlet-mapping>
<servlet-name>RedServlet</servlet-name>
<url-pattern>/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedServlet</servlet-name>
<url-pattern>/red/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedBlueServlet</servlet-name>
<url-pattern>/red/blue/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>BlueServlet</servlet-name>
<url-pattern>/blue/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GreenServlet</servlet-name>
<url-pattern>/green</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ColorServlet</servlet-name>
<url-pattern>*.col</url-pattern>
</servlet-mapping>
Request URI Servlet Used Servlet Path Path Info
/colorapp/red RedServlet /red null
/colorapp/red/ RedServlet /red /
/colorapp/red/aaa RedServlet /red /aaa
/colorapp/red/blue/aa RedBlueServlet /red/blue /aa
/colorapp/red/red/aaa RedServlet /red/red /aaa
/colorapp/aa.col ColorServlet /aa.col null
/colorapp/hello/aa.col ColorServlet /hello/aa.col null
/colorapp/red/aa.col RedServlet /red /aa.col
/colorapp/blue NONE(Error message)
/colorapp/hello/blue/ NONE(Error message)
/colorapp/blue/mydir NONE(Error message)
/colorapp/blue/dir/aa.col ColorServlet /blue/dir/aa.col null
/colorapp/green GreenServlet /green null
解释一下:
这里的三个错误,都是错在blue上,注意blue的mapping url是/blue/而不是/blue或者/blue/*这是造成错误的主要原因
相关文章推荐
- require,include,load,extend的用途和区别
- 使用Form和QueryString集合
- 配置WebLogic 8.1到jbuilderX!
- 修改图标
- J2ee学习流程[转]
- Building a Drum Machine with DirectSound.
- 00022.Problem when building openh323 on Fedora3.
- [原创]手把手配置Hibernate环境(JBuilderX版)
- 使用Quest Toad的一些心得
- 用好活动字幕标记—marquee
- ant学习指南
- 开发环境的配置
- 面试时最经常被问到的问题(Frenquently asked interview questions)(II)
- 面试时最经常被问到的问题(Frenquently asked interview questions)(I)
- MFC对话框程序中添加工具栏及工具栏上的Button响应UPDATE_COMMAND_UI消息
- 一些常见的GUI对应的程序名称整理
- 从客户端检测到有潜在危险的Request.Form 值
- 我被Build撞了一下腰
- JBuilderX和JBuilder 2005的字体光标问题
- ANT安装、配置