嵌入式Jetty服务器-没有JSP支持/,找不到org.apache.jasper.servlet.JspServlet



我有以下代码来使用嵌入式Jetty服务器以及一个简单的servlet和.jsp网页。但是,在编译并运行代码之后:

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

我读过这篇文章,但我不认为这个解决方案适用于这里,因为我运行的是嵌入式Jetty,而不是使用start.jar

如何解决此错误,使服务器能够成功运行并提供.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. nn");
        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  

还没有尝试过嵌入式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也需要类似的配置。

这里的所有答案都不推荐使用,下面是您应该如何处理Jetty 11:

java -jar $JETTY_HOME/start.jar --add-module=jsp

似乎缺少一个包含类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

顺便说一句,有一个由Jetty project维护的github项目,展示了Jetty Embedded中对JSP的支持。

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

相关内容

最新更新