java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

2024-02-03

我有一个旧的 struts 1 应用程序,一直使用 Ant 构建,我正在将其转换为使用 Maven。我的应用程序的结构是模块化的,在包含模块中进行依赖管理。包含模块的 dep mgmt 部分包含:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        ...
    </dependencies>
</dependencyManagement>

当我发动战争时(我运行package包含模块中的 Maven 作业)并使用来自 intelliJ 的该 war 运行 Tomcat 配置,我在浏览器中看到以下内容:

org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:161)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause
org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:630)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause
java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我从搜索中找到的所有内容都表明原因是 javax.servlet jar 中的版本冲突,但我的 WEB-INF/lib 目录中根本没有任何内容。我尝试过使用范围provided, compile, 乃至install/pom,但那些没有任何帮助。

tomcat 日志中没有任何其他内容。

我确认jsps正在编译。我正在使用 jspc-maven-plugin。

在我的子模块(不是包含子模块的)pom.xml 中,我有:

<build>
    <!-- default goal to run if somebody doesn't pick one (rarely matters) -->
    <defaultGoal>install</defaultGoal>

    <!-- resources and filtering - also see configuration under maven-war-plugin below -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <filters>
        <filter>src/main/resources/${env}.properties</filter>
        <filter>src/main/resources/${env}.tokens</filter>
    </filters>

    <plugins>
        <!-- begin - precompiling jsps -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jspc-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>jspc</id>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <warSourceDirectory>${basedir}/src/main/webroot</warSourceDirectory>
                        <inputWebXml>${basedir}/src/main/webroot/WEB-INF/web.xml</inputWebXml>
                        <!--<workingDirectory>${basedir}/src/main/webroot</workingDirectory>-->
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- end - precompiling jsps -->

        <!-- used to build warfiles -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <webResources>
                    <resource>
                        <directory>${pom.basedir}/src/main/webroot</directory>
                        <filtering>true</filtering>
                        <!--<targetPath>WEB-INF</targetPath>-->
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
</build>

我可以在 Maven 构建输出中看到正在编译 jsps。但我仍然得到 JasperException。


自从我发布这篇文章以来已经有一段时间了,但我想我会展示我是如何弄清楚的(据我现在记得是最好的)。

我做了一个 Maven 依赖关系树来查找依赖关系冲突,并删除了依赖关系中排除的所有冲突,例如:

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging-api</artifactId>
    <version>1.1</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

另外,我还使用了providedjavax.servlet 依赖项的范围,以免在运行应用程序时与 Tomcat 提供的内容产生额外的冲突。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

HTH.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 的相关文章

随机推荐

  • RXTX 中是否需要持续轮询?

    在试图弄清楚的同时这个问题 https stackoverflow com questions 1391402 problem receving in rxtx 感谢任何帮助 我在使用 RXTX 监控其活动的同时运行PortMon http
  • 如何查找两个范围内的共同日期

    我有 2 个日期范围 start date1 end date1 and start date2 end date2 是否有一种简单的 ruby 方法可以查找两个范围内的所有日期 您可以使用 start date1 end date1 to
  • Django Rest Framework ModelSerializer 在创建时设置属性

    最初创建对象时 我使用当前登录的用户来分配模型字段 所有者 该模型 class Account models Model id models AutoField primary key True owner models ForeignKe
  • 如何以编程方式进行 JSF 内部页面转发?

    在某些情况下 例如每当发生异常时 如何在托管 bean 中以编程方式执行 JSF 内部页面转发 我不想在转发到其他页面时更改 URL 现在 我使用此方法以编程方式重定向到另一个页面 但这会更改 URL FacesContext getCur
  • android 部分索引器教程?

    如何为带有字符串数组的列表视图创建分类部分索引器 我看过字母索引器的示例 但它是如何实现类别的 例如第一节 第二节 第三节 根据您的需要将其自定义为适配器 并将其设置为列表视图 仅此而已 取自here http alluscodebook
  • 我可以在 AWS 帐户之间共享 ACM SSL 证书吗?

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有几个 AWS 账户 用于管理 DNS 地址和 ACM SSL 证书 我的一个帐户中有一个 top level com 域 另一个帐户管
  • 与使用“普通”PHP 相比,使用 CodeIgniter 或 CakePHP 等框架有什么优势? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 PHP 新手 在明天某个时候开始学习代码之前 我将尝试进行更多概述 与使用 普通 PHP 相比 使用 CodeIgniter C
  • 在javascript中从java servlet读取数组

    你好 就像标题所说的 我正在尝试从我的 java Servlet 中读取一个数组 我正在尝试读取 java 脚本文件中的数组 Java servlet 代码 String graphData dbHandler select attribu
  • 错误膨胀类片段类未找到 android.view.fragment 但我包括兼容性库?

    尽管我使用的是兼容性库 但我看到 android view fragment 未找到类异常 编译正常但崩溃 3 0 之前的版本中我应该使用另一个软件包吗 我已经将所有片段类更改为 android support v4 app Frament
  • 使用 Lodash 按值对对象数组进行排序

    我正在尝试按 名称 值对数组进行排序 使用 Lodash 我使用 Lodash 文档创建了下面的解决方案 但是 orderBy 似乎根本没有任何影响 任何人都可以阐明对数组进行排序的正确方法吗 字符数组 id 25 name Anakin
  • 如何合并 2 个 javascript 对象,如果另一个对象中不存在属性,则填充一个对象中的属性?

    如果我有一个 javascript 对象 assoc 数组定义如下 function somefunction options var defaults prop1 foo prop2 bar Do stuff here 我想使用它作为该函
  • 如何使用pickle保存sklearn模型

    我想使用 Pickle 转储并加载我的 Sklearn 训练模型 怎么做 Save import pickle with open model pkl wb as f pickle dump model f Load with open m
  • NSTableView 左上角的奇怪矩形(NSBannerView)

    我正在开发 macOS 应用程序 但遇到了一个奇怪的问题 在我的 NSTableView 的左上角 标题上方 显示一个灰色矩形 我在 NSTableView 后面添加了一个 NSBox 以便在屏幕截图中更清晰 通过调试视图层次结构 我看到它
  • 页面重新加载后显示附加图像

    我正在将图像附加到页面中 还有一个复选框可以查看附加项目和隐藏附加项目 我将数据保存在 JSON 数组中 即使在重新加载选项卡后 我也想显示这些附加图像 当您通过 JavaScript 对 DOM 进行动态更改时 它们不是持久的 如果你想做
  • 使 Azure DocumentDB 不返回服务字段

    我在节点应用程序中为 Azure DocumentDB 使用类似 SQL 的语法 这是方法代码 client queryDocuments collection self SELECT FROM root toArray function
  • 在数据库中存储不同图像的最佳方式是什么?

    为不同目的存储图像的最佳方法 关于数据库设计 是什么 我有一堆用户照片 还有另外 5 组不同的照片 类似于用户照片 但与用户照片没有联系 最好是将所有照片存储在一个数据库表中并尝试从该表中引用它们 还是最好为每组照片创建不同的表 我可以看到
  • masm 错误 A2075:跳转目的地太远:30 个字节

    我的女士给我布置了一个作业 其中我必须编写一个程序 该程序将通过键盘获取输入并检查嵌套括号的常规顺序 例如 input output 正确的格式 input output 不正确 我的程序 model small stack 100h 38
  • Spring AutoPopulateList 最大大小?

    我对 Spring 自动填充列表有疑问 我的用例如下 管理可以访问应用程序的用户列表 在 GUI 方面 我使用自动完成字段来搜索用户并将用户添加到右侧的表中 用户也可以从表中删除 当 GUI 用户提交时 GUI 会动态构建一个包含用户字段的
  • 读取文本文件的行并收到 Charmap 解码错误

    我使用 python3 3 和 sqlite3 数据库 我有一个大约 270mb 的大文本文件 我可以在 Windows7 中使用写字板打开它 该文件中的每一行如下所示 术语 t编号 n 我想读取每一行并将值保存在数据库中 我的代码如下所示
  • java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

    我有一个旧的 struts 1 应用程序 一直使用 Ant 构建 我正在将其转换为使用 Maven 我的应用程序的结构是模块化的 在包含模块中进行依赖管理 包含模块的 dep mgmt 部分包含