java - 通过STS部署到tomcat和手动部署有区别吗?

标签 java spring tomcat

我在使应用程序运行时遇到了一些问题,这似乎是 Apache Tiles 的问题。

奇怪的是,我的问题的基础是,当我使用相同的 java 版本通过 STS 部署到 2 个 tomcat 时,该应用程序可以正常工作,但是当我获取使用 maven 构建的 war 文件时(与 tomcat 的 java 版本相同)正在使用),然后将它们手动部署到应用程序无法运行的任一 tomcat。

我正在使用 jdk1.7.0_09 通过 STS 使用 Maven 进行构建

我正在使用 jdk1.7.0_09 部署到 STS 到 tomcat 7.0.32 - 这有效

使用 jdk1.7.0_09 手动部署到 tomcat webapps tomcat 7.0.32 - 错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/tiles/layout.jsp'.

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

我正在使用 jdk1.7.0_09 部署到 STS 到 tomcat 7.0.53 - 这有效

使用 jdk1.7.0_09 手动部署到 tomcat webapps tomcat 7.0.53 - 错误:

 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/tiles/layout.jsp'.

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

我不明白为什么当我通过 Eclipse 将它部署到相同的 tomcat 时它会起作用?

最后,当我尝试部署到使用以下设置的测试服务器(仍然使用 jdk1.7.0_09 构建的类)时:

Tomcat 8.2.0.23 jdk1.8.0_11

我在尝试解析磁贴 View 时遇到不同的错误(500 内部服务器错误):

javax.servlet.ServletException: Could not resolve view with name 'base/dashboard/view' in servlet with name 'appServlet'

我非常坚持这一点,我花了一段时间才到达现在的位置,但现在我似乎完全碰壁了,我只是不明白当通过 STS 部署时,该应用程序如何在 tomcat 中运行,但随后手动部署到 tomcat webapps 时不起作用。

任何人都可以帮助阐明这里发生的事情吗?

谢谢

最佳答案

显然,答案是“是的,有”,但这没有帮助。

查看错误信息,证据是:

  • 问题出现在Tomcat编译JSP时,

  • 问题是某种类路径问题。

现在奇怪的是,据称缺失的类的名称是 java.util.Map$Entry;即标准的 Map.Entry 接口(interface)。该类位于标准 Java 库中,因此应该位于 JSP 编译器的类路径中。

推测:STS 部署和手动部署之间的区别可能有以下几点:

  • 可能是 STS 正在预编译 JSP。
  • 可能是 STS 对 Tomcat 的配置有所不同;例如以影响 Jasper 的方式调整 Tomcat 配置。

经过一些研究(谷歌),我怀疑使用 Tomcat 7 版本的最初问题的根本原因是您试图在 Tomcat 7 上运行为/使用 Java 8 编译器编译的代码。

TL;DR 是 Tomcat 7 和 Java 8 不能很好地协同工作。

引用:

最后一个问题(“Could not resolve view ...”)看起来无关紧要,可能是 Tomcat 7 -> Tomcat 8 移植问题。

关于java - 通过STS部署到tomcat和手动部署有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215641/

相关文章:

java - 如何让组合框说一件事但放入另一件事?

java - Jasper Reports : Subeport showing null values in Main Report, 数据源是一个 java 列表

java - 不存在警报/未找到模式对话框 - WebDriver 无法捕获 JS 错误

java - 检测无效输入的个数(使用parseInt)

java - UTF-8 URL 解码/编码

java - Spring AOP 中的错误 "The hierarchy of the type ClassName is inconsistent"

java - 如果用户具有多个权限,Spring 安全表达式会失败

java - 为什么Tomcat STDOUT 总是指向/dev/null?

java - Sentry log4j 抛出错误 405 不允许

java - 如何用jvisualvm监控Tomcat,显示visualgc?