我认为这应该是非常简单的,但到目前为止我还没有能够让它发挥作用。
我想要做的是将我的根路径映射到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">
然后显然,控制器本身就是这种情况。我不知道如何将方法映射到实际的根路径。我的尝试是这样的:
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/
之后的一些东西被映射到其他控制器,并且一切正常(并且它们必须继续工作)。
我在这里缺少什么?为什么这不仅仅是工作?如果我使用相同的url-pattern
映射到普通Servlet
实例,它可以正常工作并且我到达doGet
方法,但是使用Spring MVC我似乎错过了一些特殊的黑魔法来获取这个工作。
答案 0 :(得分:2)
您可以在/
文件中声明欢迎页面,而不是映射到web.xml
:
<welcome-file-list>
<welcome-file>welcome.htm</welcome-file>
</welcome-file-list>
因此,您的/
路径将被处理为/welcome.htm
,然后如果您的控制器已正确映射到/welcome.htm
,它将处理/
,就好像它是{{1}请求,而不更改其他配置。
答案 1 :(得分:1)
我建议摆脱SimpleUrlHandlerMapping并执行以下操作:
@Controller
@RequestMapping("/")
public class RootController
{
@RequestMapping(method=RequestMethod.GET)
public ModelAndView display(...)
{
...
}
}
这应该得到你想要的结果。另外,使用<mvc:annotation-driven/>
将<context:component-scan base-package="some.package.path.to.controller" />
添加到servlet上下文中,以使Spring连接该控制器。
否则,您可以使用SimpleUrlHandlerMapping映射URL,如下所示:
<property name="mappings">
<value>
/*=rootController
</value>
<property>
如果以这种方式完成,您可以保留为rootController定义的bean。
答案 2 :(得分:0)
对于Spring Webflow,Boris Treukhov建议使用web-file-list导致我发现了一个适用于weblogic的黑客攻击。例如,如果welcome是flow.xml文件,请执行以下操作:在web.xml中将url-pattern从\更改为* .html。将虚拟(空)文件welcome.htm放入文件夹src \ main \ webapp \ WEB-INF。在SimpleUrlHandlerMapping中映射值/welcome.htm=flowController。最后,完成注册表,flow-location path =“welcome.xml”。请参阅链接:http://forum.spring.io/forum/spring-projects/web/50547-welcome-file-list-with-spring。