# Jetty Embedded - ResourceHandler + ServletContext



## kknobloch (14. Feb 2014)

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:

```
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:

```
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:

```
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 (1. Mrz 2014)

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).


```
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 (4. Mrz 2014)

@java123: Erst mal vielen Dank für die Antwort.
Das klappt bei mir aber nicht. Der Sourcecode sieht nun so aus:

```
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 (4. Mrz 2014)

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

Gruß


----------

