Ho il seguente codice per utilizzare un server Jetty integrato insieme a un semplice servlet e una pagina web .jsp. Tuttavia, dopo la compilazione e l'esecuzione del codice:Embedded Jetty Server - NO supporto JSP per /, non trovato org.apache.jasper.servlet.JspServlet
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
ottengo un errore:
INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
E la navigazione verso /index.jsp dà un errore 500.
HTTP ERROR 500
Problem accessing /index.jsp.
Reason:
JSP support not configured
ho letto questo post ma non credo che la soluzione si applica qui perché sto correndo Jetty incorporato, piuttosto che utilizzare lo start.jar.
Come posso risolvere questo errore in modo che il server esegua e serva correttamente le pagine .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>
Questo è il mio progetto stru cture:
webapp
----com
----test
----MyServlet.java
----ServerMain.java
----index.jsp
----web.xml
----lib
----jetty-all.jar
----servlet-api.jar
È necessario chiamare java con il nome della classe, quindi 'com.test.ServerMain' invece di' com/test/ServerMain' (per javac è corretto) – msrd0
Grazie @ msrd0, viene eseguito correttamente utilizzando 'java com. test.ServerMain' e 'java com/test/ServerMain' ma grazie per il suggerimento. –
Sei sicuro che le librerie in uso includano la classe 'org.apache.jasper.servlet.JspServlet'? 'jar tf lib/servlet-api.jar' sarebbe di aiuto – msrd0