您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

带有url模式“ / *”的servlet映射中的StackOverflowError

带有url模式“ / *”的servlet映射中的StackOverflowError

映射的servlet/*也将在RequestDispatcher#forward()调用上运行。因此,如果您在该servlet中执行转发,则每次都会在无限循环中调用自身。那解释了StackOverflowError

毕竟,您根本不应该使用/*servlet。它仅在servlet过滤器上有意义。将Servlet映射放回更特定的URL模式,并创建一个过滤器,/*必要时将其转发到所需的servlet。您当然不希望Servlet处理例如images / CSS / JS文件。假设它们都放在/resources文件夹中,并且前端控制器已映射到/myservlet/*,则在中执行以下操作doFilter()

HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());

if (path.startsWith("/resources/")) {
    // Just let container's default servlet do its job.
    chain.doFilter(request, response);
}
else {
    // Delegate to your front controller.
    request.getRequestDispatcher("/myservlet" + path).forward(request, response);
}
Jave 2022/1/1 18:15:02 有494人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶