[英]Map / (root URL) in Spring MVC
這是我認為應該很容易的事情,但到目前為止我還沒有能夠讓它發揮作用。
我想要做的是將我的根路徑映射到Spring MVC控制器。 使用普通的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我似乎錯過了一些特殊的黑魔法來讓它工作。
而不是映射到/
您可以在web.xml
文件中聲明歡迎頁面:
<welcome-file-list>
<welcome-file>welcome.htm</welcome-file>
</welcome-file-list>
因此你的/
path將被處理為/welcome.htm
,然后如果你的控制器被正確映射到/welcome.htm
,它將處理/
好像它是/welcome.htm
請求,而不更改其他配置。
我建議刪除SimpleUrlHandlerMapping並執行以下操作:
@Controller
@RequestMapping("/")
public class RootController
{
@RequestMapping(method=RequestMethod.GET)
public ModelAndView display(...)
{
...
}
}
這應該得到你想要的結果。 另外,使用<context:component-scan base-package="some.package.path.to.controller" />
將<mvc:annotation-driven/>
到servlet上下文,以使Spring連接該控制器。
否則,您可以使用SimpleUrlHandlerMapping映射URL,如下所示:
<property name="mappings">
<value>
/*=rootController
</value>
<property>
如果這樣做,您可以保留為rootController定義的bean。
對於Spring Webflow,Boris Treukhov建議使用web-file-list導致我發現了一個適用於weblogic的hack。 例如,如果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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.