首页 > 学院 > 开发设计 > 正文

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

2019-11-06 07:09:22
字体:
来源:转载
供稿:网友

<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不对导致的。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表