Tomcat 8 - 虚拟主机不重新编译 JSP 或识别更新的类

Posted

技术标签:

【中文标题】Tomcat 8 - 虚拟主机不重新编译 JSP 或识别更新的类【英文标题】:Tomcat 8 - Virtual Host Not Recompiling JSPs or Recognizing Updated Classes 【发布时间】:2014-04-20 00:06:59 【问题描述】:

我刚刚在 Windows 7 上使用虚拟主机解压并配置了 Tomcat 8.0.3。我已经在默认的 webapps 下成功测试了它,但是,我的虚拟主机无法识别 JSP 文件或类中的更改。

这是我的设置:

%CATALINA_HOME%\conf\server.xml

...
    <Engine name="Catalina" defaultHost="localhost">
    ...
      <Host name="ww.virtual.com"  appBase="vapps" unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
... 

%SystemRoot%\system32\drivers\etc\hosts

...
127.0.0.1 ww.virtual.com

%CATALINA_HOME%\vapps\ROOT\META-INF\context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="true" privileged="true" reloadable="true">

<Resource name="jdbc/INVENTORY" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="sqlusr" password="secret1" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
               url="jdbc:sqlserver://127.0.0.1:1433;instanceName=SQLSERVER;DatabaseName=INVENTORY"/>
</Context>

%CATALINA_HOME%\vapps\ROOT\WEB-INF\web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">

  <display-name>Test Display</display-name>
  <description>Test Description</description>
  <resource-ref>
      <description>Test DB Connection</description>
      <res-ref-name>jdbc/INVENTORY</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

然后我在 %CATALINA_HOME%\vapps\ROOT\ 中有 JSP 文件,在 %CATALINA_HOME%\vapps\ROOT\WEB-INF\classes\MainPackage\ 中的类在服务器启动时被正确加载。但是,如果我对 JSP 或 .class 文件进行任何更改,服务器将无法识别更新。我做错了什么?

【问题讨论】:

【参考方案1】:

这是因为您启用了反资源锁定。启用该选项后,Web 应用程序不会从 appBase 部署,而是从工作目录中的副本部署。如果您在工作目录中编辑副本,您将看到更改。

或者,删除反资源锁定选项并修复任何导致您首先需要它们的错误。

【讨论】:

谢谢您,这解决了问题。更改的 JSP 现在会自动重新编译,更改的类文件现在也可以识别(虽然我一开始确实遇到了一些延迟)

以上是关于Tomcat 8 - 虚拟主机不重新编译 JSP 或识别更新的类的主要内容,如果未能解决你的问题,请参考以下文章

为啥在jsp更改时tomcat不需要重启

tomcat中的JSP引擎

tomcat运行JSP时产生的错误:”javax.servlet.servletexception: java.lang.nosuchmethoderror”

为啥在eclipse中修改JSP后tomcat自动重启?

在tomcat中手动部署的JSP编译无法解析为某种类型

Tomcat无法编译加载class文件