Spring mvc tomcat应用程序部署

时间:2012-11-22 23:57:27

标签: tomcat spring-mvc nginx

我有一个有效的弹簧mvc应用程序。我想让测试版用户可以看到它。我已经购买了域名/设置名称服务器以及所有dns内容。

我通过本地主机访问我的应用程序,如下所示:

localhost:8080/myApp

但在现实世界中,我想像mydomain.com那样访问它。所以我搜索了很多,并且发现人们推荐这些东西的nginx是“最快的”。所以使用以下配置安装了nginx:

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;
  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080;
    }

} #end server

问题:

当我访问mydomain.com时,我得到了众所周知的tomcat页面If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!

如果我手动转到mydomain.com/myApp,那么一切都按预期工作。

问题:

有没有办法让我配置它来执行以下操作:

当我输入地址栏mydomain.com时,我会转移到mydomain.com/myApp

或者我完全不在这种情况下。有更简单的方法吗?

更新

根据fvu的建议,当我将ROOT更改为其他目录然后在ROOT目录中部署我从tomcat获取404:

type Status report

message

description The requested resource is not available.

我可以从服务器日志中检索此错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/tomcat_9090/webapps/myApp/] instead of [/tomcat_9090/webapps/ROOT
/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

更新II:

当我将配置更改为:

proxy_pass http://localhost:8080/myApp/;

网站看起来很有效,但事实并非如此。链接不起作用,css / js不加载。

1 个答案:

答案 0 :(得分:2)

如果使用proxy_pass http://localhost:8080/myApp/;配置 nginx ,唯一的问题是如何创建链接和资源,以便它们使用预期的base-url路径,而不是默认的Tomcat Servlet路径。 / p>

如果您能够使用 Spring Framework 3.1 + ,新的配置文件功能可以帮助定义不同的base-url,具体取决于活动配置文件,就像其他Web框架一样:路径将在运行时中决定,具体取决于服务器或环境。

例如,假设至少有2个属性文件(production.properties和dev.properties)在每个文件上声明了baseurl字段:

  • production.properties

    baseurl = //yourdomain.com
    
  • dev.properties

    baseurl = //localhost:8080/myApp
    

然后使用您最喜欢的Spring方式,为每个不同的环境加载属性,例如:

<util:properties id="properties" location="classpath:META-INF/default.properties" />
....
<beans profile="development">
    <util:properties id="properties" location="classpath:META-INF/dev.properties" />
</beans>

根据之前的要求,您可以在任何JSP模板页面中定义基本标记

<spring:eval expression="@properties['baseurl']" var="baseurl" />

<base href="${baseurl}/" />

最后,您可以将所有链接和资源声明为相对路径

<link rel="stylesheet" href="css/app.css">
<script src="js/libs/jquery-1.7.1.min.js"></script>
<a href="">Home</a>
<a href="about">About</a>
...

如果由于任何原因您无法使用基本标记,您还可以使用$ {baseurl}声明每个链接:<link rel="stylesheet" href="${baseurl}/css/app.css">

使用此解决方案,每个服务器都将拥有每个自己的活动配置文件,并在运行时更新所有链接和资源,如预期的那样。