在Spring应用程序中使用<url-pattern>的含义</url-pattern>

时间:2014-03-25 12:58:39

标签: spring spring-mvc

有人对我的 web.xml 文件中标记<url-pattern>的值在Spring应用程序中的效果有一个简单的解释吗?我曾经毫无问题地使用*.html,但如果我将/更改为更广泛的范围,我就无法从我的应用程序访问任何页面。

如果我选择/,我的控制器中的映射值应该如何,以及如何链接到JSP文件中的视图?

1 个答案:

答案 0 :(得分:0)

首先,您需要了解<url-pattern>映射的内容。它们在第12章的Servlet规范here中进行了描述。

  

在Web应用程序部署描述符中,使用以下语法   用于定义映射:

     
      
  • 以“/”字符开头并以“/ *”后缀结尾的字符串用于路径映射。
  •   
  • 以'*。'前缀开头的字符串用作扩展名映射。
  •   
  • 空字符串(&#34;&#34;)是一种特殊的URL模式,它完全映射到应用程序的上下文根,即表单的请求   http://host:port/<contextroot>/。在这种情况下,路径信息是'/'和   servlet路径和上下文路径为空字符串(“”)。
  •   
  • 仅包含'/'字符的字符串表示&#34;默认&#34;应用程序的servlet。在这种情况下,servlet路径是   请求URI减去上下文路径,路径信息为空。
  •   
  • 所有其他字符串仅用于完全匹配。
  •   

所以[/...]/*是路径映射,任何带有*.前缀的内容都是扩展名映射,而/是默认匹配。

Servlet规范还解释了检查的顺序。

当请求到达时,Servlet容器会遍历您的所有url-pattern元素以查找匹配项,然后调用相应service(..)的{​​{1}}方法。在我们的例子中,这是Servlet

DispatcherServlet通常使用DispatcherServlet bean来确定哪个处理程序方法最适合处理请求。基本上它决定了要调度的RequestMappingHandlerMapping @Controller方法。 RequestMappingHandlerMapping有一个名为useSuffixPatternMatch的属性(默认为@RequestMapping),用于确定

  

匹配模式时是否使用后缀模式匹配(&#34;。&#34;)   要求。如果启用了映射到&#34; / users&#34;也符合   &#34; /用户&#34;

因此,如果您的servlet映射到

true

并映射处理程序方法

<url-pattern>*.html</url-pattern>

然后该方法将处理对@RequestMapping(value = "/test") 的请求。

  

如果我选择/context/test.html,我的控制器中的映射值应该如何,以及   我应该如何链接到我在JSP文件中的视图?

这有一百万个答案。这取决于。只需记下上述所有信息并自行决定。