静态页面的默认servlet getRequestDispatcher


@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, images文件。但这将导致一个永无止境的异常发生。getRequestDispatcher允许转发到静态页面吗?

您最好像这样创建一个过滤器:

@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);
            }
        }
    }
}

最新更新