咕噜是个大胖子
2018-07-16 08:47
采纳率: 53.8%
浏览 2.0k
已采纳

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类,所以希望有经验的朋友能帮忙解答,谢谢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

13条回答 默认 最新

  • qq_36520173 2018-07-16 09:08
    已采纳

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

    已采纳该答案
    打赏 评论
  • qq_34976339 2018-07-16 08:58

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

    打赏 评论
  • weixin_40401966 2018-07-16 09:06

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

    打赏 评论
  • qq_22607365 2018-07-16 09:10

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

    打赏 评论
  • weixin_39020220 2018-07-16 09:23

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

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

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

    打赏 评论
  • bbm011 2018-07-16 09:35

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

    打赏 评论
  • yx1027 2018-07-16 10:02

    对于xml一直处于蒙蔽状态

    打赏 评论
  • 渣科 2018-07-16 10:05

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

    打赏 评论
  • blue_thorn 2018-07-16 12:29

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

    打赏 评论
  • qq_37186368 2018-07-16 14:51

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

    打赏 评论
  • 哥是大浣熊 2018-07-17 01:11

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

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

    打赏 评论
  • _zming 2018-07-18 10:13

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

    打赏 评论

相关推荐 更多相似问题