簡體   English   中英

為什么會出現錯誤“絕對 uri:[http://tiles.apache.org/tags-tiles] 無法在 web.xml 或部署的 jar 文件中解析”

[英]Why getting error “The absolute uri: [http://tiles.apache.org/tags-tiles] cannot be resolved in either web.xml or the jar files deployed”

我有一個用 Spring MVC、JSP 和 Apache Tiles 構建的 Java Web 應用程序。

相同的 WAR 文件在 Windows 10 和 Mac 上運行良好。

但是在 Ubuntu(亞馬遜 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 tile-jsp 3.0.8 版的教程。 我使用以下方法提取了這個 jar 的內容:

jar xf tiles-jsp-3.0.8.jar

這將 jar 的內容寫入我的目錄。 我在 META-INF 目錄中找到了 tld 文件。 我將它們復制到我的 WEB-INF 目錄,重新部署,錯誤消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM