如何配置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解析为包”
答案 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设置为从此开始的一个目录。