pbe*_*ean 5 java mapping spring spring-mvc url-routing
这是我认为应该很容易的事情,但到目前为止我还没有能够让它发挥作用.
我想要做的是将我的根路径映射到Spring MVC控制器.正常情况下Servlet,我只想/在我的" "中添加一个" " 的映射web.xml,它会很好地发现它.但是使用Spring MVC,并非如此.
我尝试了很多组合,但似乎都没有.我认为以下一个应该有效.
在web.xml:
<servlet-mapping>
<servlet-name>myDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
在我的contextConfigLocation档案中:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="mappings">
<util:map>
<entry key="/" value-ref="rootController"/>
</util:map>
</property>
</bean>
<bean id="rootController" class="my.package.RootController">
Run Code Online (Sandbox Code Playgroud)
显然,控制器本身就是这种情况.我不知道如何将方法映射到实际的根路径.我的尝试是这样的:
public class RootController extends MultiActionController {
@RequestMapping("/")
public ModelAndView display(HttpServletRequest request, HttpServletResponse response) throws Exception {
final Map<String, Object> model = new HashMap<String, Object>();
model.put("someVariable", "Hello, MVC world.");
return new ModelAndView("rootPage", model);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,假设我的应用程序运行http://localhost:8080/app/,我想要确切的URL来执行该方法display.我之后不想打字/app/.实际上,之后的一些东西/app/被映射到其他控制器,并且一切正常(并且它们必须继续工作).
我在这里错过了什么?为什么这不仅仅是工作?如果我使用相同url-pattern的映射到普通Servlet实例,它工作正常,我到达doGet方法,但使用Spring MVC我似乎错过了一些特殊的黑魔法,以使其工作.
我建议摆脱 SimpleUrlHandlerMapping 并执行以下操作:
@Controller
@RequestMapping("/")
public class RootController
{
@RequestMapping(method=RequestMethod.GET)
public ModelAndView display(...)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
这应该会得到你想要的结果。另外,添加<mvc:annotation-driven/>到您的 servlet 上下文中,<context:component-scan base-package="some.package.path.to.controller" />以便 Spring 连接该控制器。
否则,您可能可以使用 SimpleUrlHandlerMapping 映射 URL,如下所示:
<property name="mappings">
<value>
/*=rootController
</value>
<property>
Run Code Online (Sandbox Code Playgroud)
如果这样做,您可以保留为 rootController 定义的 bean。
| 归档时间: |
|
| 查看次数: |
13046 次 |
| 最近记录: |