Jetty Embedded - ResourceHandler + ServletContext

kknobloch

Neues Mitglied
Hallo miteinander,

ich möchte gerne mit Jetty 9 Embedded Server einen Webanwendung implementieren.
In der Webanwendung sollen neben "reinen" HTML-Seiten auch Servlets zum Einsatz kommen.
Das ist ja eigentlich keine außergewöhnliche Anforderung.
Ich bekomme es mit dem Jetty auch hin, dass zum einem meine HTML-Seiten ordentlich angezeigt werden ... uns zwar so:
Java:
public class TestServer {

	public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        /*
         * Resource-Handler für alles was kein Servlet ist
         */
        ResourceHandler resource_handler = new ResourceHandler();
        resource_handler.setDirectoriesListed(true);
        resource_handler.setWelcomeFiles(new String[]{ "index.html" });
 
        resource_handler.setResourceBase("./webapps");
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });

        server.setHandler(handlers);
        
        server.start();
        server.join();
    }		
}
und zum anderen klappt die Ausführung der Servlets auch ... und zwar so:
Java:
public class TestServer {

	public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        /*
         * Servlet-Konfiguration
         */
        ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletContext.setContextPath("/test1");
        servletContext.addServlet(new ServletHolder(new LoginServlet()), "/login/*");        

        server.setHandler(servletContext);
        
        server.start();
        server.join();
    }		
	
}
Nur zusammen will das irgendwie nicht funktionieren:
Java:
public class TestServer {

	public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        /*
         * Resource-Handler für alles was kein Servlet ist
         */
        ResourceHandler resource_handler = new ResourceHandler();
        resource_handler.setDirectoriesListed(true);
        resource_handler.setWelcomeFiles(new String[]{ "index.html" });
 
        resource_handler.setResourceBase("./webapps");
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });

        server.setHandler(handlers);
        /*
         * Servlet-Konfiguration
         */
        ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletContext.setContextPath("/test1");
        servletContext.addServlet(new ServletHolder(new LoginServlet()), "/login/*");        

        server.setHandler(servletContext);
        
        server.start();
        server.join();
    }		
	
}
Bin ich, was die Verwendung von Jetty angeht, auf der völlig falsche Spur und übersehe ich evtl. nur eine Kleinigkeit?

Besten Dank im Voraus.
Grüße Kurt
 

java123

Mitglied
Hi,

ich glaube es liegt daran das du zweimal ein 'setHandler' aufrufst. Evtl. beim ersten Aufruf noch einen ServletHandler hinzufügen. Oder wie unten (funktioniert bei mir).

Java:
int port = 8080;
Server server = new Server(port);

String webFolder = "webapp";

WebAppContext context = new WebAppContext();
context.setResourceBase(webFolder);
context.setDescriptor(webFolder + "WEB-INF/web.xml");
context.setContextPath("/");
context.setParentLoaderPriority(true);
context.addServlet(ConfigServlet.class, "/config/*");
		
server.setHandler(context);

try {
  server.start();
  server.join();
} catch (Exception e) {
  e.printStackTrace();
}

Gruß
 

kknobloch

Neues Mitglied
@java123: Erst mal vielen Dank für die Antwort.
Das klappt bei mir aber nicht. Der Sourcecode sieht nun so aus:
Java:
public class TestServer {

	public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        
        String webFolder = "webapp/";
        WebAppContext context = new WebAppContext();
        context.setResourceBase(webFolder);
        // context.setDescriptor(webFolder + "WEB-INF/web.xml");
        context.setContextPath("/");
        context.setParentLoaderPriority(true);
        context.addServlet(LoginServlet.class, "/login/*");        
        
        server.setHandler(context);
        
        server.start();
        server.join();
    }			
}
Meine HTML-Seite liegt im Verzeichnis webapp/test1, wenn ich Browser http://localhost:8080/test1 aufrufe bekomme ich ein HTML-Fehler 404, wenn ich die URL um index.html erweitere ebenfalls.
Wenn ich über die URL http://localhost:8080/login das Servlet anspreche, wird dies gefunden und antwortet korrekt.

Grüße Kurt
 

java123

Mitglied
Dann leider kA. Vielleicht nochmal die Projektstruktur überprüfen und den webapp Ordner hin- und herschieben, scheint ja nur statische Ressourcen zu betreffen.

Gruß
 

Ähnliche Java Themen


Oben