有人对我的 web.xml 文件中标记<url-pattern>
的值在Spring应用程序中的效果有一个简单的解释吗?我曾经毫无问题地使用*.html
,但如果我将/
更改为更广泛的范围,我就无法从我的应用程序访问任何页面。
如果我选择/
,我的控制器中的映射值应该如何,以及如何链接到JSP文件中的视图?
答案 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文件中的视图?
这有一百万个答案。这取决于。只需记下上述所有信息并自行决定。