15

埋め込まれた Jetty インスタンス内で実行される Web アプリケーションを作成しています。

JSTL ステートメントを実行しようとすると、次の例外が発生します。

org.apache.jasper.JasperException: /index.jsp(1,63) PWC6188: 絶対 uri: http://java.sun.com/jsp/jstl/coreを web.xml または jar ファイルで解決できませんこのアプリケーションでデプロイされた

クラスパスに次のjarがあります

  • ant-1.6.5.jar
  • ant-1.7.1.jar
  • ant-launcher-1.7.1.jar
  • コア-3.1.1.jar
  • jetty-6.1.22.jar
  • jetty-util-6.1.22.jar
  • jsp-2.1-6.1.14.jar
  • jsp-api-2.1.jar
  • jstl-1.2.jar
  • サーブレット-api-2.5-20081211.jar
  • サーブレット-api-2.5-6.1.14.jar
  • 標準-1.1.2.jar

私の web.xml は次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?>  
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee h77p://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
    version="2.4">  
    <display-name>test</display-name>  
</web-app>

私のコードは次のようになります。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<html>  
    <body>  
        <h2>Hello World!</h2>  
        <%= new java.util.Date() %><br/>  
        ${1+2}<br/>  
        <c:out var="${5+9}"/><br/>  
    </body>  
</html>

組み込みの Jetty サーバーを次のように起動しました。

Server server = new Server(80);  
WebAppContext context = new WebAppContext("pig-1.0-SNAPSHOT.war","/");
server.addHandler(context);
server.start();

過去 2 日間、jar ファイル、web.xml 構成、およびタグ ライブラリ宣言のさまざまな組み合わせを試してみましたが、役に立ちませんでした。

JSTL を完全にサポートする組み込み Jetty サーバーを稼働させるにはどうすればよいですか?

4

10 に答える 10

8

jetty:runを使用するときにデフォルトとしてプッシュされたJetty 8.0には、サーブレットAPI3.0があります。そのバージョンの標準の時点では、JSTL標準が含まれているはずであり、これらのtaglibはwebappクラスパスに含めることはできず、標準クラスパスのみに含めることができます。しかし、8.0.0.M0はそれらを含めるのを忘れていました。

7.1.4.v20100610を指定すると役に立ちました。

于 2010-07-03T18:13:09.123 に答える
8

jstl taglibs はサーバークラスパス上にある必要があります。サーバーを起動する前に、現在のクラスローダー チェーンにクラスローダーを追加できます。これは、jetty サーバーを起動するときに start.jar によって使用される原則です。

ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
URL urlTaglibs = new File(PATH_TO_TAGLIBS).toURI().toURL();
URLClassLoader newClassLoader = new URLClassLoader(new URL[]{urlTaglibs},currentClassLoader);
Thread.currentThread().setContextClassLoader(newClassLoader);

server.start();

これを java start コマンドライン引数にも追加する必要があります。

于 2012-10-11T23:29:27.880 に答える
5
  • jstl-1.2.jar
  • 標準-1.1.2.jar

これが衝突します。を取り外しますstandard-1.1.2.jarstandard-1.1.2.jar のみで使用してjstl-1.1.2.jarください。JSTL 1.2 以降、標準 JAR は JSTL JAR にマージされ、1 つのjstl-1.2.jarファイルになりました。

于 2010-01-28T11:56:52.497 に答える
3

@DrewありがとうDrew。それはうまくいきます。私はこれをグーグルしていて、ここに行き着きました。私の間違いは何でしたか:私は使用していました

                 <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>jstl</artifactId>
                     <version>1.1.2</version>
                     <scope>provided</scope>
                </dependency>

上からに変更しました

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

そしてそれは機能し始めました。また、削除したjstls依存関係を使用していました。

于 2010-09-03T19:57:15.700 に答える
3

Jetty 7 でも同じ問題が発生しました。Jetty で TLD を検索できるようにすることで解決しました。

コンテキストに属性を設定することでそれを行いました:

Server server = new Server(80);  
WebAppContext context = new WebAppContext("pig-1.0-SNAPSHOT.war","/");
context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", 
    ".*/.*jsp-api-[^/]*\\.jar$|.*/.*jsp-[^/]*\\.jar$|.*/.*taglibs[^/]*\\.jar$");
server.addHandler(context);
server.start();

詳細については、 http: //wiki.eclipse.org/Jetty/Howto/Configure_JSP#Using_JSTL_Taglibs_for_Jetty_7.x_and_8.x を参照してください 。

私のプロジェクト(mavenを使用)では、標準TLDがJAR「org.apache.taglibs.standard.glassfish-1.2.0.v2011120803.jar」にあり、理論的には ContainerIncludeJarPattern の値として次のパターンを使用するだけで十分です:

".*/org\\.apache\\.taglibs\\.standard\\.glassfish-1\\.2\\.0\\.v201112081803\\.jar"

これは実際に機能し、jetty がタグ ライブラリを見つけた場所の確認ですが、上記のリンク先の wiki.eclipse.org ページで見つけた以前のパターンを残すことを好みました。

カスタム タグ ライブラリを含める場合は、パターンの拡張が必要になる場合があります。

于 2013-09-20T16:22:37.027 に答える
1

二段階:</p>

1)サーバーのアノテーションサポートを追加

// web.xml と jetty-env.xml の jndi 関連部分の解析を有効にします。#server は

org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration");
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration", "org.eclipse.jetty.annotations.AnnotationConfiguration");

2) WebAppContext に follow 属性を追加します

context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/org.apache.taglibs.taglibs-standard-impl-.*\\.jar$");
于 2016-08-11T06:10:55.027 に答える
0

私も同じ問題を抱えていました。以下のコードを追加して修正しました。

public static final String[] TLD_JAR_NAMES = new String[]{"sitemesh", "spring-webmvc", "shiro-web", "springside-core"};
...
JettyFactory.setTldJarNames(server, TLD_JAR_NAMES);

多分あなたはそれを試すことができます。TLD_JAR_NAMES を実際の TLD Jar 名に置き換えてください。

于 2013-06-16T04:32:12.400 に答える
0

web.xml で、「h77p://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd」を「http://」で始まるように変更して、エラーが修正されるかどうかを確認してください。

ただし、JSP で jetty-maven-plugin と JSTL taglib ヘッダーを使用したときに同じエラーが発生したため、それが根本的な原因ではない可能性があります。

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

PWC6188: 絶対 uri: http://java.sun.com/jsp/jstl/core は、web.xml またはこのアプリケーションでデプロイされた jar ファイルで解決できません

SpringSource Tool Suite のすぐに使用できる Spring MVC テンプレートを使用しているため、Jetty の Maven プラグインがそれをチョークする理由がわかりません。

<build>
   <plugins>
      <plugin>
         <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-maven-plugin</artifactId>
      </plugin>
   </plugins>
</build>
<repositories>
     <repository>
       <id>maven2-repository.dev.java.net</id>
       <name>Java.net Repository for Maven</name>
       <url>http://download.java.net/maven/2/</url>
       <layout>default</layout>
     </repository>
</repositories>

上記の提案であった taglibs:standard:1.1.2 が廃止されたため、私の POM の依存関係には javax.servlet:jstl:1.2 のみがリストされています。

于 2010-04-17T01:18:56.280 に答える