簡體   English   中英

Spring MVC中的Map /(根URL)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM