Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何安装JSTL?绝对uri:http://java.sun.com/jstl/core 无法解决_Jsp_Servlets_Jstl - Fatal编程技术网

Jsp 如何安装JSTL?绝对uri:http://java.sun.com/jstl/core 无法解决

Jsp 如何安装JSTL?绝对uri:http://java.sun.com/jstl/core 无法解决,jsp,servlets,jstl,Jsp,Servlets,Jstl,我不知道我做错了什么,但我不能包括JSTL。我有jstl-1.2.jar,但不幸的是我得到了异常: org.apache.jasper.jaspereException:绝对uri:http://java.sun.com/jstl/core 无法在web.xml或与此应用程序一起部署的jar文件中解析 位于org.apache.jasper.compiler.DefaultErrorHandler.jsperor(DefaultErrorHandler.java:51) 位于org.apache

我不知道我做错了什么,但我不能包括JSTL。我有jstl-1.2.jar,但不幸的是我得到了异常:

org.apache.jasper.jaspereException:绝对uri:http://java.sun.com/jstl/core 无法在web.xml或与此应用程序一起部署的jar文件中解析
位于org.apache.jasper.compiler.DefaultErrorHandler.jsperor(DefaultErrorHandler.java:51)
位于org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
位于org.apache.jasper.compiler.ErrorDispatcher.jsperor(ErrorDispatcher.java:116)
位于org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315)
位于org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:148)
位于org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
位于org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
位于org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439)
位于org.apache.jasper.compiler.Parser.parse(Parser.java:137)
位于org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
位于org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
位于org.apache.jasper.compiler.compiler.generateJava(compiler.java:170)
位于org.apache.jasper.compiler.compiler.compile(compiler.java:332)
位于org.apache.jasper.compiler.compiler.compile(compiler.java:312)
位于org.apache.jasper.compiler.compiler.compile(compiler.java:299)
位于org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
位于org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
位于org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
位于org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
运行(Thread.java:619)
我有:

  • pom.xml

    <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>
    
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">
    
  • index.jsp

    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    <html> 
    <head></head>
    <body></body>
    </html>
    
    
    
org.apache.jasper.JasperException:绝对uri:无法在web.xml或与此应用程序一起部署的jar文件中解析

该URI是针对JSTL 1.0的,但实际上您使用的是JSTL 1.2,它使用带有附加
/jsp
路径的URI(因为发明EL表达式的JSTL自1.1版起就集成为jsp的一部分,以便在普通jsp中共享/重用EL逻辑)

因此,根据以下内容相应地修复标记库URI:

非Maven用户可以通过将以下两个物理文件放到WEB应用程序项目的
/WEB-INF/lib
文件夹中来实现同样的效果(绝对不要将standard*.jar或任何松散的.tld文件放到其中!必要时删除它们)

  • (这是EE4J的JSTL 2.0 impl)
  • (这是JSTL2.0API)
在Tomcat 9上安装JSTL- 如果您还没有使用Tomcat 10,但仍然使用Tomcat 9或更高版本,请通过此sole依赖项使用JSTL 1.2:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>1.2.6</version>
</dependency>
确保web.xml版本正确 此外,您还应该确保您的
web.xml
声明至少符合Servlet2.4,因此不是Servlet2.3或更早版本。否则JSTL标记中的EL表达式将无法工作。选择与目标容器匹配的最高版本,并确保在
web.xml
中的任何位置都没有
。下面是一个与Servlet 5.0(Tomcat 10)兼容的示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0">

    <!-- Config here. -->

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    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"
    version="4.0">

    <!-- Config here. -->

</web-app>

下面是一个与Servlet 4.0(Tomcat 9)兼容的示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0">

    <!-- Config here. -->

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    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"
    version="4.0">

    <!-- Config here. -->

</web-app>

另见:
  • (对于右侧标记库URI)

    • @BalusC是完全正确的,但如果您仍然遇到此异常,则表示您做错了什么。您将在SO页面上找到最重要的信息

      基本上,这是处理此异常所需操作的摘要

    • 检查web.xml中的servlet版本:

    • 检查此servlet版本是否支持JSTL版本:servlet版本2.5使用JSTL 1.2或servlet版本2.4使用JSTL 1.1

    • servlet容器必须具有适当的库,或者必须手动将其包含在应用程序中。例如:JSTL 1.2需要JSTL-1.2.jar

    • 如何使用Tomcat 5或6:

      您需要将适当的jar包含到WEB-INF/lib目录中(它只适用于您的应用程序)或tomcat/lib目录中(适用于所有应用程序)

      最后一件事是jsp文件中的标记库。对于JSTL 1.2,正确的一点是:

      
      
      jstl-1.2.jar-->
      jstl-1.1.jar-->
      
      另外,请检查您添加了
      javax.servlet.jar
      javax.servl的依赖jar
      
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
      jstl-1.2.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      jstl-1.1.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
      
          <dependency>
              <groupId>jstl</groupId>
              <artifactId>jstl</artifactId>
              <version>1.2</version>
          </dependency>
      
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      </dependency>
      
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
      rightclick on project->Properties->Deployment Assembly->add Maven Dependencies
      
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
      
      <dependency>
          <groupId>jakarta.servlet.jsp.jstl</groupId>
          <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
          <version>1.2.7</version>
      </dependency>
      <dependency>
          <groupId>org.glassfish.web</groupId>
          <artifactId>jakarta.servlet.jsp.jstl</artifactId>
          <version>1.2.6</version>
      </dependency>
      
      <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId><version>1.2</version>
      </dependency>