Ton*_*y R 9 spring servlets request-mapping
这与这个问题类似,但我仍然对我的情况感到困惑.我想将这种蚂蚁风格的模式映射到控制器方法:
/results/**
Run Code Online (Sandbox Code Playgroud)
也就是说,我希望任何URL www.hostname.com/MyServlet/results/123/abc/456/def/都可以使用此方法.我有:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/results/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
和:
@RequestMapping(value="/**", method=RequestMethod.GET)
public ModelAndView handleRequest() {...}
Run Code Online (Sandbox Code Playgroud)
这可以指导我的方法请求,但引出了几个问题:
<url-pattern>/another-mapping/*</url-pattern>??? 它也会映射到该方法!我该如何将两者分开?/results/*工作,而/results/**不是?根据ant路径样式,**意味着包含嵌套/字符,而*在下一个停止/.因此,它应该只能成功映射一个URL,如/results/123bot not /results/123/abc/.对?也许在您的servlet映射中,您可能希望将所有流量定向到'/*'.这样,您可以在控制器中区分使用不同的@RequestMapping的方法.
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
和
@RequestMapping(value="/results/**", method=RequestMethod.GET)
public ModelAndView handleResults() {...}
@RequestMapping(value="/another-mapping/**", method=RequestMethod.GET)
public ModelAndView handleAnotherMapping() {...}
Run Code Online (Sandbox Code Playgroud)
希望上面的内容对数字1有帮助.至于数字2,我认为你不能在你的web.xml域描述符中使用'ant-style'模式匹配器(特别是**).
如果我添加另一个servlet映射,比如/ another-mapping/*??? 它也会映射到该方法!我该如何将两者分开?
使用您当前的配置,您不能.如果你想映射DispatcherServlet到多个URL模式以及它们之间的区别,你可以声明DefaultAnnotationHandlerMapping与alwaysUseFullPath = "true"和使用的完整路径@RequestMapping.
或者,您可以映射DispatcherServlet为<url-pattern>/*</url-pattern>并使用完整路径@RequestMapping而无需重新配置DefaultAnnotationHandlerMapping.虽然在这种情况下,您需要为静态内容配置排除项.
为什么url-pattern/results/*工作,而/ results/**不工作?根据ant路径样式,**表示包含嵌套/字符,而*表示在下一个/.因此,它应该只能成功映射像/ results/123,bot NOT/results/123/abc /这样的URL.对?
URL模式web.xml不是ant样式模式,因此只允许使用通配符.../*和*.xxx通配符.
| 归档时间: |
|
| 查看次数: |
22844 次 |
| 最近记录: |