Foro sobre Java EE > Jetty 9.4: JSPs, Servlets y WebSockets todo a la vez
Queridos compañeros de JH.
Estoy terminando un proyecto personal (de domótica) y a última hora he tenido que cambiar de Tomcat a Jetty Embebido (es mi primer contacto con Jetty).
Necesito que funcionen los JSPs, Servlets y WebSockets todo a la vez. Sé cómo hacer que funcionen JSPs y Servlets juntos, pero cuando meto los Websockets, ya nada funciona.
Al finalde este mensaje os pongo el código (simplificado) que utilizo.
Os ruego vuestra ayuda. Muchas gracias por adelantado y recibid un cordial saludo.
private static Server server = null;
public static void startup() { WebAppContext ctx = new WebAppContext(); ctx.setContextPath( "/domotics" );
Queridos compañeros de JH.
Estoy terminando un proyecto personal (de domótica) y a última hora he tenido que cambiar de Tomcat a Jetty Embebido (es mi primer contacto con Jetty).
Necesito que funcionen los JSPs, Servlets y WebSockets todo a la vez. Sé cómo hacer que funcionen JSPs y Servlets juntos, pero cuando meto los Websockets, ya nada funciona.
Al finalde este mensaje os pongo el código (simplificado) que utilizo.
Os ruego vuestra ayuda.
Muchas gracias por adelantado y recibid un cordial saludo.
private static Server server = null;
public static void startup()
{
WebAppContext ctx = new WebAppContext();
ctx.setContextPath( "/domotics" );
initServer( ctx );
initWebSockets();
initServlets( ctx );
initJSPs( ctx );
server.start();
}
private static void initServer( WebAppContext ctx ) throws Exception
{
server = new Server( 8080 );
server.setHandler( ctx );
server.setStopAtShutdown( true );
}
private static void initWebSockets() throws Exception
{
ServletContextHandler sch = new ServletContextHandler( ServletContextHandler.SESSIONS );
sch.setContextPath( Config.getContextPath() );
ServerContainer wsContainer = WebSocketServerContainerInitializer.configureContext( ctx );
wsContainer.addEndpoint( EventSocket.class );
}
private static void initServlets( WebAppContext ctx ) throws Exception
{
ctx.addServlet( GetFile.class, "/getfile" );
}
private static void initJSPs( WebAppContext ctx ) throws Exception
{
ctx.setResourceBase( "webui" );
ctx.setDescriptor( "web.xml" );
System.setProperty( "org.apache.jasper.compiler.disablejsr199", "false" );
File fTmp = new File( System.getProperty( "java.io.tmpdir" ), "jetty-jsp-tmp" );
if( ! UtilIO.createFolder( fTmp ) )
{
throw new IOException( "Can not create folder '"+ fTmp.getAbsolutePath() +"'" );
}
ctx.setAttribute("javax.servlet.context.tempdir", fTmp );
ClassLoader jspClassLoader = new URLClassLoader( new URL[0], WebServer.class.getClassLoader() );
ctx.setClassLoader( jspClassLoader );
ServletHolder holderJsp = new ServletHolder( "jsp", JspServlet.class );
holderJsp.setInitOrder( 0 );
ServletHolder holderDefault = new ServletHolder( "default", DefaultServlet.class );
holderDefault.setInitParameter( "resourceBase", ctx.getContextPath() );
holderDefault.setInitParameter( "dirAllowed", "false" );
ctx.addServlet( holderDefault, "/" );
ctx.setAttribute( "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$" );
Configuration.ClassList classlist = Configuration.ClassList.setServerDefault( server );
classlist.addBefore( "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration" );
classlist.addAfter( "org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration" );
}