【问题标题】:Cannot get JSTL tags to work with Tomcat 9, tried every solution nothing work [duplicate]无法让 JSTL 标记与 Tomcat 9 一起使用,尝试了所有解决方案都没有工作 [重复]
【发布时间】:2021-06-24 20:54:44
【问题描述】:

我正在使用 tomcat 9,但无法让 JSTL 标记工作。我尝试了所有解决方案,但似乎没有任何效果。因此,我即将放弃我长达 3 个月的 JSP 学习。我没有尝试任何方法。

我不确定是什么原因造成的,我很困惑。我是否在 Tomcat 9 中使用了正确的 JSTL 版本? ?我不确定哪个版本的 JSTL 与 Tomcat 9 兼容。另外,我不确定应该在 Tomcat 9 中使用哪个版本的 web.xml。我没有使用 maven。

编辑:

我终于能够通过下载最新的 jstl-1.2.jar 并将其添加到我的 WEB-INF/lib 文件夹中来解决我的 result.jsp 文件中的 JSTL 标记的功能。所以我能够使标准的 forEach 标记工作,但我无法从 servlet 中检索我的数组。我怀疑这与我的 web.xml 版本规范有关,我使用的是 Tomcat 7 和 jstl-1.2。

在我的情况下,合适的 web.xml 配置是什么?

我收到此错误

键入异常报告

消息绝对 uri:[http://java.sun.com/jsp/jstl/core] 无法在 web.xml 或随此应用程序部署的 jar 文件中解析

描述服务器遇到了一个意外情况,导致它无法完成请求。

例外

org.apache.jasper.JasperException: 绝对 uri: [http://java.sun.com/jsp/jstl/core] 无法在 web.xml 或随此应用程序部署的 jar 文件中解析 org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:54) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:294) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:81) org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:251) org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:122) org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:435) org.apache.jasper.compiler.Parser.parseDirective(Parser.java:493) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1450) org.apache.jasper.compiler.Parser.parse(Parser.java:144) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244) org.apache.jasper.compiler.ParserController.parse(ParserController.java:105) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:206) org.apache.jasper.compiler.Compiler.compile(Compiler.java:391) org.apache.jasper.compiler.Compiler.compile(Compiler.java:367) org.apache.jasper.compiler.Compiler.compile(Compiler.java:351) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

注意根本原因的完整堆栈跟踪可在服务器日志中找到。

我的 Servlet:

package com;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class MovieList extends HttpServlet {
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
        String [] movieList = {"movie 1","movie 2","movie 3"};
        request.setAttribute("movieList", movieList);

        RequestDispatcher view = request.getRequestDispatcher("result.jsp");
        view.forward(request,response);
    }
}

我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
   http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>Tester</servlet-name>
    <servlet-class>Tester</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Tester</servlet-name>
    <url-pattern>/Tester</url-pattern>
  </servlet-mapping>



</web-app>

非常感谢任何帮助。

我的观点

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<table>
    <c:forEach items="${movieList}" var="movie">
        <td><c:out value="${movie}"/></td>
    </c:forEach>
</table>

<?xml version="1.0" encoding="UTF-8"?>

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>nexnau</groupId>
  <artifactId>makaroni</artifactId>
  <version>1</version>
  <packaging>war</packaging>

  <name>makaroni Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->


  </dependencies>

  <build>
    <finalName>makaroni</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>




我得到了这个结果

enter image description here

这就是我使用 servlet 得到的结果

enter image description here

我的环境

enter image description here

【问题讨论】:

    标签: jsp tomcat jstl


    【解决方案1】:

    首先,我非常怀疑你错过了 jsp 文件顶部的这个:

    <%@ page isELIgnored="false" %>
    

    其次,我认为您需要将 servlet 从“doPost”更改为“doGet”

    如果还是不行,我给你做了个demo,希望你懂maven和git

    https://github.com/632691987/demo1.git
    

    如果还是不明白,请通过以下链接给我留言:

    https://github.com/632691987/demo1/issues/new
    

    最后,我想开个玩笑:19年前,当我第一次学习C语言的“for”时,我想放弃,因为我不懂! :)

    现在,我做了 15 年的程序员!

    【讨论】:

    • 我没有用Maven,我试过你的方法,没用。它只能在没有 servlet 的情况下工作,只有带有 start="" 和 end="" 的 forEach 标记。谢谢
    • 它只是不想与 servlet 通信。我什么都试过了。我确实使用了 doGet() 而不是 doPost() 并且它仍然无法正常工作。
    • 好吧,@EL,你应该知道,你的源代码成功与否,取决于你整个项目的每个文件,而不仅仅是 3 个以上的文件。所以你应该检查你的整个项目。你应该学习如何使用 Maven,这很容易。学完之后,你就可以使用我的源代码了!加油,不要放弃!
    • 我今天开始我的 Maven 课程。我会及时通知你的。谢谢=)
    • 我想我在这里完成了。我正在寻找与我的生活有关的其他事情。这个maven东西太复杂了。感谢您的帮助
    猜你喜欢
    • 2017-10-22
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多