【发布时间】:2015-02-25 06:53:05
【问题描述】:
我有一个 spring mvc 应用程序在远程 CentOS 7 Web 服务器上的 tomcat 8 上运行。当我单击指向调用某些 JSP 的某些 url 模式的链接时,它会出现 404 错误。相同的 war 文件能够在我的本地 CentOS 7 devbox 上localhost:8080 上运行而不会引发 404 错误,并且还可以在我的 devbox 上使用Run As..Run on Server 在 eclipse 中运行,而不会引发 404 错误。 那么为什么同一个war文件会在服务器上抛出404错误,而在本地devbox上却没有呢?
我已通过键入cd /opt/tomcat/webapps/ROOT/WEB-INF/jsp 后跟ls -al 确认JSP 文件确实存在于服务器上,并且还重复该文件夹的子目录。
在我的本地 devbox 上,所有 tomcat 子目录和文件都归 root 所有。在删除服务器上,一些文件夹归一个用户所有,该用户也是 wheel 组的成员。因此,我将服务器上 webapps 目录的所有权更改为 root,但问题仍然存在。我还能尝试什么?
【问题讨论】:
-
三个要点: 1. 您的 tomcat 进程所有者需要有权访问这些文件。您没有在引导程序上提到任何异常,所以我认为这不是原因。 2. 你的 webapp 中是否有任何硬编码路径可能会破坏服务器上的链接? 3. 由于它是一个 Spring MVC 应用程序,因此 jsp 文件在哪里并不重要,而与控制器的映射方式无关。如果控制器找不到视图,也一定会出现异常(我认为不会只是出现 404)。
-
好像是spring依赖问题,请在devbox和server的tomcat lib文件夹下验证spring依赖的所有版本。
-
@CodeMed 抱歉,无法从工作中访问共享堆栈跟踪 (junpshare)。
-
是的,以非 root 用户身份运行 tomcat 是首选,因为在 root 模式下打开端口可能会受到同样的安全问题。您可以将用户和组创建为 Tomcat。并 chown tomcat:tomcat 到 tomcat 目录。但是您还需要记住每次将 webapp 以相同的 tomcat:tomcat 权限放入文件夹。我个人建议使用 tomcat 作为 root。因为我没有看到任何安全问题,而不是非 root 用户的大量维护。
标签: java spring jsp spring-mvc tomcat