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

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内部名称后、就会根据这个名称找到相应的节点、然后就找到了我们映射的类了、就这么简单了、最终执行映射类的内容、我是这样理解的、谢谢、
    评论
  • 「已注销」 2018-07-16 09:24
    关注

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

    评论
  • bbm011 2018-07-16 09:35
    关注

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

    评论
  • 123566y 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对调下看看,有可能跟顺序有关

    评论
查看更多回答(12条)

报告相同问题?

悬赏问题

  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥15 Stata数据分析请教
  • ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料