这非常简单明了。我想从servlet端抛出503错误。
response.sendError(503);
当抛出此内容时,我需要它来点击自定义错误页面。基本上是503错误页面本身,但有一些修改。
说我有503.html
,我添加了
<error-page>
<error-code>503</error-code>
<location>/503.html</location>
</error-page>
web.xml
中的。
我创建了一个war文件,其中一个servlet抛出503错误,web.xml
包含此内容。我将503.html
保留在父文件夹位置。 (我应该把它放在别的地方吗?)
我在WLS中部署了应用,但此自定义503.html
未受到影响。我收到通用503错误。
我错过了什么吗?
我的代码如下:
webapp1.war
- &GT; WEB-INF
- &GT; web的INF-&GT;类 - &GT; prject4-&GT; Class1.class
- &GT; web的INF-&GT; JSP-&GT;无错误&GT; custom.html
的web.xml
<?xml version="1.0"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>Class1</servlet-name>
<servlet-class>project2.Class1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Class1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<error-page>
<error-code>503</error-code>
<location>/WEB-INF/jsp/error/custom.html</location>
</error-page>
</web-app>
class1.java
public class Class1 extends HttpServlet
{
private ServletConfig config;
public void init(ServletConfig config)throws ServletException
{
this.config=config;
}
public void service (HttpServletRequest request, HttpServletResponse response)
throws IOException
{
response.setContentType("text/html");
ServletOutputStream l_out = response.getOutputStream();
response.sendError(503);
}
}
答案 0 :(得分:2)
好的,这是一个小错误,我在开始时没有弄清楚。
在我的web.xml
中,servlet-mapping以/*
的形式给出,这导致了无限循环条件,因为它抛出了已映射的相同代码。所以我不得不调整servlet映射,以便Class1
不会映射到任何错误页面 - 比如说/images/*
。
然后一切都开始正常了。 :)
答案 1 :(得分:1)
如果您使用Maven作为项目构建工具,那么它将在src / main / webapp目录中查找,例如我们的配置如下所示:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/error/error404.html</location>
</error-page>
我们的error404.html位于文件夹中:
$ {PROJECT_NAME} / SRC /主/ web应用/ WEB-INF / JSP /错误/
如果您没有使用Maven,该位置的路径将具有您放置index.jsp的基本目录
答案 2 :(得分:1)
您也可以尝试使用自定义错误处理程序处理它。
public void service (HttpServletRequest request, HttpServletResponse response)
throws IOException
{
try
{
//some error generating code
throw new Exception("503_Exception");
}
catch(Exception e)
{
response.sendRedirect(HandleError.handle(e, request));
}
}
处理错误的单独类。这可以处理不同类型的错误。 您可以添加记录堆栈跟踪的功能,如果出现错误则发送电子邮件等。
public class HandleError{
public static String handle(Throwable t, javax.servlet.http.HttpServletRequest request)
{
String sErrorMsg = t.getMessage();
if (sErrorMsg.equals("503_Exception")) {
request.setAttribute("msg", Constants.EINVALSESSION);
return "/503.html";
}
return "/default_error.html";
}
}
答案 3 :(得分:0)
我猜自定义错误页面的字节数有最小限制。下限通常为512字节。见Important note for your Custom error pages。我在使用Tomcat时也在Google-Chrome中看到过这种行为。