エラーページ
* 「page」ディレクティブの「isErrorPage」属性で「true」を指定すると(デフォルトは「false」)、そのページはエラー表示用とみなされる
<%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
エラーをエラーページに表示
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="/Views/Errors/ErrorPage.jsp"%>
web.xmlでerror-pageを指定
* ステータスコード500発生時に、Error500.jspを遷移するように設定
<error-page>
<error-code>404</error-code>
<location>/Views/errors/Error404.jsp</location>
</error-page>
例外での指定
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/Views/errors/Error404.jsp</location>
</error-page>
サンプル
フォルダ構成
SampleWeb(Project Name)
+ WebContent
+ WEB-INF
+ web.xml
+ Views
+ Index.jsp
+ Errors
+ ErrorPage.jsp
+ Error404.jsp
* 「<%=1/0%>」により、わざとエラーを発生させる
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="/Views/Errors/ErrorPage.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=1/0%>
</body>
ErrorPage.jsp
<%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<body>
次のようなエラーが発生しました。
<b><%= exception %></b><br>
<hr>
<pre>
<% exception.printStackTrace(new java.io.PrintWriter(out)); %>
</pre>
</body>
</body>
</html>
Error404.jsp
* あまりバイト数が少ないページだとページが表示されなかった。下記の「トラブルシューティング」を参照のこと。
<%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>HTTP 404 File Not Found</h1><br>
<h2>指定されたファイルが見つかりません。</h2><br>
<p><a href="#" onClick="history.back(); return false;">戻る</a></p>
<pre>
■考えられる原因:
ファイルが存在しない。
指定されたURLに元々ファイルが存在しないか、既にファイルが削除されているためにこのエラーが表示されます。
アドレスの指定が間違っている。
リンク先のアドレスを間違って指定している場合、このエラーが表示されます。
■対処法:
入力したURLを確認後、ブラウザで再読み込み(Reload)を行ってください。
</pre>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SampleWeb</display-name>
<error-page>
<error-code>404</error-code>
<location>/Views/Errors/Error404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/Views/Errors/ErrorPage.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>/axis2-web/index.jsp</welcome-file>
</welcome-file-list>
<servlet>
・・・略・・・
出力結果
Index.jspにアクセスした場合
* ErrorPage.jsp に遷移して以下のように表示する
次のようなエラーが発生しました。 java.lang.ArithmeticException: / by zero
--------------------------------------------------------------------------------
java.lang.ArithmeticException: / by zero
at org.apache.jsp.Views.Index_jsp._jspService(Index_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)