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