web-dev-qa-db-ja.com

Embedded Jetty Server- /のJSPサポートがなく、org.Apache.jasper.servlet.JspServletが見つかりませんでした

単純なサーブレットと.jspWebページと一緒に組み込みJettyサーバーを使用するための次のコードがあります。ただし、コードをコンパイルして実行した後は、次のようになります。

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

エラーが発生します:

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

また、/ index.jspに移動すると、500エラーが発生します。

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

私はこれを読みました post ですが、start.jarを使用するのではなくJetty Embeddedを実行しているため、ここでは解決策が適用されないと思います。

サーバーが.jspページを正常に実行して提供するように、このエラーを解決するにはどうすればよいですか?

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>

これが私のプロジェクト構造です。

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

クラスorg.Apache.jasper.servlet.JspServletを含むJARファイルが欠落しているようです。それを含むJARファイルをダウンロードし( ここ を見て)、クラスパスに追加します。また、補足として、com/test/ServerMainを実際のクラス名com.test.ServerMainに置き換える必要があります。あなたJavaステートメントは次のようになります:

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

ちなみに、Jetty Projectによって管理されているgithubプロジェクトがあり、JettyEmbeddedでのJSPサポートを示しています。

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

2
Joakim Erdfelt

組み込みJettyを試したことはありませんが、Jetty 9.3をサービスとして実行する場合は、JSPサポートを追加する必要があります。

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

ここで、JETTY_BASEは、JETTY_HOMEとは別のアプリケーションをデプロイするフォルダーです。したがって、組み込みJettyにも同様の構成が必要になると思います。

2
Nux