簡體   English   中英

Spring MVC默認控制器

[英]Spring MVC default controller

我對此有一個臨時解決方案,下面將對其進行解釋,但是我正在尋找是否有更好的解決方案。

我有一個帶有web.xml配置的基本Spring 4 MVC應用程序(沒有maven)。 web.xml如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app ...>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>redirect.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

和dispatcher-servlet.xml:

<?xml version='1.0' encoding='UTF-8' ?>
<beans ...>
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    <bean class="controllers.Controller"></bean>
    <bean class="controllers.HomeController"></bean>
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />
</beans>

我刪除了它將為索引視圖創建簡單的in-xml( urlMapping )控制器的部分,這僅僅是因為索引頁面還需要完成一些后端工作。

當前,所有/請求均由Controller類處理,而所有/home/請求均由HomeController類處理(因為默認情況下,spring會創建路徑,因此控制器名稱是主url路徑,對嗎?)

我的問題是,是否可能,如果可以,如何使HomeController類成為默認控制器。 只是這樣,我實際上不必具有Controller類。

對於那些熟悉ASP.NET MVC的人來說,我想要的是兩次訪問同一控制器時如何訪問site.com/Home/Index或僅僅是site.com

我想創建它,以便Spring自動將site.com連接到HomeController類中的路由。

我希望我足夠清楚。 我將回答所有不清楚的問題,並歡迎您提供任何答案或文檔! 謝謝!

我實際上沒有嘗試過,但是我認為它應該起作用。

創建一個擴展ControllerClassNameHandlerMapping的新類,並重寫generatePathMappings方法,以便如果控制器使用@RequestMapping進行注釋,則它將使用該注釋的值作為路徑而不是控制器的名稱。

public class MyControllerClassNameHandlerMapping extends ControllerClassNameHandlerMapping {

    @Override
    protected String[] generatePathMappings(Class<?> beanClass) {
        if (beanClass.isAnnotationPresent(RequestMapping.class)) {
            RequestMapping mapping = beanClass.getAnnotation(RequestMapping.class);
            return mapping.value();
        }
        return super.generatePathMappings(beanClass);
    }
}

使用@RequestMapping({"/", "/home"})在類級別(而不是方法級別)注釋HomeController

dispatcher-servlet.xml的bean定義中,將Spring的ControllerClassNameHandler替換為MyControllerClassNameHandler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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