使用请求调度程序发送 404 JSP
Send 404 using request dispatcher JSP
我正在 JSP - AEM、CQ 中实施自定义 404 处理程序。
该文件位于 apps/sling/servlet/errorhandler/404.jsp
我正在拦截 Not Found 请求并使用 RequestDispatcher 转发 class。
<%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling"%>
<sling:defineObjects />
<%
// setting response code as 404
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setStatus(404);
System.out.println(response.getStatus());
try {
RequestDispatcher rd = request.getRequestDispatcher("/error-page.html");
rd.forward(request, response);
} catch (Exception e) {
RequestDispatcher rd = request.getRequestDispatcher("/error-page.html");
rd.forward(request, response);
}
%>
以上代码获取错误内容-page.html保持URL相同,但返回的响应码不是404,而是200。
我怎样才能 return 404?
使用 #include
而不是 #forward
将允许您 return 404:
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.include(request,response);
我建议创建一个 Java Servlet 而不是使用 JSP:
@SlingServlet(metatype = true, resourceTypes = {"/apps/sling/servlet/errorhandler"}, extensions = {"404"})
public class ErrorServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
RequestDispatcher dispatcher = request.getRequestDispatcher("myPath");
dispatcher.include(request,response);
}
}
您是直接在 AEM 中检查状态代码,还是在 Apache 和 Dispatcher 之后检查?
我正在 JSP - AEM、CQ 中实施自定义 404 处理程序。 该文件位于 apps/sling/servlet/errorhandler/404.jsp
我正在拦截 Not Found 请求并使用 RequestDispatcher 转发 class。
<%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling"%>
<sling:defineObjects />
<%
// setting response code as 404
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setStatus(404);
System.out.println(response.getStatus());
try {
RequestDispatcher rd = request.getRequestDispatcher("/error-page.html");
rd.forward(request, response);
} catch (Exception e) {
RequestDispatcher rd = request.getRequestDispatcher("/error-page.html");
rd.forward(request, response);
}
%>
以上代码获取错误内容-page.html保持URL相同,但返回的响应码不是404,而是200。
我怎样才能 return 404?
使用 #include
而不是 #forward
将允许您 return 404:
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
RequestDispatcher dispatcher = request.getRequestDispatcher(path);
dispatcher.include(request,response);
我建议创建一个 Java Servlet 而不是使用 JSP:
@SlingServlet(metatype = true, resourceTypes = {"/apps/sling/servlet/errorhandler"}, extensions = {"404"})
public class ErrorServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
RequestDispatcher dispatcher = request.getRequestDispatcher("myPath");
dispatcher.include(request,response);
}
}
您是直接在 AEM 中检查状态代码,还是在 Apache 和 Dispatcher 之后检查?