web-dev-qa-db-de.com

Embedded Jetty Server - KEINE JSP-Unterstützung für /, org.Apache.jasper.servlet.JspServlet wurde nicht gefunden

Ich habe den folgenden Code, um einen eingebetteten Jetty-Server neben einem einfachen Servlet und einer .jsp-Webseite zu verwenden. Nach dem Kompilieren und Ausführen des Codes:

javac -cp lib/servlet-api.jar:lib/jetty-all.jar com/test/MyServlet.Java 
javac -cp lib/servlet-api.jar:lib/jetty-all.jar com/test/ServerMain.Java 
Java -cp .:lib/servlet-api.jar:lib/jetty-all.jar com/test/ServerMain

Ich bekomme einen Fehler:

INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.Apache.jasper.servlet.JspServlet

Wenn Sie zu /index.jsp navigieren, wird ein Fehler von 500 angezeigt.

HTTP ERROR 500
Problem accessing /index.jsp. 
Reason:
JSP support not configured

Ich habe dieses post gelesen, aber ich denke nicht, dass die Lösung hier zutrifft, weil ich Jetty eingebettet habe und nicht die start.jar verwende.

Wie kann ich diesen Fehler beheben, damit der Server die .jsp-Seiten erfolgreich ausführen kann?

ServerMain.Java

package com.test;

import org.Eclipse.jetty.server.Server;
import org.Eclipse.jetty.webapp.WebAppContext;

public class ServerMain {

    public static void main(String[] args) throws InterruptedException {

        Server server = new Server(8080);
        WebAppContext webApp = new WebAppContext();
        webApp.setDescriptor("web.xml");
        webApp.setResourceBase("");
        webApp.setParentLoaderPriority(true);
        server.setHandler(webApp);

        try {
            server.start();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
        server.join();
    }
}

MyServlet.Java

package com.test;

import Java.io.IOException;
import Java.util.Properties;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, this is a testing servlet. \n\n");
        Properties p = System.getProperties();
        p.list(resp.getWriter());

    }
}

web.xml

   <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC "-//Oracle Corporation//DTD Web Application 2.3//EN" "http://Java.Sun.com/dtd/web-app_2_3.dtd">

<web-app xmlns="http://Java.Sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.test.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Dies ist meine Projektstruktur:

webapp
----com
    ----test
        ----MyServlet.Java
        ----ServerMain.Java
        ----index.jsp
        ----web.xml
----lib
    ----jetty-all.jar
    ----servlet-api.jar  
5
user2998046

Es scheint, dass Sie eine JAR-Datei vermissen, die die Klasse org.Apache.jasper.servlet.JspServlet enthält. Laden Sie eine JAR-Datei mit dieser Datei herunter (siehe hier ) und fügen Sie sie Ihrem Klassenpfad hinzu. In einer Randnotiz sollten Sie auch com/test/ServerMain durch den tatsächlichen Klassennamen com.test.ServerMain ersetzen. Ihre Java-Anweisung sollte folgendermaßen aussehen:

Java -cp ".:lib/servlet-api.jar:lib/jetty-all.jar:lib/Apache-jasper.jar" com.test.ServerMain
2
msrd0

Übrigens gibt es ein Github-Projekt, das vom Jetty-Projekt verwaltet wird und JSP-Unterstützung in Jetty Embedded demonstriert.

https://github.com/jetty-project/embedded-jetty-jsp

2
Joakim Erdfelt

Für Embedded Jetty wurde noch nicht versucht, aber wenn Sie Jetty 9.3 als Dienst ausführen, müssen Sie JSP-Unterstützung hinzufügen.

cd $JETTY_BASE
$Java_HOME/bin/Java -jar $JETTY_HOME/start.jar --add-to-startd=jsp

Dabei ist JETTY_BASE Ihr Ordner, in dem Sie eine Anwendung bereitstellen, die von JETTY_HOME getrennt ist. Ich vermute, Embedded Jetty würde eine ähnliche Konfiguration benötigen.

2
Nux