这是我认为应该非常容易的事情,但到目前为止我还没有能够让它发挥作用。
我想做的是将我的根路径映射到 Spring MVC Controller 。对于普通的 Servlet
,我只需在我的 web.xml
中为“/
”添加一个映射,它会很好地识别它.但是对于 Spring MVC,就不是那么多了。
我尝试了很多组合,但似乎都不起作用。我认为下面的应该可行。
在 web.xml
中:
<servlet-mapping>
<servlet-name>myDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
在我的 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">
那么显然,还有 Controller 本身的情况。我不知道如何将方法映射到实际的根路径。我的尝试是这样的:
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);
}
}
假设我的应用程序在 http://localhost:8080/app/
上运行,我想要那个确切的 URL 来执行方法 display
。我不想在 /app/
之后键入任何内容。事实上,/app/
之后的一些东西被映射到其他 Controller ,并且一切正常(并且它们必须继续工作)。
我在这里错过了什么?为什么这不简单?如果我使用相同的 url-pattern
映射到一个普通的 Servlet
实例,它工作正常并且我到达了 doGet
方法,但是使用 Spring MVC 我似乎缺少一些特殊的黑魔法来让它工作。
最佳答案
您可以在 web.xml
文件中声明一个欢迎页面,而不是映射到 /
:
<welcome-file-list>
<welcome-file>welcome.htm</welcome-file>
</welcome-file-list>
因此您的 /
路径将被处理为 /welcome.htm
然后如果您的 Controller 正确映射到 /welcome.htm
它将处理 /
就好像它是一个 /welcome.htm
请求一样,而不更改其他配置。
关于java - 在 Spring MVC 中映射/(root URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202302/