2014-02-25 73 views
0

我使用2個處理程序,webapp和servlet以及2個上下文「/」和「/ d/*」運行Jetty。未找到Jetty Servlet上下文

Webapp加載正常,而當我嘗試訪問servlet時出現「404 Not Found」。

這裏是我使用的代碼:

public static void main(String[] args){ 

    // The simple Jetty config here will serve static content from the webapp directory 
    String webappDirLocation = "src/main/webapp/"; 

    // The port that we should run on can be set into an environment variable 
    // Look for that variable and default to 8080 if it isn't there. 
    String webPort = System.getenv("PORT"); 
    if (webPort == null || webPort.isEmpty()) { 
     webPort = "7777"; 
    } 
    Server server = new Server(Integer.valueOf(webPort)); 
    HandlerCollection handlerCollection = new HandlerCollection(); 

    // Add the GUI part 
    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setDescriptor(webappDirLocation + "/WEB-INF/web.xml"); 
    webapp.setResourceBase(webappDirLocation); 
    handlerCollection.addHandler(webapp); 

    // Add the API part 
    ServletContextHandler apiContext = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    apiContext.setContextPath("/d"); 
    apiContext.addServlet(new ServletHolder(new DownloaderServlet()), "/*"); 
    handlerCollection.addHandler(apiContext); 

    // Add both handlers to the server 
    server.setHandler(handlerCollection); 
    try { 
     server.start(); 
     server.join(); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
} 

servlet代碼:

@SuppressWarnings("serial") 
@WebServlet 
public class DownloaderServlet extends HttpServlet { 

public DownloaderServlet(){} 

@Override 
protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) 
       throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("<html><body><h1>My Servlet</h1></body></html>"); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

} 
} 

web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

回答

0

我覺得這是在碼頭的錯誤。歡迎反饋。 無論哪種方式的webapp處理程序之前添加的servlet處理程序解決的問題:

HandlerCollection handlerCollection = new HandlerCollection(); 
// Add the API part 
ServletContextHandler apiContext = new ServletContextHandler(ServletContextHandler.SESSIONS); 
apiContext.setContextPath("/d"); 
apiContext.addServlet(new ServletHolder(new DownloaderServlet()), "/*"); 
handlerCollection.addHandler(apiContext); 
// Add the GUI part 
WebAppContext webapp = new WebAppContext(); 
webapp.setContextPath("/"); 
webapp.setDescriptor(webappDirLocation + "/WEB-INF/web.xml"); 
webapp.setResourceBase(webappDirLocation); 
handlerCollection.addHandler(webapp); 
// Add both handlers to the server 
server.setHandler(handlerCollection); 

example是我的努力來調試這個問題有幫助。