【IDEA】javaweb下的web.xml文件中出现servlet should have mapping问题/servlet的映射问题

RT

出现这个问题后查阅了很多,最后发现是servlet映射出了问题,感谢https://www.cnblogs.com/lexiaofei/p/7095805.html这篇文章。

IDEA在创建servlet后,如果发生了改变,在web.xml文件中就不能正常的映射,因此这里给自己记一下关于servlet映射的有关解决方法。

————————————————————————————————————————

J2ee入门:servlet-mapping的映射配置

首先给出例子

//servlet1 
 <servlet>
        <servlet-name>save</servlet-name>
        <servlet-class>taor.no72.save</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>save</servlet-name>
        <url-pattern>/save</url-pattern>
    </servlet-mapping>

//servlet2
    <servlet>
        <servlet-name>show</servlet-name>
        <servlet-class>taor.no72.show</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>show</servlet-name>
        <url-pattern>/show</url-pattern>
    </servlet-mapping>

<servlet-mapping>元素在Servlet和URL样式之间定义一个映射。它包含了两个子元素<servlet- name>和<url-pattern>

<servlet-name>元素给出的Servlet名字必须是 在<servlet>元素中声明过的Servlet的名字

<url-pattern>元素指定对应于Servlet的URL路 径,该路径是相对于Web应用程序上下文根的路径。

 

当我们已经配置了Servlet与URL样式之间的映射:

当Servlet容器接收到一个请求,开始确定该请求,应该由哪一个Web应用程序来响应。

这个过程通过比较请求URI的开始部分Web应用程序的上下文路径来确定。

映射到Servlet的路径是请求URI减去上下文的路径,减去后,将按照下面的路径映射规则的顺序,对剩余部分的路径进行处理,并且在找到第一个成功的匹配后,不再进行 下一个匹配。

1、容器试着对请求的路径和Servlet映射的路径进行精确匹配,如果匹配成功,则调用这个Servlet来处理请求。

2、容器试着匹配最长的路径前缀,以斜杠(/)为路径分隔符,按照路径树逐级递减匹配,选择最长匹配的Servlet来处理请求。

3、如果请求的URL路径最后有扩展名,如.jsp,Servlet容器会试着匹配处理这个扩展名的Servlet。

如果按照前面3条规则没有找到匹配的Servlet,容器会调用Web应用程序默认的Servlet来对请求进行处理,如果没有定义默认的Servlet,容器将向客户端发送HTTP 404错误信息(请求资源不存在)。

 

————————————————————————————————

在部署描述符中,可以使用下面的语法来定义映射。

0、首先是精确匹配

如:<url-pattern>/login</url-pattern> 

这是最常见的最标准的语法。

 

1、以/开始并且以 /* 结束字符串用来映射路径【即:路径匹配】

例如:<url-pattern>/admin/*</url-pattern> 

如果没有精确匹配,那么对/admin/路径下的资源的所有请求,将由映射了该URL样式的Servlet来处理。

 

2、以 *. 为前缀的字符串用来映射扩展名

例如:<url-pattern>*.do</url-pattern>

如果没有精确匹配和路径匹配,那么对具有.do扩展名的资源的请求,将由映射了该URL样式的Servlet来处理。

 

3、以一个单独的/指示这个Web应用程序默认的Servlet

例如:<url-pattern>/</url-pattern>

 如果对某个请求没有找到匹配的Servlet,那么将使用Web应用程序的默认Servlet来处理。

————————————————————————————————————————————

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值