Tomcat 9 和 Web 应用程序子目录的类路径问题
Classpath problem with Tomcat 9 and web app subdirectory
如何配置 Web 应用程序,以便子目录中的 .jsp 文件可以找到与应用程序根目录中的 .jsp 文件相同的 classes?
我已将一个旧的 Web 应用程序从 tomcat6 服务器移动到 tomcat9 服务器。但是,应用程序子目录中的 .jsp 文件不再能够导入 WEB-INF/classes 下的 java classes。 Web 应用程序安装为展开的 war 文件。为了演示这个问题,我有一个 test.jsp 文件,其中只包含:
<%@ page import="com.example.serverutils.StringUtil" %>
<%= StringUtil.MILLISECONDS_PER_DAY %>
此文件在应用程序的根目录中时可以正常编译。但是,如果我将 test.jsp 移动到子目录,则无法找到 StringUtil class.
目录结构如下:
domain\test.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class
记录的实际错误是 "Only a type can be imported. com.example.serverutils.StringUtil resolves to a package"
您的问题可能类似于How to include JSPs file from another folder
它可能适用于这种结构:
domain\test.jsp
domain\import_class.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class
与domain\import_class.jsp
包含:
<%@ page import="com.example.serverutils.StringUtil" %>
和domain\sub\test.jsp
包含相对路径包括:
<jsp:include page="../import_class.jsp"></jsp:include>
<%= StringUtil.MILLISECONDS_PER_DAY %>
我通过比较旧 (tomcat6) 和新 (tomcat9) conf 目录中 server.xml 文件中应用程序的配置方式,找出了导致问题的原因。
不工作的配置
<Host appBase="/path/to/root/of/webapp">
<Context docBase="">
但是工作的配置有
<Host appBase="/path/to/root/of">
<Context docBase="webapp">
显然,将 Context 的 docBase 设置为 "" 会导致此行为。更改 server.xml 以便 Context 的 docBase 具有路径最后一个子目录的名称,并将 Host 元素的 appBase 设置为从那里向上的一个目录解决了这个问题。
如何配置 Web 应用程序,以便子目录中的 .jsp 文件可以找到与应用程序根目录中的 .jsp 文件相同的 classes?
我已将一个旧的 Web 应用程序从 tomcat6 服务器移动到 tomcat9 服务器。但是,应用程序子目录中的 .jsp 文件不再能够导入 WEB-INF/classes 下的 java classes。 Web 应用程序安装为展开的 war 文件。为了演示这个问题,我有一个 test.jsp 文件,其中只包含:
<%@ page import="com.example.serverutils.StringUtil" %>
<%= StringUtil.MILLISECONDS_PER_DAY %>
此文件在应用程序的根目录中时可以正常编译。但是,如果我将 test.jsp 移动到子目录,则无法找到 StringUtil class.
目录结构如下:
domain\test.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class
记录的实际错误是 "Only a type can be imported. com.example.serverutils.StringUtil resolves to a package"
您的问题可能类似于How to include JSPs file from another folder
它可能适用于这种结构:
domain\test.jsp
domain\import_class.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class
与domain\import_class.jsp
包含:
<%@ page import="com.example.serverutils.StringUtil" %>
和domain\sub\test.jsp
包含相对路径包括:
<jsp:include page="../import_class.jsp"></jsp:include>
<%= StringUtil.MILLISECONDS_PER_DAY %>
我通过比较旧 (tomcat6) 和新 (tomcat9) conf 目录中 server.xml 文件中应用程序的配置方式,找出了导致问题的原因。
不工作的配置
<Host appBase="/path/to/root/of/webapp">
<Context docBase="">
但是工作的配置有
<Host appBase="/path/to/root/of">
<Context docBase="webapp">
显然,将 Context 的 docBase 设置为 "" 会导致此行为。更改 server.xml 以便 Context 的 docBase 具有路径最后一个子目录的名称,并将 Host 元素的 appBase 设置为从那里向上的一个目录解决了这个问题。