J'ai le code suivant pour utiliser un serveur Jetty intégré à côté d'un servlet simple et d'une page Web .jsp. Cependant, après avoir compilé et exécuté le code:
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
Je reçois une erreur:
INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.Apache.jasper.servlet.JspServlet
Et naviguer vers /index.jsp donne une erreur 500.
HTTP ERROR 500
Problem accessing /index.jsp.
Reason:
JSP support not configured
J'ai lu ceci post mais je ne pense pas que la solution s'applique ici car j'utilise Jetty embedded plutôt que d'utiliser le fichier start.jar.
Comment puis-je résoudre cette erreur afin que le serveur s'exécute et serve correctement les pages .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>
Voici la structure de mon projet:
webapp
----com
----test
----MyServlet.Java
----ServerMain.Java
----index.jsp
----web.xml
----lib
----jetty-all.jar
----servlet-api.jar
Il semble qu'il vous manque un fichier JAR contenant la classe org.Apache.jasper.servlet.JspServlet
. Téléchargez un fichier JAR le contenant (regardez ici ) et ajoutez-le à votre chemin de classe De plus, vous devriez également remplacer com/test/ServerMain
par le nom réel de la classe, com.test.ServerMain
. Votre déclaration Java devrait ressembler à ceci:
Java -cp ".:lib/servlet-api.jar:lib/jetty-all.jar:lib/Apache-jasper.jar" com.test.ServerMain
Incidemment, il existe un projet github, géré par le projet Jetty, démontrant la prise en charge de JSP dans Jetty Embedded.
Vous n'avez pas encore essayé d'implanter Jetty, mais lorsque vous utilisez Jetty 9.3 en tant que service, vous devez ajouter le support JSP.
cd $JETTY_BASE
$Java_HOME/bin/Java -jar $JETTY_HOME/start.jar --add-to-startd=jsp
Où JETTY_BASE
est votre dossier dans lequel vous déployez une application distincte de JETTY_HOME
. Je suppose donc que Jetty intégrée aurait besoin d'une configuration similaire.