Don't mix HandlerList with resource handler + default handler with servlet
context handlers.

Stay within the ServletContextHandler, and replace the resourceHandler with
an alternative DefaultHandler.
Example:

package jetty.examples;

import javax.servlet.MultipartConfigElement;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class ManyDefaultServletWithMultipart
{
    public static void main(String[] args)
    {
        System.setProperty("org.eclipse.jetty.servlet.LEVEL","DEBUG");

        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8080);
        server.addConnector(connector);

        // Setup the basic application "context" for this application at "/"
        // This is also known as the handler tree (in jetty speak)
        ServletContextHandler context = new
ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);

        // The filesystem paths we will map
        String homePath = System.getProperty("user.home");
        String pwdPath = System.getProperty("user.dir");
        String tmpPath = System.getProperty("java.io.tmpdir");

        // A Servlet for API Calls
        ServletHolder holderApi = new ServletHolder("api",
ExampleApiServlet.class);
        // Configure for MultiPart POST
        holderApi.getRegistration().setMultipartConfig(new
MultipartConfigElement(tmpPath));
        context.addServlet(holderApi,"/api/*");

        // Fist, add special pathspec of "/home/" content mapped to the
homePath
        ServletHolder holderHome = new ServletHolder("static-home",
DefaultServlet.class);
        holderHome.setInitParameter("resourceBase",homePath);
        holderHome.setInitParameter("dirAllowed","true");
        holderHome.setInitParameter("pathInfoOnly","true");
        context.addServlet(holderHome,"/home/*");

        // Lastly, the default servlet for root content
        // It is important that this is last.
        ServletHolder holderPwd = new ServletHolder("default",
DefaultServlet.class);
        holderPwd.setInitParameter("resourceBase",pwdPath);
        holderPwd.setInitParameter("dirAllowed","true");
        context.addServlet(holderPwd,"/");

        try
        {
            server.start();
            server.dump(System.err);
            server.join();
        }
        catch (Throwable t)
        {
            t.printStackTrace(System.err);
        }
    }
}


--
Joakim Erdfelt <[email protected]>
webtide.com <http://www.webtide.com/> - intalio.com/jetty
Expert advice, services and support from from the Jetty & CometD experts
eclipse.org/jetty - cometd.org


On Thu, Dec 5, 2013 at 2:48 AM, cynricshu <[email protected]> wrote:

>  Hi,
> Recently I have updated Jetty from 9.0.3 to 9.1.0, and after that, I got a
> problem.
> I’m using Jetty in embedded mode, here’s my code:
>
> ServletContextHandler context = new ServletContextHandler(
>                 ServletContextHandler.SESSIONS);
>         context.setContextPath("/");
>
>         ServletHolder holder = new ServletHolder(new
> jettyHttpRequestHandler());
>         holder.getRegistration().setMultipartConfig(
>                 new MultipartConfigElement(getTmpDir()));
>
>         context.addServlet(holder, "/api/*");
>
>         HandlerList internalHandlers = new HandlerList();
>         internalHandlers.addHandler(context);
>         internalHandlers.addHandler(resourceHandler);
>         internalHandlers.addHandler(defaultHandler);
>
> Server server = new Server();
>         server.setHandler(internalHandlers);
> server.start();
> server.join();
>
> Then I open the start page in browser, the url is 
> *http://localhost:8080/views/admin/dashboard.html
> <http://localhost:8080/views/admin/dashboard.html>*
>
> In the old version of Jetty(9.0.3), all work well, but with the latest
> Jetty, I encountered a 404 error. It seems that the Jetty Server didn’t
> pass the request to resourceHandler.
>
> I don’t know why, does anyone know?
> Thanks.
>
> Best regards,
> Cynric Shu
>
>
> _______________________________________________
> jetty-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to