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


134

私が誤って何をしたのかはわかりませんが、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>
    

4
私は、jstlの横にもtaglibs依存性を追加する必要があり、うまくいきました。
Christian Vielma 2013年

回答:


193

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はバージョン1.1以降、JSPの一部として統合され、ELロジックを共有/再利用するためです)プレーンなJSPも)。

したがって、JSTLドキュメントに基づいてtaglib URIを修正します

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

さらに、複数の異なるバージョンのJSTL JARファイルを一緒にランタイムクラスパスにスローしないように絶対に確認する必要があります。これは、Tomcatユーザーの間でよくある間違いです。Tomcatの問題は、そのままではJSTLを提供しないため、手動でインストールする必要があることです。これは、通常のJava EEサーバーでは必要ありません。Java EEとは正確には何ですか?も参照してください

特定のケースでは、pom.xmlは基本的にjstl-1.2.jarとstandard-1.1.2.jarが一緒にあることを通知します。これは間違っています。基本的に、OracleのJSTL 1.2 API + implとApacheのJSTL 1.1 implを混合しています。を削除する必要がありますstandard-xxx.jar。ただ、唯一のjstl-1.2.jar十分です。

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

Maven以外のユーザーは、Webアプリケーションプロジェクトのフォルダーに物理jstl-1.2.jarファイルをドロップすることで同じことを達成でき/WEB-INF/libます(standard.jarまたはゆるい.tldファイルは絶対にドロップしないでください!)。必要に応じて削除してください。

Tomcat、Jettyなどのベアボーンサー​​ブレットコンテナーの代わりに、WildFly、Payaraなどの通常のJava EEサーバーを実際に使用している場合、JSTLを明示的にインストールする必要はありません。通常のJava EEサーバーはすでにJSTLを提供しています。つまり、JSTLをpom.xmlwebapp に追加したり、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>

さらに、サーブレット2.3以降ではなく、少なくともサーブレット2.4にweb.xml準拠ていることを宣言する必要もあります。そうしないと、JSTLタグ内のEL式が機能しなくなります。ターゲットコンテナに一致する最も高いバージョンを選択し、に<!DOCTYPE>場所がないことを確認してくださいweb.xml。サーブレット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>

以下も参照してください。


/ jspに変更しました:org.apache.jasper.JasperException:絶対URI:java.sun.com/jsp/jstl/coreはどちらのweb.xmlでも解決できません...
lukastymo

4
それからあなたのクラスパスは混乱です。それをクリーンアップします。Mavenが何をしているか、スマートかどうかはわかりませんが、JSTL 1.2 ではtaglib 必要ありませんstandard。詳細については、タグ情報ページをご覧ください。
BalusC、2011

4
私はあなたがまとめたJSTL wikiページが本当に好きです。ただし、この質問は特定のエラーメッセージに対するGoogleからのトップヒットであるため、自由に編集して、「非jsp」URIはJSTL 1.0からのものであることに注意してください。
kdgregory 2012年

2
@kdgregory:ありがとうございました:)
BalusC 2012年

1
あなたはGradleのを使用している場合、この依存関係を追加:compile('javax.servlet:jstl:1.2')
benscabbia

36

@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をどうするか:

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

最後のものは、jspファイルのtaglibです。JSTL 1.2の場合、正しいものは次のとおりです。

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

3
この質問は非常に人気がある(多くの視聴者)ことに気づきました。だからこそ、この問題に対処する方法を短いチュートリアルで書くことにしました
lukastymo

17

このタイプのエラーの別の理由を発見しました。私の場合、誰かがconf/catalina.properties設定tomcat.util.scan.StandardJarScanFilter.jarsToSkipプロパティを設定し*て警告メッセージをログに記録しないようにして、Tomcatによる必要なスキャンをスキップしました。これをTomcatのデフォルトに変更し、スキップするjarの適切なリスト(jstl-1.2またはspring-webmvcを含まない)を追加すると、問題が解決しました。


はい!。私も。誰か(=自分)をいくつかの点プットのtomcat.util.scan.StandardJarScanFilter.jarsToSkip=*catalina.propertiesにあるファイル(誤解?)Tomcatをスピードアップするための試みの時間を起動します。ああ!
peterh 2016

:私は、TLDのとWebフラグメントjarを回避jarsToSkipリストを作成するには、以下のスクリプトを使用しpastebin.com/3Bfm1u6K
Moreaki

1
jarsToSkip設定を変更したくない場合は、jarsToScanその下にの設定を上書きする設定がありますjarsToSkip。taglibs とのように、最終的にに追加taglibs*.jarjarsToScanれました。taglibs-standard-impl-1.2.5.jartaglibs-standard-spec-1.2.5.jar
jabe

1
これは私のために働いた答えです。でconf/catalina.properties、に変更tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jartomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jarて修正しました。
ゲーリーS.

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

また、WEB-INF / libフォルダーに追加したjavax.servlet.jarjavax.servlet.jsp.jstl-1.2.1.jarまたはWEB-INF / libフォルダーにない依存性jarを確認してください。私の場合、これらの2つは問題を解決しました。


あなたは[ここに質問を見てくださいすることができstackoverflow.com/questions/44039706/...
Kasun Siyambalapitiya


10
  1. jstl-1.2.jarをダウンロード
  2. このディレクティブをページに追加します。 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

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


3

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

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

興味深いことに、mavenでjstlを検索すると、mvnrepository.com / artifact / javax.servlet.jsp.jstl / jstl / 1.2この依存関係をどのようにして見つけましたか?
Koray Tugay

3

この問題に対して見つけた修正を追加したいだけです。これがうまくいった理由はわかりません。正しいバージョンの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ファイルからスコープタグを削除したためです。なぜそれがそれを修正したのかわからないが、誰かがJPAとHibernateチュートリアルでmultiplesightで春をやっていて、pomをこのようにセットアップしている場合に備えて、scopeタグを削除して、それが修正されるかどうかを確認してください。私が言ったようにそれは私のために働いた。


2

MAVENおよびSpringツールを完全に無効にしました。また、環境を正しく機能させるために、次のjarを追加する必要がありました。

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar(この修正を見つけるのは難しいですが、他のorg.springframework <3.versions>は機能しませんでした。
  • 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 うまくいきました。


1
+1何時間も頭を壁にぶつけた後、jstl-1.2代わりにを使ったのjstl-1.2.1ですが、なぜかはわかりません。
avojak 2018年

1

Springブートを使用server.tomcat.additional-tld-skip-patterns=*.jarしているApplication.properties場合は、削除することを検討してください。


0

この質問の回答はすべて役に立ちましたが、後世のためにいくつかの追加情報を追加すると思いました。

gwt-test-utilsどれがgwt-devパッケージを取り込むかについて、テストの依存関係があることがわかりました。残念ながらgwt-dev、Jetty、JSP、JSTLなどの完全なコピーが含まれています。これは、クラスパス上の適切なパッケージの前にありました。したがって、JSTL 1.2に適切な依存関係があったとしても、1.0の内部をにロードしていましたgwt-dev。愚痴。

私の解決策は、テストスコープgwt-test-utilsで実行しないようにすることで、実行時にパッケージを取得しないようにしました。gwt-dev他の方法でクラスパスからパッケージを削除すると、問題が修正されます。


0

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

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

以前にpom.xmlを編集していたときに、何かが追い出されました

すべての必要なjarファイルがあり、taglib uriとweb.xmlは大丈夫でした


0

2020年の答え

質問はまだ非常に人気がありますが、すべての回答は非常に古くなっています。すべてのJava EEコンポーネントはさまざまなJakartaプロジェクトに分割され、JSTLも例外ではありません。したがって、今日の正しいMaven依存関係は次のとおりです。

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

はい、バージョンとgroupIdは一致しませんが、それはプロジェクトの現在の状態の癖です


はい、しかしこれは私の問題を解決しませんが、閉じます、tomcat10では、2つのライブラリが必要です* taglibs-standard-impl-1.2.5-migrated-0.0.1.jar * taglibs-standard-spec-1.2.5-migrated- 0.0.1.jarこのlibは、tomcat10サンプルwebappsから取得できます。TLDファイルがそこにあるため、taglibs-standard *もスキャンしません。これは、webapp META-CONF libのcontext.xmlで無効にできます
Jasonw


-1

私は同じ問題を抱えていましたが、他の人が同じ問題を経験した場合に備えて、Eclipseを使用してい
ます:EclipseでTomcatサーバーをダブルクリックし、サーバーを
停止し
て「公開しないサーバーモジュール」でサーバーを
起動します。

ここに画像の説明を入力してください


-2

以下を選択することにより、IBM RAD 7.5での同様の問題を解決しました。

  1. プロジェクトのプロパティ
  2. プロジェクトファセット
  3. JSTLチェックボックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.