【问题标题】:JSTL on remote Tomcat server breaks webapp远程 Tomcat 服务器上的 JSTL 破坏了 webapp
【发布时间】:2015-05-29 18:02:54
【问题描述】:

作为一项学校作业,我正在制作一个网络应用程序。当我在本地服务器上运行它时它按预期工作(尽管数据库服务器仍然是远程的),但是当部署到需要提交分配的远程 Tomcat 服务器时,我收到以下错误:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:56)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:278)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:76)
org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:242)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:124)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1430)
org.apache.jasper.compiler.Parser.parse(Parser.java:139)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
controller.GameServlet.listAllGames(GameServlet.java:39)
controller.GameServlet.doGet(GameServlet.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

如果我刷新页面几次,有时也会显示不同的错误:

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.games_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:177)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
controller.GameServlet.listAllGames(GameServlet.java:39)
controller.GameServlet.doGet(GameServlet.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我已经查找这些错误几个小时了,并尝试了 Stackoverflow 和其他来源的多个建议。 该应用程序使用 Maven。这是我的 pom.xml 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>game</groupId>
<artifactId>game</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>game Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1201-jdbc4</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>

    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.2</version>
    </dependency>
</dependencies>
<build>
    <finalName>game</finalName>
</build>

jstl-1.2.jar 文件与所有其他 .jar 文件一样位于 webapp/WEB-INF/lib 文件夹中。 这是我的每个 .jsp 文件的开头:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

我已经坚持了好几个小时了,到目前为止我尝试过的一切都没有结果,但我觉得我错过了一些明显的东西。

【问题讨论】:

  • 您捆绑了 JSTL 1.1 和 1.2。为什么?摆脱 JSTL 1.1(即taglibs:standard)。尽管我预计与您的问题中提出的问题症状不同。
  • 这是我查找问题修复程序时的残余。在添加之前就出现了问题。

标签: java jsp maven tomcat jstl


【解决方案1】:

这似乎是服务器端的问题,因为其他学生报告了这个问题。因此解决它不在我的手中。不过感谢您的帮助!

【讨论】:

    【解决方案2】:

    显然,远程服务器的自动检测不起作用或由于某种原因 jar 没有到位。

    【讨论】:

      【解决方案3】:

      显然远程服务器的自动检测不起作用或jar没有到位。

      【讨论】:

        【解决方案4】:

        可能远程服务器的jsp版本已经过时了。由于 jsp-2.0 标签库是自动检测的。我看到两个选项。要么在 web.xml 中包含 taglib-tag(另请参见 http://wiki.metawerx.net/wiki/RemovingTaglibFromWeb.xml),要么在 pom.xml 中包含最新的 jsp-api。

        【讨论】:

        • 我写的可能只适用于自定义标签,但我会让 jsp 和 jstl-versions 一起使用。
        • 堆栈跟踪提示 Tomcat 8.0。这绝对不是“过时的”。
        猜你喜欢
        • 2012-03-26
        • 1970-01-01
        • 2010-11-09
        • 2012-08-24
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 2018-03-26
        • 2012-10-18
        相关资源
        最近更新 更多