javaweb servlet中映射路径配置问题

一、/* 和*.do的匹配问题

我web.xml中的配置如下

 <servlet>
        <servlet-name>TwoServlet</servlet-name>
        <servlet-class>com.fh.TwoServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>TwoServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>FourServlet</servlet-name>
        <servlet-class>com.fh.FourServlet</servlet-class>
    </servlet>

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

然后做测试时发现,若访问路径为

 http://localhost/test/a.do 

http://localhost/test/xxx/yyy/a.do 

个人理解的*.do就是匹配末尾是.do结尾的路径,而/*则是全部范围任意匹配

按照我的理解,结果应该以上两个路径应该都是访问FourServlet这个类,但是实际结果却全是TwoServlet类,所以希望有经验的朋友能帮忙解答,谢谢

匹配的优先级,最精确匹配>最长路径匹配>扩展名匹配

你上面的servlet已经匹配了所有请求方法,所以就不会根据后缀来判断是不是走下面的servlet

楼主是说的是的,所有的请求都被/* 拦截啦 ,,所以就不会走下面一个servlet

/*拦截所有请求,也有先后顺序,/*在上面自然是第一个进入

我讲一下原理吧、下面是一个简单的servlet、
this is a servlet test--描述信息、可有可无 HelloServlet --servlet的内部名称 包名****.类名***--映射的类
HelloServlet --通过servlet的内部名称把URL与CLASS绑定 /HelloServlet --用户访问serlvet的URL
可能上面看的不太懂、我简单的说下、首先、从*.jsp页面提交、这个时候form里的为:

、然后通过HelloServlet这个访问路径得到servlet的名称、也就是我们定义的HelloServlet、当然action里面的名称可以随便改、但注意配置这个节点时也要保证一致、得到servlet内部名称后、就会根据这个名称找到相应的节点、然后就找到了我们映射的类了、就这么简单了、最终执行映射类的内容、我是这样理解的、谢谢、

TwoServlet可以匹配,没走下面的servlet

检查下加载的顺序,后面的应该是没有执行。

对于xml一直处于蒙蔽状态

我也认为TwoServlet是可以匹配的,没走下面的servle

/* 拦截所有请求,顺序在前所以都走的这个

两个servlet-name一样 然后 calss-name 就是类名,带着包的
url 就是虚拟路径,能找到你的servlet的路径

我讲一下原理吧、下面是一个简单的servlet、
this is a servlet test--描述信息、可有可无 HelloServlet --servlet的内部名称 包名****.类名***--映射的类
HelloServlet --通过servlet的内部名称把URL与CLASS绑定 /HelloServlet --用户访问serlvet的URL
可能上面看的不太懂、我简单的说下、首先、从*.jsp页面提交、这个时候form里的为:

、然后通过HelloServlet这个访问路径得到servlet的名称、也就是我们定义的HelloServlet、当然action里面的名称可以随便改、但注意配置这个节点时也要保证一致、得到servlet内部名称后、就会根据这个名称找到相应的节点、然后就找到了我们映射的类了、就这么简单了、最终执行映射类的内容、我是这样理解的、谢谢、

将两个servlet-mapping对调下看看,有可能跟顺序有关