部署Spring MVC应用程序以在Tomcat8中以root身份运行

时间:2017-04-28 09:20:21

标签: java spring spring-mvc tomcat server

我正在尝试在Tomcat8中以root身份部署Spring MVC应用程序。目前,我可以访问我的应用程序的唯一方法是my_domain_name.com/my_webapp,其中my_webapp是我的war文件的名称;而我想只在my_domain_name.com上访问它。

我知道在这个主题上还有其他类似的问题,但我已经尝试了所有内容,只将我的war文件重命名为ROOT.war工作,但这对我来说并不理想,因为我想从同一台服务器运行多个应用程序。

我的server.xml包括:

<Context path="" docBase="my_webapp" debug="0" reloadable="true">
</Context>
<Host name="my_domain_name.com"  appBase="my_webapp" 
    unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" 
        directory="logs" prefix="my_webapp_access_log" suffix=".txt"  
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

我在conf目录中有一个ROOT.xml文件:

<Context 
  docBase="my_webapp" 
  path="" 
  reloadable="true"/>

我在my_webapp中的META-INF下的context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/"/>

my_webapp中的配置文件AppInitializer.java:

public class AppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext rootContext = new 
            AnnotationConfigWebApplicationContext();

        rootContext.register(AppConfig.class);

        container.addListener(new ContextLoaderListener(rootContext));

        AnnotationConfigWebApplicationContext dispatcherContext = 
            new AnnotationConfigWebApplicationContext();


        ServletRegistration.Dynamic dispatcher = 
            container.addServlet("dispatcher", new 
                DispatcherServlet(dispatcherContext));

        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

my_webapp中的配置文件DefaultView:

public class DefaultView extends WebMvcConfigurerAdapter{

    @Override
    public void addViewControllers( ViewControllerRegistry registry ) {

        registry.addViewController( "/" ).setViewName(
            "forward:/home.html" );
        registry.setOrder( Ordered.HIGHEST_PRECEDENCE );

        super.addViewControllers( registry );
    }
}

我认为这是所有相关文件,但如果你认为它可能是别的,请告诉我。我不知道我的Spring MVC配置和/或Tomcat配置是否有问题。非常感谢提前。

编辑:这个问题不重复 - 我不是问如何从不同的上下文部署多个webapps。我希望我的webapp能够在root上正确部署,所以我应该只是输入我的www.myapp.com而不是www.myapp.com/myapp。我想这样做而不将我的war文件命名为ROOT.war - 我尝试添加标签但这似乎不起作用。我还创建了一个ROOT.xml,这也无法正常工作。很明显不是问题的重复。

1 个答案:

答案 0 :(得分:1)

我认为你所做的是正确的。如你所说,这个选项有两个选项

1)重新命名战争。

2)覆盖根上下文

How to set the context path of a web application in Tomcat 7.0

Deploying my application at the root in Tomcat