jsp - 无法使用 Servlet 3.1 使用 JSTL 1.2 获得 Tomcat 8.0

标签 jsp spring-boot jstl tomcat8 servlet-3.1

我已经通读了关于这个问题的几乎所有答案,并尝试了十几种不同的“解决方案”,但我无法让 JSTL 在 Tomcat 8.0 中使用 servlet 3.1 的 Spring boot web 应用程序中工作。我继续收到此错误:

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.

我使用 Maven 构建项目,但也手动复制了 JAR,希望能有所帮助,但遗憾的是,它没有!我希望我只是忽略了一些愚蠢的事情。有人可以告诉我我做错了什么吗??

我已经尝试过的事情(对于所有这些,这是一个简单的 index.jsp 文件中包含的行 -

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  1. 向我的 pom.xml 添加了以下依赖项(删除了 XML 字符以更好地格式化)

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

    这会将 jSTL-1.2.jar 放入我的 WEB-INF/lib 目录中,并且当我部署到 Tomcat 时我已经确认它在那里 - 这不起作用

  2. 根据此处的建议删除了上述依赖项并添加了这些依赖项 (http://www.murraywilliams.com/2011/11/running-jstl-1-2-on-tomcat-7-using-maven/)

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <version>1.2</version>
        <exclusions>
            <exclusion>
                <artifactId>servlet-api</artifactId>
                <groupId>javax.servlet</groupId>
           </exclusion>
            <exclusion>
                <artifactId>jsp-api</artifactId>
                <groupId>javax.servlet.jsp</groupId>
           </exclusion>
       </exclusions>
    </dependency>
    

    这会在我的 WEB-INF/lib 目录中放置两个额外的 JAR 文件,一个 jSTL-api-1.2.jar 和 jSTL-impl-1.2.jar,我已经确认它们在我部署到 Tomcat 时就在那里 - 这不会'工作

  3. 我还尝试将每个依赖项的范围更改为“已提供”,同时将相应的 JAR 放入 Tomcat 的 lib 目录并重新启动 Tomcat,但仍然无法正常工作。

这是我的 web.xml header

<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_3_1.xsd"
         version="3.1">

无论如何,非常感谢任何帮助!

最佳答案

尝试检查 Tomcat 的 catalina.properties 文件。找到名为 tomcat.util.scan.StandardJarScanFilter.jarsToScan 的设置。添加 taglib jar 的名称。在我的例子中,我添加了 taglibs*.jar 因为我的 jar 被称为 taglibs-standard-impl-1.2.5.jartaglibs-standard-spec-1.2 .5.jar.

如果 catalina.propertiesjarsToSkip 设置中有很多 jar,可能找不到标签库,因此将它们添加到 jarsToScan 可以修复它。 Tomcat高手,理解有误请指正。但是,这已经为我解决了。

关于jsp - 无法使用 Servlet 3.1 使用 JSTL 1.2 获得 Tomcat 8.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32546697/

相关文章:

javascript - Struts2:在没有 JavaScript 的情况下根据下拉值自动填充字段

python - SQL语句语法错误: UPDATE for Python 3. 6

java - 如何配置spring拦截器以在每个请求中调用

eclipse - 如何消除 Eclipse 中的 TagExtraInfo JSTL 警告?

java - 如何测试jsp属性类型

java - 关于 request.getParameter 和 JSTL

java - JSP和servlet不响应转发

java - 通过 <a href> 和 jSTL 标记将参数从 JSTL 传递到 servlet

java - 有 getter 时没有 Getter Method Error

spring-boot - spring boot 1.3如何在Interceptor preHandle方法中获取方法信息