无法让jstl标记与Tomcat9一起使用,尝试了所有解决方案都无效

72qzrwbm  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(940)

此问题已在此处找到答案

如何安装jstl?绝对uri:http://java.sun.com/jstl/core 无法解决(17个答案)
上个月关门了。
我使用的是Tomcat9,我无法让jstl标记工作。我尝试了所有的解决方案,但似乎没有任何效果。我因此,我即将放弃3个月的jsp学习。我试过的都没用。
我不知道这是怎么回事,我很困惑。我是否在tomcat 9中使用了正确的jstl版本?我不确定jstl的哪个版本与tomcat 9兼容。另外,我也不确定web.xml的哪个版本应该与tomcat 9兼容。我没有使用maven。
编辑:
通过下载最新的jstl-1.2.jar并将其添加到web inf/lib文件夹中,我终于能够解析result.jsp文件中jstl标记的功能。因此,我能够使标准的foreach标记正常工作,但无法从servlet检索我的数组。我怀疑这与我的web.xml版本规范有关,我使用的是Tomcat7和jstl-1.2。
在我的情况下,合适的web.xml配置是什么?
我得到这个错误
类型异常报告
绝对uri的消息:[http://java.sun.com/jsp/jstl/core]无法在web.xml或与此应用程序一起部署的jar文件中解析
说明服务器遇到意外情况,无法满足请求。
例外
org.apache.jasper.jaspereException:绝对uri:[http://java.sun.com/jsp/jstl/core]无法在web.xml或与此应用程序一起部署的jar文件org.apache.jasper.compiler.defaulterrorhandler.jsperor(defaulterrorhandler.java:54)org.apache.jasper.compiler.errordispatcher.Dispatcher(errordispatcher.java:294)中解析org.apache.jasper.compiler.errordispatcher.jsperor(errordispatcher.java:81)org.apache.jasper.compiler.taglibraryinfoimpl.generatetldresourcepath(taglibraryinfoimpl.java:251)org.apache.jasper.compiler.taglibraryinfoimpl.java:122)org.apache.jasper.compiler.parser.parser.parsertaglibdirective(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.parser(parser.java:144)org.apache.jasper.compiler.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.compiler(compiler.java:391)org.apache.jasper.compiler.compiler.compiler(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:

  1. package com;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.io.*;
  5. public class MovieList extends HttpServlet {
  6. public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
  7. String [] movieList = {"movie 1","movie 2","movie 3"};
  8. request.setAttribute("movieList", movieList);
  9. RequestDispatcher view = request.getRequestDispatcher("result.jsp");
  10. view.forward(request,response);
  11. }
  12. }

my web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
  6. <web-app>
  7. <display-name>Archetype Created Web Application</display-name>
  8. <servlet>
  9. <servlet-name>Tester</servlet-name>
  10. <servlet-class>Tester</servlet-class>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>Tester</servlet-name>
  14. <url-pattern>/Tester</url-pattern>
  15. </servlet-mapping>
  16. </web-app>

非常感谢您的帮助。
我的看法

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ page isELIgnored="false" %>
  3. <table>
  4. <c:forEach items="${movieList}" var="movie">
  5. <td><c:out value="${movie}"/></td>
  6. </c:forEach>
  7. </table>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>nexnau</groupId>
  6. <artifactId>makaroni</artifactId>
  7. <version>1</version>
  8. <packaging>war</packaging>
  9. <name>makaroni Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.7</maven.compiler.source>
  15. <maven.compiler.target>1.7</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>junit</groupId>
  20. <artifactId>junit</artifactId>
  21. <version>4.11</version>
  22. <scope>test</scope>
  23. </dependency>
  24. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  25. <dependency>
  26. <groupId>javax.servlet</groupId>
  27. <artifactId>jstl</artifactId>
  28. <version>1.2</version>
  29. </dependency>
  30. <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
  31. </dependencies>
  32. <build>
  33. <finalName>makaroni</finalName>
  34. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  35. <plugins>
  36. <plugin>
  37. <artifactId>maven-clean-plugin</artifactId>
  38. <version>3.1.0</version>
  39. </plugin>
  40. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  41. <plugin>
  42. <artifactId>maven-resources-plugin</artifactId>
  43. <version>3.0.2</version>
  44. </plugin>
  45. <plugin>
  46. <artifactId>maven-compiler-plugin</artifactId>
  47. <version>3.8.0</version>
  48. </plugin>
  49. <plugin>
  50. <artifactId>maven-surefire-plugin</artifactId>
  51. <version>2.22.1</version>
  52. </plugin>
  53. <plugin>
  54. <artifactId>maven-war-plugin</artifactId>
  55. <version>3.2.2</version>
  56. </plugin>
  57. <plugin>
  58. <artifactId>maven-install-plugin</artifactId>
  59. <version>2.5.2</version>
  60. </plugin>
  61. <plugin>
  62. <artifactId>maven-deploy-plugin</artifactId>
  63. <version>2.8.2</version>
  64. </plugin>
  65. </plugins>
  66. </pluginManagement>
  67. </build>
  68. </project>

我得到这个结果
在此处输入图像描述
这就是我使用servlet得到的结果
在此处输入图像描述
我的环境
在此处输入图像描述

bkhjykvo

bkhjykvo1#

首先,我非常怀疑您是否错过了jsp文件顶部的这一点:

  1. <%@ page isELIgnored="false" %>

其次,我认为您需要将servlet从“dopost”更改为“doget”
如果它仍然不能工作,我为你做了一个演示,我希望你知道maven和git

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

如果您仍然不明白,请通过以下链接给我留言:

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

最后,我想讲一个笑话:19年前,当我第一次用c语言学习“for”时,我想放弃,因为我不懂!)
现在,我做了15年的程序员!

相关问题