5 java jsp jetty embedded-jetty
我有以下代码使用嵌入式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
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
Run Code Online (Sandbox Code Playgroud)
导航到/index.jsp会出现500错误.
HTTP ERROR 500
Problem accessing /index.jsp.
Reason:
JSP support not configured
Run Code Online (Sandbox Code Playgroud)
我已经阅读过这篇文章,但我不认为解决方案适用于此,因为我正在运行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();
}
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
这是我的项目结构:
webapp
----com
----test
----MyServlet.java
----ServerMain.java
----index.jsp
----web.xml
----lib
----jetty-all.jar
----servlet-api.jar
Run Code Online (Sandbox Code Playgroud)
尚未尝试嵌入 Jetty,但在将 Jetty 9.3 作为服务运行时,您需要添加 JSP 支持。
cd $JETTY_BASE
$JAVA_HOME/bin/java -jar $JETTY_HOME/start.jar --add-to-startd=jsp
Run Code Online (Sandbox Code Playgroud)
哪里JETTY_BASE
是你的文件夹中部署应用程序,它是从不同的JETTY_HOME
。所以我猜嵌入式 Jetty 需要类似的配置。
您似乎缺少包含 class 的 JAR 文件org.apache.jasper.servlet.JspServlet
。下载包含它的 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41142 次 |
最近记录: |