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