Tomcat 9和Web应用程序子目录的类路径问题

时间:2018-12-14 17:54:51

标签: jsp classpath tomcat9

如何配置Web应用程序,以便子目录中的.jsp文件可以在应用程序的根目录中找到与.jsp文件相同的类?

我已将旧的Web应用程序从tomcat6服务器移至tomcat9服务器。但是,应用程序子目录中的.jsp文件不再能够导入WEB-INF / classes下的Java类。该Web应用程序作为爆炸的War文件安装。为了演示该问题,我有一个只包含以下内容的test.jsp文件:

<%@ page import="com.example.serverutils.StringUtil" %>
<%= StringUtil.MILLISECONDS_PER_DAY %>

当该文件在应用程序的根目录中时,可以正常编译。但是,如果我将test.jsp移至子目录,则无法找到StringUtil类。

目录结构如下:

domain\test.jsp
domain\sub\test.jsp
domain\WEB-INF\web.xml
domain\WEB-INF\classes\com\example\serverutils\StringUtil.class

正在记录的实际错误是“只能导入类型。com.example.serverutils.StringUtil解析为包”

2 个答案:

答案 0 :(得分:1)

您的问题可能类似于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 %>

答案 1 :(得分:0)

通过比较旧(tomcat6)和新(tomcat9)conf目录中server.xml文件中应用程序的配置方式,我找出了导致此问题的原因。

无法正常使用的配置

   <Host appBase="/path/to/root/of/webapp">
       <Context docBase="">

但是有效的配置已经

   <Host appBase="/path/to/root/of">
       <Context docBase="webapp">

显然,将上下文的docBase设置为“”会导致此行为。更改server.xml,以使Context的docBase具有路径的最后一个子目录的名称,并将Host元素的appBase设置为从此开始的一个目录。