2012-02-19 11 views
5

Sto utilizzando il Jetty incorporato per avviare una webapp e utilizzo le pagine JSP come viste.L'utilizzo di Jetty incorporato con JSP restituisce l'errore "web-jsptaglibrary_1_2.dtd non trovato"

L'utilizzo del plug-in maven-jetty funziona bene per il test, il che mi fa pensare che manchi alcune dipendenze durante l'avvio del server (e quale è la causa principale del problema).

ho bootstrap Jetty con il comando:

java $JAVA_OPTS -cp target/classes:target/dependency/* xxx.Main 

ho usato il plugin dipendenza nel Maven per essere sicuri di ottenere tutte le dipendenze nel classpath (al di fuori della guerra-file compresso):

<execution> 
<id>copy-dep</id> 
<goals> 
<goal>copy-dependencies</goal> 
</goals> 
</execution> 

La classe principale appare così:

 Server server = new Server(8080); 
    WebAppContext root = new WebAppContext(); 
    root.setContextPath("/"); 
    root.setWar("target/app.war"); 
    server.setHandler(root); 
    server.start(); 
    server.join(); 

Il server Jetty incorporato si avvia senza errori, bu t quando si naviga verso l'URL che restituisce la pagina JSP ottengo sempre questo errore.

Lo stacktrace:

PWC6181: File /javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd not found 

Caused by: 

org.xml.sax.SAXException: PWC6181: File /javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd not found 
at org.apache.jasper.xmlparser.MyEntityResolver.resolveEntity(ParserUtils.java:566) 
at com.sun.org.apache.xerces.internal.util.EntityResolverWrapper.resolveEntity(EntityResolverWrapper.java:107) 
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.resolveEntityAsPerStax(XMLEntityManager.java:1018) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1192) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) 
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:296) 
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:366) 
at org.apache.jasper.runtime.TldScanner.scanTld(TldScanner.java:526) 
at org.apache.jasper.runtime.TldScanner.scanJar(TldScanner.java:379) 
at org.apache.jasper.runtime.TldScanner.scanJars(TldScanner.java:607) 
at org.apache.jasper.runtime.TldScanner.scanTlds(TldScanner.java:282) 
at org.apache.jasper.runtime.TldScanner.getLocation(TldScanner.java:255) 

Io uso Jetty 8 e il mio web.xml è configurato per Servlet 3.0.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 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_3_0.xsd"> 

risposta

6

ho scoperto che il problema con DTD-file mancante era che avevo bisogno di JAR Jetty JSP.

ero usando queste dipendenze per JSP di supporto quando non ha funzionato:

<dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>jsp-impl</artifactId> 
     <version>2.2</version> 
    </dependency> 

Jetty-runner sempre lavorato per me, così ho guardato le dipendenze in quel vaso-file.

<dependency> 
    <groupId>org.eclipse.jetty.orbit</groupId> 
    <artifactId>javax.servlet.jsp</artifactId> 
    <version>2.2.0.v201112011158</version> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.jetty.orbit</groupId> 
    <artifactId>org.apache.jasper.glassfish</artifactId> 
    <version>2.2.2.v201112011158</version> 
</dependency> 

Nel javax.servlet.jsp dipendenza DTD-file mancanti esiste, quindi il problema è andato via quando ho iniziato ad usare loro.

Quindi penso che il problema era che avevo bisogno delle dipendenze JSP specifiche del Jetty e non di quelle generali. Qualcuno può spiegare perché Jetty è implementato in quel modo?

Problemi correlati