代码之家  ›  专栏  ›  技术社区  ›  John Weidner

Tomcat9和Web应用子目录的类路径问题

  •  4
  • John Weidner  · 技术社区  · 7 年前

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

    我已经将旧的Web应用程序从Tomcat6服务器移动到了Tomcat9服务器。但是,应用程序的子目录中的JSP文件不再能够导入Web-INF/Cub下的Java类。Web应用程序作为分解的战争文件安装。为了演示这个问题,我有一个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 回复  |  直到 7 年前
        1
  •  1
  •   A. STEFANI    7 年前

    你的问题可能类似于 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 %>
    
        2
  •  0
  •   John Weidner    7 年前

    我通过比较旧(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,使上下文的docbase具有路径的最后一个子目录的名称,并将宿主元素的appbase设置为一个目录,从而解决了这个问题。

    推荐文章