2013-05-13 34 views
0
@WebServlet("/") 
public class RootServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String pathInfo = request.getServletPath(); 
     switch(pathInfo) { 
       case "/": 
        this.handleHomePage(request, response); 
        break; 
       default: 
        request.getRequestDispatcher(pathInfo).forward(request, response); 
      } 
    } 

我試圖使用默認的servlet來捕獲上下文根url。所以當它是一個根URL時,它將由handleHomePage方法處理。如果沒有,它將被轉發到相應的文件。例如CSS,HTML,圖像文件。但是這會導致無盡的異常發生。 getRequestDispatcher是否允許轉發到靜態頁面?靜態頁面的默認servlet getRequestDispatcher

回答

0

您是更好地創建這樣一個過濾器:

@WebFilter(filterName = "rootFilter", urlPatterns = { "/*" }, dispatcherTypes = { DispatcherType.REQUEST }) 
{ 
    @Override 
    public void doFilter(ServletRequest p_oRequest, ServletResponse p_oResponse, FilterChain p_oChain) throws IOException, ServletException 
    { 
     // skip non-http requests 
     if(!(p_oRequest instanceof HttpServletRequest)) 
     { 
      p_oChain.doFilter(p_oRequest,p_oResponse); 
     } 
     else 
     { 
      String pathInfo = ((HttpServletRequest)p_oRequest).getServletPath(); 
      switch(pathInfo) 
      { 
       case "/": 
        // Forward to your "root servlet" 
        break; 
       default: 
        p_oChain.doFilter(p_oRequest,p_oResponse); 
      } 
     } 
    } 
} 

注意:此代碼是未經測試並沒有檢查的語法錯誤。