Java springmvc默认控制器

Java springmvc默认控制器,java,spring,spring-mvc,configuration,routes,Java,Spring,Spring Mvc,Configuration,Routes,我有一个临时的解决方案,我会在下面解释,但我正在寻找是否有更好的解决方案 我有一个基本的Spring4MVC应用程序,带有web.xml配置(没有maven)。web.xml文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app ...> <context-param> <param-name>contextConfigLocation&

我有一个临时的解决方案,我会在下面解释,但我正在寻找是否有更好的解决方案

我有一个基本的Spring4MVC应用程序,带有web.xml配置(没有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>

上下文配置位置
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
调度员
org.springframework.web.servlet.DispatcherServlet
2.
调度员
/
30
redirect.jsp
以及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
)控制器的部分,这仅仅是因为索引页面也需要一些后端工作

当前,所有
/
请求都由
控制器
类处理,而所有
/home/
请求都由
家庭控制器
类处理(因为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);
    }
}
公共类MyControllerClassNameHandlerMapping扩展了ControllerClassNameHandlerMapping{
@凌驾
受保护字符串[]GeneratePath映射(类beanClass){
if(beanClass.isAnnotationPresent(RequestMapping.class)){
RequestMapping=beanClass.getAnnotation(RequestMapping.class);
返回mapping.value();
}
返回super.generatePathMappings(beanClass);
}
}
使用
@RequestMapping({”/“,“/home”})
在类级别(而不是方法级别)注释您的
HomeController


在dispatcher-servlet.xml的bean定义中,将Spring的
ControllerClassNameHandler
替换为
MyControllerClassNameHandler

是否有不使用Spring引导的特定原因?如果您这样做了,您只需在方法上添加
@RequestMapping(“/”)
,而不考虑其他任何事情。@chrylis我知道,我开始使用Spring Boot,但后来被告知我必须在没有它的情况下使用它(配置是必须的)。这不是一个个人项目。所以你有一个雇主,他积极坚持在一个新项目中使用过时的工具,甚至没有在使用依赖关系管理器时应用最佳实践?祝你好运。@chrylis在下一份工作之前是有报酬的:)但我知道你的意思……如果你不打算使用spring boot,那没关系,但即使使用纯spring mvc,你也可以不用
web.xml
之类的东西。斯普林有一位伟大的医生,所以..先生,你是个巫师!老实说,我没有想过要这么做,我只是觉得有一种内在的方式可以做到这一点。但修改该类也做到了这一点。