为什么出现错误 "The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed"
Why getting error "The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed"
我有一个 Java 使用 Spring MVC、JSP 和 Apache Tiles 构建的 Web 应用程序。
同一个 WAR 文件在 Windows 10 和 Mac 上工作正常。
但是在 Ubuntu(Amazon AWS 上的 18.04)我收到一个错误:
org.apache.jasper.JasperException: The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed with this application
我的 pom.xml 文件具有这些与图块相关的依赖项...
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-autotag</artifactId>
<version>1.2</version>
<type>pom</type>
</dependency>
生成的 WAR 文件在 WEB-INF/lib 文件夹中包含以下 JAR 文件...
tiles-api-3.0.7.jar
tiles-autotag-core-runtime-1.2.jar
tiles-core-3.0.7.jar
tiles-jsp-3.0.7.jar
tiles-request-api-1.0.6.jar
tiles-request-jsp-1.0.6.jar
tiles-request-servlet-1.0.6.jar
tiles-servlet-3.0.7.jar
tiles-template-3.0.7.jar
另请注意,tomcat /examples
应用程序似乎运行良好。我是 linux 的新手...这可能是与 Ubuntu 相关的文件权限问题吗?
更多堆栈跟踪详细信息,以防有用...
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/f_layout.jsp'.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:986)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870)
[...]
org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/f_layout.jsp'.
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:399)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
[...]
org.apache.jasper.JasperException: The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed with this application
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:293)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:80)
org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:251)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:122)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:431)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:489)
问题原来是由于某种原因 Tomcat 不再在 Tiles JAR 文件中寻找 Tiles 库的 TLD 文件。有一种方法可以关闭 TLD 扫描器 (<Context processTlds="false" ... />
),但我的没有关闭。
我不知道我做了什么导致这种情况开始发生 -- 我对 tomcat 配置做了很少的更改。
解决此问题的解决方法是从 Tiles JAR 文件中手动复制 TLD 文件并将其复制到 /WEB-INF 文件夹。这使问题停止了,但我必须对项目中的许多其他 JAR 文件执行此操作。 (例如:在为 Tiles 做了之后,我为 SpringSecurity 得到了同样的错误)。
最后,我创建了一个新的 Ubuntu 18.04 实例并安装了 Java 和 Tomcat 的新副本,一切正常。
更新:
摆弄配置文件后,我遇到的问题很可能是由 /var/lib/tomcat8/conf/catalina.properties
...
中的这一行引起的
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
*.jar,\
[...]
...这导致所有 JAR 文件在扫描过程中被跳过。
同样的事情对我有用。我正在使用 spring boot 和 apache tiles-jsp 版本 3.0.8 编写教程。我使用以下方法提取了这个 jar 的内容:
jar xf tiles-jsp-3.0.8.jar
这将jar 的内容写入我的目录。我在 META-INF 目录中找到了 tld 文件。我将它们复制到我的 WEB-INF 目录,重新部署,错误消失了。
我有一个 Java 使用 Spring MVC、JSP 和 Apache Tiles 构建的 Web 应用程序。
同一个 WAR 文件在 Windows 10 和 Mac 上工作正常。
但是在 Ubuntu(Amazon AWS 上的 18.04)我收到一个错误:
org.apache.jasper.JasperException: The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed with this application
我的 pom.xml 文件具有这些与图块相关的依赖项...
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-autotag</artifactId>
<version>1.2</version>
<type>pom</type>
</dependency>
生成的 WAR 文件在 WEB-INF/lib 文件夹中包含以下 JAR 文件...
tiles-api-3.0.7.jar
tiles-autotag-core-runtime-1.2.jar
tiles-core-3.0.7.jar
tiles-jsp-3.0.7.jar
tiles-request-api-1.0.6.jar
tiles-request-jsp-1.0.6.jar
tiles-request-servlet-1.0.6.jar
tiles-servlet-3.0.7.jar
tiles-template-3.0.7.jar
另请注意,tomcat /examples
应用程序似乎运行良好。我是 linux 的新手...这可能是与 Ubuntu 相关的文件权限问题吗?
更多堆栈跟踪详细信息,以防有用...
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/f_layout.jsp'.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:986)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870)
[...]
org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/f_layout.jsp'.
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:399)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
[...]
org.apache.jasper.JasperException: The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed with this application
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:293)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:80)
org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:251)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:122)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:431)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:489)
问题原来是由于某种原因 Tomcat 不再在 Tiles JAR 文件中寻找 Tiles 库的 TLD 文件。有一种方法可以关闭 TLD 扫描器 (<Context processTlds="false" ... />
),但我的没有关闭。
我不知道我做了什么导致这种情况开始发生 -- 我对 tomcat 配置做了很少的更改。
解决此问题的解决方法是从 Tiles JAR 文件中手动复制 TLD 文件并将其复制到 /WEB-INF 文件夹。这使问题停止了,但我必须对项目中的许多其他 JAR 文件执行此操作。 (例如:在为 Tiles 做了之后,我为 SpringSecurity 得到了同样的错误)。
最后,我创建了一个新的 Ubuntu 18.04 实例并安装了 Java 和 Tomcat 的新副本,一切正常。
更新:
摆弄配置文件后,我遇到的问题很可能是由 /var/lib/tomcat8/conf/catalina.properties
...
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
*.jar,\
[...]
...这导致所有 JAR 文件在扫描过程中被跳过。
同样的事情对我有用。我正在使用 spring boot 和 apache tiles-jsp 版本 3.0.8 编写教程。我使用以下方法提取了这个 jar 的内容:
jar xf tiles-jsp-3.0.8.jar
这将jar 的内容写入我的目录。我在 META-INF 目录中找到了 tld 文件。我将它们复制到我的 WEB-INF 目录,重新部署,错误消失了。