客户端通过URL地址访问服务器(servlet容器)资源,所以servlet若要能对外提供服务,必须要将程序按照java规范将其映射到对应的URL上,映射的规则是需要开发人员在WEB.XML中显示指定,指定的方法如下:

<servlet>
<servlet-name>BlogServlet</servlet-name>
<servlet-class>com.p**ghty.userapp.module1.BlogServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>BlogServlet</servlet-name>
<url-pattern>/module1/BlogServlet</url-pattern>
</servlet-mapping>

  

servlet容器对客户端请求的匹配过程

一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url。如客户端输入http://www.p**ghty.com/platform/blog/article/index,servlet容器会将

http://www.p**ghty.com/platform减去,剩下platform/blog/article/index与web.xml中设定的匹配规则进行匹配,而这种匹配是按照一定的规则进行的,并且有一个servlet匹配成功后,就不会取匹配其他servlet(注意

filter与此不同):
(1)匹配精确路径:以“/”开头,以字母(非”*”)结束,如<url-pattern>/blog/article/add</url-pattern>。
如web.xml中配置如下:

<servlet-mapping>
<servlet-name>BlogServlet</servlet-name>
<url-pattern>/blog/article/index.jsp</url-pattern>
<url-pattern>/blog/article/add</url-pattern>
</servlet-mapping>

  

则以下路径都会被匹配到该servlet
  http://www.p**ghty.com/platform/blog/article/index.jsp
  http://www.p**ghty.com/platform/blog/article/add

(2)匹配扩展名:以* 开头,以扩展名结束,如<url-pattern>*.do</url-pattern>。
如web.xml中配置如下:

<servlet-mapping>
<servlet-name>BlogServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

则任何扩展名为jsp或do的url请求都会匹配,比如下面的url都会被匹配
  http://www.p**ghty.com/platform/blog/article/index.jsp
  http://www.p**ghty.com/platform/index.do

(3)匹配最长路径:以“/”开头,并以 /* 结尾,如<url-pattern>/blog/*</url-pattern>
如web.xml中配置如下:

<servlet-mapping>
<servlet-name>BlogServlet</servlet-name>
<url-pattern>/blog/article/*</url-pattern>
</servlet-mapping>

则以下路径都会被匹配到该servlet
  http://www.p**ghty.com/platform/blog/article/index.jsp
  http://www.p**ghty.com/platform/blog/article/add

(4)匹配默认:“/” 用来表示对应的servlet 为默认的servelet

几个注意点:

(1)http://www.p**ghty.com/platform/blog/article/是非法url

(2)匹配的url后面可以跟任意的查询条件,如:http://www.p**ghty.com/platform/blog/article/add?username=davee

(3)以上四种匹配规则中,(1)(2)(3)不可同时使用,如<url-pattern>/blog/*.do</url-pattern>是非法的,但是<url-pattern>/blog/*/add</url-pattern>是合法的。

(4)“/*”和“/”含义是不一样的,“/*”属于路径匹配,并且可以匹配所有请求,由于路径匹配的优先级仅次于精确匹配,所以“/*”会覆盖所有的扩展名匹配,故不推荐使用。“/”是servlet中特殊的匹配模式,优先

级最低(第(4)级),不会覆盖其他任何匹配模式,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有请求。

(5)tomcat在%CATALINA_HOME%\conf\web.xml文件中配置了默认的Servlet,对“/”和“.jsp|.jspx|jsp”这两种匹配规则进行了默认设定,
故开发人员配置“/”后,一种可能的现象是BlogServlet会拦截http://www.p**ghty.com/platform/blog/article/add.do等格式的请求,但是并不会拦截http://www.p**ghty.com/platform/blog/article/index.jsp,这是应

为servlet容器有内置默认的“*.jsp”匹配器,而扩展名匹配的优先级高于缺省匹配,所以jsp不被拦截,而servlet会被拦截。

(6)“/*”和“/”均会拦截静态资源请求

servlet的匹配规则,兼谈/与/*的更多相关文章

  1. Servlet拦截匹配规则可以自已定义,拦截哪种URL合适?

    Servlet拦截匹配规则可以自已定义,拦截哪种URL合适? 当映射为@RequestMapping("/user/add")时,为例: 1.拦截*.do.*.htm, 例如:/u ...

  2. servlet的url-pattern匹配规则详细描述

    一.概述 在利用servlet或Filter进行url请求的匹配时,很关键的一点就是匹配规则,但servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是由自己的规则,比较容易混淆.本文来 ...

  3. 转:servlet的url-pattern匹配规则详细描述

    原文地址:servlet的url-pattern匹配规则详细描述   原文写的很详细 另外可以参考一下:Web.xml中设置Servlet和Filter时的url-pattern匹配规则 一.概述 在 ...

  4. servlet配置url-pattern的匹配规则

    <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.qf.servlet.H ...

  5. web.xml的<url-parttern>的匹配规则

    <url-parttern>顾名思义是对url(统一资源定位符)的一种匹配,是对“http:........."地址的匹配,但是会减去应用上下文,就是你的web程序的名字,如果你 ...

  6. java-servlet的url-pattern匹配规则详细描述

    http://www.cnblogs.com/51kata/p/5152400.html http://www.cnblogs.com/canger/p/6084846.html 一.概述 在利用se ...

  7. web.xml中url-pattern匹配规则

    小知识 一般的URL组成 URL = 服务器地址 + RequestURI 例如URI:http://localhost:8080/practice/main [http://localhost:80 ...

  8. Web.xml中设置Servlet和Filter时的url-pattern匹配规则

    一.servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  9. servlet的url-pattern匹配规则

    首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...

随机推荐

  1. Sublime text 3安装Emmet

    这是Sublime text 3不是2的版本,两者的安装还是有区别的,下面的方法是我感觉比较简单的,其他的要命令什么的感觉太复杂了,经测试是OK的. 先关闭Sublime text 3: 第一步:下载 ...

  2. WPF 实现 DataGrid/ListView 分页控件

    在WPF中,通常会选用DataGrid/ListView进行数据展示,如果数据量不多,可以直接一个页面显示出来.如果数据量很大,2000条数据,一次性显示在一个页面中,不仅消耗资源,而且用户体验也很糟 ...

  3. C# 读取大型Xml文件

    这篇博客将介绍在C#中如何读取数据量很大的Xml文件.请看下面的Xml文件, <?xml version="1.0" encoding="utf-8"?& ...

  4. vi使用

    vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi + ...

  5. Asp.net+JS 分页

    function pagestart() {//初始化页面,获取公司新闻 $("#pagediv").hide(); $("); var pagesize = $(&qu ...

  6. jenkins和hudson---打酱油的日子

    自动化构建:Jenkins起源于Hudson.Hudson在商业软件的路上继续前行,而Jenkins则作为开源软件,从hudson分支出来. 因此现在的jenkins和hudson非常类似,但是随着二 ...

  7. Java_动态重新加载Class机制

    Java动态重新加载Class 项目中使用到了动态重新加载Class的机制,作用是让一些代码上线之前可以在线上环境测试一下,当然,这是非常不好的测试机制,我刚来的时候也为这种机制感到惊讶—怎么可以在线 ...

  8. 修复VS,恢复初始状态

    命令提示 输入命令: devenv.exe /resetuserdata 处理版本221优化改动:1.SQL优化,采用预编译方式并将SQL语句修改为大写,尽量减少Oracle数据库硬解析2.复用部分代 ...

  9. sql例子

    select * from plat_material_resource where stl_url LIKE '/data1/upload%' --截取字符串 UPDATE plat_materia ...

  10. 20145205《Java程序设计》课程总结

    每周读书笔记链接汇总 20145205 <Java程序设计>第1周学习总结 20145205<Java程序设计>第2周学习总结 20145205 <Java程序设计> ...