自分が間違ったことをしたことはわかりませんが、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>
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>
web.xml
サンプル用)@BalusCは完全に正しいです、しかしあなたがまだこの例外に遭遇するならば、それはあなたが間違ったことをしたことを意味します。あなたが見つける最も重要な情報はSO JSTL Tag Info ページにあります。
基本的にこれはこの例外を処理するためにあなたがする必要があることの要約です。
Web.xmlでサーブレットのバージョンを確認します。<web-app version="2.5">
このサーブレットバージョンでJSTLバージョンがサポートされているかどうかを確認します。サーブレットバージョン2.5ではJSTL 1.2またはサーブレットバージョン2.4ではJSTLが使用されます。 1.1
サーブレットコンテナには適切なライブラリがあるか、またはアプリケーションに手動で含める必要があります。たとえば、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" %>
この種のエラーには別の理由があります。私の場合、誰かがログ警告メッセージを避けるためにconf/catalina.properties
設定Tomcat.util.scan.StandardJarScanFilter.jarsToSkip
プロパティを*
に設定し、それによってTomcatによる必要なスキャンをスキップしました。これをTomcatのデフォルトに戻し、スキップするjarの適切なリストを追加することで(jstl-1.2またはspring-webmvcは含まれません)問題は解決しました。
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.jar
とjavax.servlet.jsp.jstl-1.2.1.jar
を追加したか、またはあなたのWEB-INF/libフォルダーにないかどうかの依存関係jarをチェックしてください。私の場合、これら二つは問題を解決しました。
このディレクティブをあなたのページに追加してください:<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
JARファイルをWEB-INF/libフォルダに貼り付けます。これでうまくいくはずです。 (それは私のために働きました。)
jstl-1.2.jar
をTomcat/lib
フォルダーに追加します。
これにより、あなたの依存関係のエラーが再び修正されます。
私は、pom.xmlのMaven依存関係が間違っていると述べました。そのはず
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
この問題に対して見つけた修正を追加したいだけです。なぜこれがうまくいったのかわかりません。正しいバージョンの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タグを削除して修正するかどうか確認してください。私が言ったようにそれは私のために働いた。
MAVENとSpringツールを完全に無効にしました。そして私は自分の環境を正しく動作させるために次のjarファイルを追加しなければなりませんでした。
最悪の事態はjstl-api-1.2.jar
とjavax-servlet.jsp.jst-api-1.2.1.jar
でした。彼らはただしなかった動作します。
jstl-1.2.jar
はうまくいきました。
Springブートを使用する場合、server.Tomcat.additional-tld-skip-patterns=*.jar
があれば、Application.properties
から削除することを検討してください
Eclipseで同様の問題が修正されました。
rightclick on project->Properties->Deployment Assembly->add Maven Dependencies
pom.xmlを編集している間に、何かが前にそれを開始しました
必要なjarファイル、taglib uri、web.xmlはすべて問題ありませんでした
この質問のすべての答えが私を助けてくれましたが、後世のためにいくつかの追加情報を加えたいと思いました。
gwt-test-utils
パッケージをもたらしたgwt-dev
へのテスト依存性があることがわかりました。残念ながらgwt-dev
にはJetty、JSP、JSTLなどの完全なコピーが含まれています。これはクラスパス上の適切なパッケージより進んでいました。だから私はJSTL 1.2に適切な依存関係があったとしても、それはgwt-dev
の内部の1.0バージョンをロードするでしょう。つぶやく。
私にとっての解決策はテストスコープで実行しないことでしたので、実行時にgwt-test-utils
パッケージを拾いません。他の方法でクラスパスからgwt-dev
パッケージを削除しても問題は解決します。