1

Tomcat または Jboss の deploy フォルダーにデプロイするだけで正常に動作する Web アプリケーションがあります。私が今やろうとしているのは、このアプリケーションを Jetty コンテナーに埋め込むことです。JSTL タグ ライブラリに関連するエラーが吐き出されているため、動作しないようです。表示されるエラーは次のとおりです。

Problem accessing /Web/app/localTimestamp. Reason:

    /WEB-INF/views/localTimestamp.jsp(1,62) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

Caused by:

org.apache.jasper.JasperException: /WEB-INF/views/localTimestamp.jsp(1,62) PWC6188: The absolute uri: http://java.sun.com/jsp/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:92)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:172)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:431)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:240)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:502)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1652)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:145)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:575)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:485)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:537)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:412)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:271)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:98)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:575)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:485)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:519)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:412)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
    at org.eclipse.jetty.server.Server.handle(Server.java:351)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:451)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:916)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:611)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:619)

jstl jar ファイルを取得できない理由がわかりません。Web アプリケーションの WEB-INF/lib フォルダーにある jar ファイルは次のとおりです。

   19/06/2012  14:54            62,983 activation-1.1.jar
   19/06/2012  14:53             4,467 aopalliance-1.0.jar
   19/06/2012  14:57            59,590 commons-fileupload-1.2.2.jar
   19/06/2012  14:57           163,151 commons-io-2.1.jar
   19/06/2012  14:54           207,723 commons-lang-2.1.jar
   19/06/2012  14:53            60,686 commons-logging-1.1.1.jar
   19/06/2012  14:54           104,172 jaxb-api-2.2.jar
   19/06/2012  14:54           872,831 jaxb-impl-2.2.jar
   19/06/2012  14:57           414,240 jstl-1.2.jar
   19/06/2012  14:53           367,444 log4j-1.2.14.jar
   19/06/2012  14:53            17,384 slf4j-api-1.5.2.jar
   19/06/2012  14:53             9,501 slf4j-log4j12-1.5.2.jar
   19/06/2012  14:53           331,474 spring-aop-3.1.0.RELEASE.jar
   19/06/2012  14:53            53,079 spring-asm-3.1.0.RELEASE.jar
   19/06/2012  14:53           589,253 spring-beans-3.1.0.RELEASE.jar
   19/06/2012  14:53           829,601 spring-context-3.1.0.RELEASE.jar
   19/06/2012  14:53           106,819 spring-context-support-3.1.0.RELEASE.jar
   19/06/2012  14:53           442,400 spring-core-3.1.0.RELEASE.jar
   19/06/2012  14:53           176,283 spring-expression-3.1.0.RELEASE.jar
   19/06/2012  15:04            61,379 spring-oxm-3.0.6.RELEASE.jar
   19/06/2012  14:53           246,036 spring-tx-3.1.0.RELEASE.jar
   19/06/2012  14:53           540,819 spring-web-3.1.0.RELEASE.jar
   19/06/2012  14:53           572,266 spring-webmvc-3.1.0.RELEASE.jar
   19/06/2012  14:56           493,742 spring-ws-core-2.0.3.RELEASE.jar
   19/06/2012  14:56            92,942 spring-xml-2.0.3.RELEASE.jar
   19/06/2012  14:54            23,346 stax-api-1.0-2.jar
   19/06/2012  14:56           148,522 wsdl4j-1.6.1.jar
   19/06/2012  14:54         1,229,125 xercesImpl-2.9.1.jar
   19/06/2012  14:55           109,318 xml-apis-1.0.b2.jar

これらは、Jetty スターター アプリケーションに含まれているライブラリです。

16/07/2012  17:35           117,444 javax.el-2.2.3.jar
16/07/2012  17:35            38,863 javax.el-api-2.2.4.jar
16/07/2012  17:35           545,240 javax.servlet.jsp-2.2.3.jar
16/07/2012  17:35            53,124 javax.servlet.jsp-api-2.2.1.jar
16/07/2012  14:03            21,212 jetty-continuation-8.1.0.RC5.jar
16/07/2012  14:03            93,383 jetty-http-8.1.0.RC5.jar
16/07/2012  14:03           101,433 jetty-io-8.1.0.RC5.jar
16/07/2012  14:03            86,238 jetty-security-8.1.0.RC5.jar
16/07/2012  14:03           330,266 jetty-server-8.1.0.RC5.jar
16/07/2012  14:03            95,359 jetty-servlet-8.1.0.RC5.jar
16/07/2012  14:03           268,069 jetty-util-8.1.0.RC5.jar
16/07/2012  14:03           106,926 jetty-webapp-8.1.0.RC5.jar
16/07/2012  14:03            37,919 jetty-xml-8.1.0.RC5.jar
19/06/2012  14:57           414,240 jstl-1.2.jar
19/06/2012  14:53           367,444 log4j-1.2.14.jar
17/07/2012  09:42             6,300 WebJettyServices-0.0.1-SNAPSHOT.jar
16/07/2012  14:03           210,354 servlet-api-3.0.20100224.jar
              17 File(s)      2,893,814 bytes

エラーはおそらくjarファイルの競合によるものだと思います。次のことを試しましたが成功しませんでした

  • jstl 依存関係なしで war ファイルを再構築しました
  • jstl 依存関係なしで Jetty Starter アプリを再構築しました。
  • jstl 依存関係なしで両方を再構築

他にテストする方法がわからないので、私は今立ち往生しています。関連するコード スニペットを次に示します。Jetty スターター アプリケーションの Maven pom ファイルを次に示します。私が見つけた大きな問題の 1 つは、これを機能させるために必要な依存関係を実際に知ることが非常に難しいことです。search.maven.com には、org.eclipse.* 依存関係に必要なすべての jar ファイルが含まれていないようです。

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>WebClient</artifactId>
    <groupId>com.mypackage</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <groupId>com.mypackage</groupId>
  <artifactId>WebJettyServices</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>WebJettyServices</name>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jetty.version>8.1.0.RC5</jetty.version>
    <log4j.version>1.2.14</log4j.version>
    <glassfish.javax.version>2.2.3</glassfish.javax.version>
    <glassfish.javax-impl.version>2.2</glassfish.javax-impl.version>
    <glassfish.javax-jstl.version>1.2.1</glassfish.javax-jstl.version>
    <glassfish.jstl.version>1.2</glassfish.jstl.version>


  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

   <!--
        <dependency>
            <groupId>org.eclipse.jetty.aggregate</groupId>
            <artifactId>jetty-all-server</artifactId>
            <version>8.1.0.RC5</version>
        </dependency>

         Jetty Webapp -->

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty.version}</version>
    </dependency>

    <!-- JSP Support -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.servlet.jsp</artifactId>
        <version>${glassfish.javax.version}</version>
    </dependency>

    <!-- EL Support -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>${glassfish.javax.version}</version>
    </dependency>

    <!-- JSTL Support -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>${glassfish.jstl.version}</version>
    </dependency>    

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>    
  </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.mypackage.jetty.WebStarter</mainClass>
                            <addClasspath>true</addClasspath>
                        </manifest>                     
                    </archive>
                </configuration>
            </plugin>
        </plugins>  
    </build>
</project>

編集

これが問題のJSPページです

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="<c:url value="/styles/btmsm.css"/>"
    type="text/css" />
<title>Local Timestamp</title>
</head>

<body>

    <div id="container" style="width: 800px">

        <div id="header" style="background-color: #EEEEBB;">
            <h1 style="margin-bottom: 0;">Local timestamp</h1>
        </div>  

        <div id="content"
            style="background-color: #EEEEEE; height: 200px; width: 650px; float: left;">
            The local time is ${localTime}          
        </div>  
    </div>

</body>

</html>

そして、web.xml ファイルに示されている Web アプリのバージョン

<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
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">

war ファイルを Tomcat または Jboss 展開フォルダーに直接展開すると、アプリケーションは機能します。Jetty に組み込まれている場合にのみ問題になります。

4

2 に答える 2

1

問題は、web.xml で web-app 2.4 を使用してアプリケーションを宣言したことです。これを 2.5 以降に置き換えてください。この問題は解決されるはずです。

これを置き換えます:

<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
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">

と:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="YourWebAppID"
    version="2.5">

フィードバックしてください。

于 2012-07-17T22:34:04.890 に答える
0

多分あなたのjspが問題ですか?JSTL をインポートしている JSP 部分を投稿してください。これは、使用している Web バージョンに準拠している必要があります (web.xml を参照)。そのため、関連する部分もここに投稿してください。

多分それは単なるパスか何かの問題ですか?

お役に立てれば

于 2012-07-17T09:06:41.493 に答える