2013-05-13 35 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); 
      } 
     } 
    } 
} 

注意:此代码是未经测试并没有检查的语法错误。