gpt4 book ai didi

tomcat - spring mvc tomcat 应用部署

转载 作者:行者123 更新时间:2023-11-28 21:58:51 25 4
gpt4 key购买 nike

我有一个可以工作的 spring 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 页面 如果您通过网络浏览器看到此页面,则表示您已成功设置 Tomcat。恭喜!

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

问题:

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

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

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

更新:

根据 fvu 的建议,当我将 ROOT 更改为其他目录然后将我的 up 部署到 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!

更新二:

当我将配置更改为:

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

该网站看起来可以正常工作,但实际上没有。链接不起作用,css/js 不加载。

最佳答案

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

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

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

  • production.properties

    baseurl = //yourdomain.com
  • 开发属性

    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 模板页面中定义 base 标记:

<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>
...

如果出于任何原因您在使用 base 标记 时遇到问题,您还可以使用 ${baseurl} 声明每个链接:<link rel="stylesheet" href="${baseurl}/css/app.css">

使用此解决方案,每台服务器都将拥有自己的事件配置文件,所有链接和资源都会按预期在运行时更新。

关于tomcat - spring mvc tomcat 应用部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com