Hi, Joakim

Thank you for reply, I have tried your code, and it work well, thank you so 
much!

But I wonder that, is your solution better than using ResourceHandler (I mean 
in performance )?   

Best regards,
Cynric Shu


在 2013年12月5日 星期四,22:49,Joakim Erdfelt 写道:

> 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] (mailto:[email protected])>
> webtide.com (http://www.webtide.com/) - intalio.com/jetty 
> (http://intalio.com/jetty)
> Expert advice, services and support from from the Jetty & CometD experts
> eclipse.org/jetty (http://eclipse.org/jetty/) - cometd.org 
> (http://cometd.org/)
>  
>  
>  
>  
> On Thu, Dec 5, 2013 at 2:48 AM, cynricshu <[email protected] 
> (mailto:[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  
> >  
> > 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] (mailto:[email protected])
> > https://dev.eclipse.org/mailman/listinfo/jetty-users
> >  
>  
> _______________________________________________
> jetty-users mailing list
> [email protected] (mailto:[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