2012-02-19 9 views
5

Estoy usando Embedded Jetty para iniciar una aplicación web y uso las páginas JSP como vistas.El uso de Embedded Jetty utilizando JSP da el error "web-jsptaglibrary_1_2.dtd no encontrado"

El uso del plugin maven-jetty funciona bien para las pruebas, lo que me hace pensar que me faltan algunas dependencias cuando se inicia el servidor (y cuál es la causa del problema).

I Bootstrap Embarcadero con el comando:

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

He utilizado el plugin de dependencia de Maven para estar seguro de obtener todos los deps en la ruta de clase (fuera de la guerra-archivo empaquetado):

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

la clase principal se ve así:

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

El servidor incrustado embarcadero se inicia sin errores, bu Cuando navego por la URL que devuelve la página JSP siempre obtengo este error.

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

utilizo embarcadero 8 y mi web.xml está configurado para 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"> 

Respuesta

6

Descubrí que el problema con el archivo dtd que faltaba era que necesitaba Jetty JSP JAR.

estaba usando estas dependencias para JSP-apoyo cuando no funcionó:

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

embarcadero favorito siempre ha trabajado para mí, así que parecía en las dependencias en el frasco-archivo.

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

En el javax.servlet.jsp dependencia de las DTD-archivos que faltan existen, por lo que el problema se fue cuando empecé a usarlos.

Así que supongo que el problema fue que necesitaba las dependencias JSP específicas de Jetty y no las generales. ¿Alguien puede explicar por qué Jetty se implementa de esa manera?

Cuestiones relacionadas