少年乘勇气,百战过乌孙。这篇文章主要讲述J2ee入门:servlet-mapping的映射配置相关的知识,希望能为你提供帮助。
<
servlet-mapping>
元素在Servlet和URL样式之间定义一个映射。它包含了两个子元素<
servlet- name>
和<
url-pattern>
<
servlet-name>
元素给出的Servlet名字必须是 在<
servlet>
元素中声明过的Servlet的名字
<
url-pattern>
元素指定对应于Servlet的URL路 径,该路径是相对于Web应用程序上下文根的路径。
【J2ee入门(servlet-mapping的映射配置)】Servlet 2.5规范允许<
servlet-mapping>
的<
url-pattern>
子元素出现多次,之前的规范只允许一 个<
servlet-mapping>
元素包含一个<
url-pattern>
子元素。
例如:
<
servlet-mapping>
<
servlet-name>
helloworld<
/servlet-name>
<
url-pattern>
/hello<
/url-pattern>
<
url-pattern>
/hello<
/url-pattern>
<
/servlet-mapping>
我们看下面的例子:
在配置了Servlet与URL样式之间的映射后,当Servlet容器接收到一个请求,它首先确定该请求应该由哪一个Web应用程序来响应。
这是通过比较请求URI的开始部分与Web应用程序的上下文路径来确定的。
映射到Servlet的路径是请求URI减去上下文的路径,Web应用程序的 Context对象在去掉请求URI的上下文路径后,将按照下面的路径映射规则的顺序对剩余部分的路径进行处理,并且在找到第一个成功的匹配后,不再进行 下一个匹配。
1、容器试着对请求的路径和Servlet映射的路径进行精确匹配,如果匹配成功,则调用这个Servlet来处理请求。
2、容器试着匹配最长的路径前缀,以斜杠(/)为路径分隔符,按照路径树逐级递减匹配,选择最长匹配的Servlet来处理请求。
3、如果请求的URL路径最后有扩展名,如.jsp,Servlet容器会试着匹配处理这个扩展名的Servlet。
如果按照前面3条规则没有找到匹配的Servlet,容器会调用Web应用程序默认的Servlet来对请求进行处理,如果没有定义默认的Servlet,容器将向客户端发送HTTP 404错误信息(请求资源不存在)。
在部署描述符中,可以使用下面的语法来定义映射。
以/开始并且以 /* 结束的字符串用来映射路径,例如:
<
url-pattern>
/admin/*<
/url-pattern>
以 *. 为前缀的字符串用来映射扩展名,例如:如果没有精确匹配,那么对/admin/路径下的资源的所有请求将由映射了上述URL样式的Servlet来处理。
<
url-pattern>
*.do<
/url-pattern>
以一个单独的/指示这个Web应用程序默认的Servlet,例如:如果没有精确匹配和路径匹配,那么对具有.do扩展名的资源的请求将由映射了上述URL样式的Servlet来处理。
<
url-pattern>
/<
/url-pattern>
所有其他的字符被用于精确匹配,例如:如果对某个请求没有找到匹配的Servlet,那么将使用Web应用程序的默认Servlet来处理。
<
url-pattern>
/login<
/url-pattern>
下面我们看几个请求映射的例子,如表3-2和表3-3所示。如果请求/login,那么将由映射了URL样式/login的Servlet来处理。
表3-2 Servlet映射
映射的 URL | 对应的Servlet |
/hello | servlet1 |
/bbs/admin/* | servlet2 |
/bbs/* | servlet3 |
*.jsp | servlet4 |
/ | servlet5 |
去掉上下文路径的剩余路径 | 处理请求的Servlet |
/hello | servlet1 |
/bbs/admin/login | servlet2 |
/bbs/admin/index.jsp | servlet2 |
/bbs/display | servlet3 |
/bbs/index.jsp | servlet3 |
/bbs | servlet3 |
/index.jsp | servler4 |
/hello/index.jsp | servlet4 |
/hello/index.html | servlet5 |
/news | servlet5 |
< servlet>
< servlet-name> default< /servlet-name>
< servlet-class> org.apache.catalina.servlets.DefaultServlet< /servlet-class>
< init-param>
< param-name> debug< /param-name>
< param-value> 0< /param-value>
< /init-param>
< init-param>
< param-name> listings< /param-name>
< param-value> true< /param-value>
< /init-param>
< load-on-startup> 1< /load-on-startup>
< /servlet>
< servlet-mapping>
< servlet-name> default< /servlet-name>
< url-pattern> /< /url-pattern>
< /servlet-mapping>
%CATALINA_HOME%\conf\web.xml文件中的配置将被运行在同一个Tomcat实例中的所有Web应用程序所共享。
推荐阅读
- 啥是 ATM 技术,它有啥用途?
- Android-黑科技-微信抢红包必备软件
- 安卓ContentProvider
- Android虚拟实体键盘不能同时使用()
- Android error--No implementation found for native Lcomd
- 使用LoadRunner完成移动APP的脚本开发
- Android慎用layout嵌套, 尽量控制在5层下面java.lang.StackOverflowError
- Libgdx: android单机斗地主支持局域网wifi联网的网络模块核心代码
- OSS.Core基于Dapper封装(表达式解析+Emit)仓储层的构思及实现