web-dev-qa-db-ja.com

JSTLのインストール方法絶対URI:http://Java.Sun.com/jstl/coreを解決できません

自分が間違ったことをしたことはわかりませんが、JSTLを含めることはできません。 jstl-1.2.jarがありますが、残念ながら例外が発生します。

org.Apache.jasper.JasperException: The absolute uri: http://Java.Sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    at org.Apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.Java:51)
    at org.Apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.Java:409)
    at org.Apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.Java:116)
    at org.Apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.Java:315)
    at org.Apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.Java:148)
    at org.Apache.jasper.compiler.Parser.parseTaglibDirective(Parser.Java:429)
    at org.Apache.jasper.compiler.Parser.parseDirective(Parser.Java:492)
    at org.Apache.jasper.compiler.Parser.parseElements(Parser.Java:1439)
    at org.Apache.jasper.compiler.Parser.parse(Parser.Java:137)
    at org.Apache.jasper.compiler.ParserController.doParse(ParserController.Java:255)
    at org.Apache.jasper.compiler.ParserController.parse(ParserController.Java:103)
    at org.Apache.jasper.compiler.Compiler.generateJava(Compiler.Java:170)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:332)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:312)
    at org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:299)
    at org.Apache.jasper.JspCompilationContext.compile(JspCompilationContext.Java:586)
    at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:317)
    at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:342)
    at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
    at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)
    at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:233)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:191)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:128)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:293)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:849)
    at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:583)
    at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:454)
    at Java.lang.Thread.run(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.xml

    <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>
    
120
lukastymo

org.Apache.jasper.JasperException:絶対URI: http://Java.Sun.com/jstl/core web.xmlまたはこのアプリケーションでデプロイされたjarファイルのいずれでも解決できません

そのURIはJSTL 1.0用ですが、実際には追加の/jspパスを持つURIを使用するJSTL 1.2を使用しています(EL式を発明したJSTLはELロジックを共有/再利用するためにJSPの一部として統合されたバージョン1.1以降だったため)プレーンJSPでも)。

そのため、taglib URIを適宜修正してください。

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>

さらにあなたのPOMはtaglibs:standardを通してApacheのJSTL 1.1実装も指定します。 JSTL 1.2 API +が javax.servlet:jstl でバンドルされている場合は、これは不要で危険です。1.1と1.2は明らかに互いに競合するためです。 TomcatをターゲットにしたWebアプリケーションにJSTLをインストールするには、onlyだけを実行する必要があります(do。 Tomcatは実際にはそのまま提供していないので、not<scope>providedに設定します。

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

Maven以外のユーザーは、Webアプリケーションプロジェクトの/WEB-INF/libフォルダーに単一の jstl-1.2.jar ファイルをドロップすることで同じことを実現できます(donotそこにstandard.jarまたは任意の緩い.tldファイルをドロップします。

TomcatやJettyなどの必要最低限​​のサーブレットコンテナではなく、WildFlyやPayaraなどの通常のJava EEサーバを実際に使用している場合は、JSTLを明示的にインストールする必要はまったくありません。通常のJava EEサーバーは既にJSTLを提供しています。つまり、JSTLをpom.xmlに追加したり、Webアプリケーション内のJAR/TLDファイルを削除したりする必要はありません。 providedスコープのJava EE座標だけで十分です。

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version><!-- 8.0, 7.0, etc depending on your server --></version>
    <scope>provided</scope>
</dependency>

さらにあなたのweb.xmlがconform 少なくともサーブレット2.4であると宣言されていることを確認してください。したがってサーブレット2.3またはそれ以前のものではありません。そうでなければ、JSTLタグ内のEL式は順番に動作しません。あなたのターゲットコンテナに一致する最も高いバージョンを選び、あなたがあなたの<!DOCTYPE>のどこにもweb.xmlを持っていないことを確認してください。これがServlet 4.0(Tomcat 9)互換の例です。

<?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>

また見なさい:

169
BalusC

@BalusCは完全に正しいです、しかしあなたがまだこの例外に遭遇するならば、それはあなたが間違ったことをしたことを意味します。あなたが見つける最も重要な情報はSO JSTL Tag Info ページにあります。

基本的にこれはこの例外を処理するためにあなたがする必要があることの要約です。

  1. Web.xmlでサーブレットのバージョンを確認します。<web-app version="2.5">

  2. このサーブレットバージョンでJSTLバージョンがサポートされているかどうかを確認します。サーブレットバージョン2.5ではJSTL 1.2またはサーブレットバージョン2.4ではJSTLが使用されます。 1.1

  3. サーブレットコンテナには適切なライブラリがあるか、またはアプリケーションに手動で含める必要があります。たとえば、JSTL 1.2ではjstl-1.2.jarが必要です。

Tomcat 5または6をどうするか:

あなたのWEB-INF/libディレクトリ(それはあなたのアプリケーションに対してのみ機能する)またはTomcat/lib(すべてのアプリケーションに対してグローバルに機能する)に適切なjarファイルを含める必要があります。

最後のものはあなたのjspファイルのtaglibです。 JSTL 1.2では正しいものはこれです。

<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
36
lukastymo

この種のエラーには別の理由があります。私の場合、誰かがログ警告メッセージを避けるためにconf/catalina.properties設定Tomcat.util.scan.StandardJarScanFilter.jarsToSkipプロパティを*に設定し、それによってTomcatによる必要なスキャンをスキップしました。これをTomcatのデフォルトに戻し、スキップするjarの適切なリストを追加することで(jstl-1.2またはspring-webmvcは含まれません)問題は解決しました。

14
resnbl
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" %>

また、あなたがjavax.servlet.jarjavax.servlet.jsp.jstl-1.2.1.jarを追加したか、またはあなたのWEB-INF/libフォルダーにないかどうかの依存関係jarをチェックしてください。私の場合、これら二つは問題を解決しました。

13
streethawk
  1. ダウンロード jstl-1.2.jar
  2. このディレクティブをあなたのページに追加してください:<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>

  3. JARファイルをWEB-INF/libフォルダに貼り付けます。これでうまくいくはずです。 (それは私のために働きました。)

9

jstl-1.2.jarTomcat/libフォルダーに追加します。

これにより、あなたの依存関係のエラーが再び修正されます。

6
Hadi Rasouli

私は、pom.xmlのMaven依存関係が間違っていると述べました。そのはず

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
3
LoBo

この問題に対して見つけた修正を追加したいだけです。なぜこれがうまくいったのかわかりません。正しいバージョンのjstl(1.2)と正しいバージョンのservlet-api(2.5)がありました。

<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" %>

私にとってこの問題を修正したのは、jstl 1.2の依存関係のためにpomのxmlファイルからscopeタグを削除することでした。なぜそれが修正されたのかわからないが、万が一のためにJPAとHibernateのチュートリアルで誰かが春をやっていてpomが設定されている場合は、scopeタグを削除して修正するかどうか確認してください。私が言ったようにそれは私のために働いた。

3
gnattyp

MAVENとSpringツールを完全に無効にしました。そして私は自分の環境を正しく動作させるために次のjarファイルを追加しなければなりませんでした。

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar(この修正を見つけるのは難しいですが、他のorg.springframework <3.version>は動作しませんでした。
  • spring-context-4.0.3.RELEASE.jar
  • spring-core-4.0.3.RELEASE.jar
  • spring-expression-4.0.3.RELEASE.jar
  • spring-web-4.0.3.RELEASE.jar
  • spring-webmvc-4.0.3.RELEASE.jar
  • jstl-1.2.jar

最悪の事態はjstl-api-1.2.jarjavax-servlet.jsp.jst-api-1.2.1.jarでした。彼らはただしなかった動作します。

jstl-1.2.jarはうまくいきました。

2
Siddharth

Springブートを使用する場合、server.Tomcat.additional-tld-skip-patterns=*.jarがあれば、Application.propertiesから削除することを検討してください

0
Askar

Eclipseで同様の問題が修正されました。

rightclick on project->Properties->Deployment Assembly->add Maven Dependencies

pom.xmlを編集している間に、何かが前にそれを開始しました

必要なjarファイル、taglib uri、web.xmlはすべて問題ありませんでした

0
w3Charlie

この質問のすべての答えが私を助けてくれましたが、後世のためにいくつかの追加情報を加えたいと思いました。

gwt-test-utilsパッケージをもたらしたgwt-devへのテスト依存性があることがわかりました。残念ながらgwt-devにはJetty、JSP、JSTLなどの完全なコピーが含まれています。これはクラスパス上の適切なパッケージより進んでいました。だから私はJSTL 1.2に適切な依存関係があったとしても、それはgwt-devの内部の1.0バージョンをロードするでしょう。つぶやく。

私にとっての解決策はテストスコープで実行しないことでしたので、実行時にgwt-test-utilsパッケージを拾いません。他の方法でクラスパスからgwt-devパッケージを削除しても問題は解決します。

0
Gray