<url-pattern>写成/和/*的区别

  • <url-pattern>/</url-pattern>
    会匹配到/springmvc这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。

  • <url-pattern>/*</url-pattern>
    会匹配所有的url:路径型的和后缀型的url(包括/springmvc,.jsp,.js和*.html等)。

下面是关于这个问题在stack overflow上的解释:
原文链接:http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern

简单的翻译如下:

<url-pattern>/*</url-pattern>

这种形式将会覆盖所有其它的servlet。不管你发出了什么样的请求,最终都会在这个servlet中结束。因此,对于servlet来说,这是一个很糟糕的URL模式。通常来讲,你只会想要在一个Filter中使用这种模式。它可以通过调用doFilter()方法来使请求继续。

<url-pattern>/</url-pattern>

这种形式不会覆盖任何其它的servlet。它仅仅替换了servlet容器中内建的默认servlet。这种形式通常只用来请求静态资源(CSS/JS/image等)和展示目录的列表。servlet容器内建的默认servlet同样可以处理HTTP cache请求、媒体(声音/视频)流以及文件的下载。通常来说,你不会想要覆盖这个默认的servlet,否则,你将不得不自己处理一些琐碎的任务。因此,对于sevlet来说,这同样是一个糟糕的URL模式。说到为什么JSP页面的请求并不会命中这个servlet,那是因为servlet容器内建的JSP servlet将会被调用,而这个容器内建的JSP servlet已经默认地映射在了*.jsp上。

<url-pattern></url-pattern> 

这种空串的形式。当上下文的根被请求的时候,它将被调用。这与<welcome-file>的方式是不同的,因为这种形式在当任何子目录被请求的时候不会被调用。当你期望一个“首页servlet”的时候,这种URL模式就是适合你的。

这是在一个Spring MVC工程中遇到一个bug后学习的,使用内置的视图解析器时,找到jsp文件后会将jsp的代码也打印到网页上,如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Index</title>
</head>
<body>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<form action="<%=basePath %>set">
    name:<input type="text" name="name" value=""><br>
    value:<input type="text" name="value" value=""><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

遇到这个问题,才百度找到是因为url-pattern不对导致的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值