Pic*_*Boy 3 spring-mvc url-mapping
假设我们在web.xml中有一个名为dispatcher的servlet的3个url模式:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/aaa/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/bbb/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/ccc/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
和控制器方法:
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {}
Run Code Online (Sandbox Code Playgroud)
由于@RequestMapping中的路径值不包含servlet路径,因此用户请求时
/aaa/xxx
/bbb/xxx
/ccc/xxx
Run Code Online (Sandbox Code Playgroud)
请求将全部映射到方法foo.
我认为如果网站非常复杂,这可能会导致潜在的问题.这是Spring Web MVC的一个缺陷还是我误解了什么?
您可以通过传递多个值将所有请求映射到一个请求映射.
@RequestMapping(value = {"/aaa/xxx", "/bbb/xxx", "/ccc/xxx"}, method = RequestMethod.POST)
public String foo() {}
Run Code Online (Sandbox Code Playgroud)
并且只是在web.xml中更改映射以处理对dispatcherservlet的所有类型的请求.
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
您可以根据应用程序要求或Web流定义不同的控制器.如果需要,您可以在实用程序类中移动常用代码段.
@RequestMapping("/aaa")
public class AAAController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}
@RequestMapping("/bbb")
public class BBBController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}
@RequestMapping("/ccc")
public class CCCController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}
Run Code Online (Sandbox Code Playgroud)
阅读Spring Web MVC框架文档中的更多内容
您也可以以编程方式配置它
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
registration.setLoadOnStartup(1);
registration.addMapping("/*");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10095 次 |
| 最近记录: |