ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
1. Servlet / JSP (web.xml)
従来の Java Web アプリは WEB-INF/web.xml でステータスコードや例外単位にエラーページを指定:
404
/WEB-INF/jsp/error/404.jsp
500
/WEB-INF/jsp/error/500.jsp
java.lang.Throwable
/WEB-INF/jsp/error/500.jsp
com.example.BusinessException
/WEB-INF/jsp/error/business.jsp
<%-- 404.jsp --%>
<%@ page isErrorPage="true" pageEncoding="UTF-8" %>
404 Not Found
ページが見つかりません
URL: <%= request.getAttribute("javax.servlet.error.request_uri") %>
ステータス: <%= request.getAttribute("javax.servlet.error.status_code") %>
トップへ
2. Spring Boot のエラーページ
Spring Boot は規約に従ってファイルを置くだけで自動的にカスタムエラーページが有効化:
src/main/resources/
├── templates/
│ └── error/
│ ├── 404.html ← 404 専用
│ ├── 500.html ← 500 専用
│ ├── 4xx.html ← 4xx 全般
│ └── 5xx.html ← 5xx 全般
└── static/
└── error/
└── 404.html ← 静的エラーページ (Thymeleaf 不使用時)
404 Not Found
ページが見つかりません
URL: /foo
ステータス: 404
メッセージ: Not Found
トップへ
application.properties でカスタマイズ:
# エラー情報の出力制御
server.error.include-stacktrace=never # 本番はスタックトレース非表示
server.error.include-message=always
server.error.include-binding-errors=always
server.error.include-exception=false
server.error.whitelabel.enabled=false # 既定の Whitelabel を無効化
# エラーパス変更
server.error.path=/error
3. Spring Boot の @ControllerAdvice
例外単位で柔軟に処理を分けたい場合は @ControllerAdvice:
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
// 業務例外 → 専用画面へ
@ExceptionHandler(BusinessException.class)
public String handleBusiness(BusinessException ex, Model model) {
model.addAttribute("message", ex.getMessage());
return "error/business";
}
// 404 系 → カスタム 404 ページ
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handle404(NoHandlerFoundException ex) {
return "error/404";
}
// 想定外 → 500 ページ
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAll(Exception ex, Model model) {
log.error("予期せぬエラー", ex);
model.addAttribute("traceId", MDC.get("traceId"));
return "error/500";
}
}
// REST API の場合は @RestControllerAdvice + ResponseEntity
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity
404 を Spring Boot で捕まえるには下記設定も必要:
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
4. Laravel のエラービュー
Laravel は resources/views/errors/ 配下に対応するステータスコードのファイルを置くだけ:
resources/views/errors/
├── 404.blade.php
├── 419.blade.php ← CSRF expired
├── 500.blade.php
└── 503.blade.php ← メンテナンス{{-- resources/views/errors/404.blade.php --}}
@extends('layouts.app')
@section('title', '404 Not Found')
@section('content')
@endsection
{{-- $exception で例外オブジェクトにアクセス可 --}}
{{-- {{ $exception->getMessage() }} --}}
柔軟に処理を変えたい場合は app/Exceptions/Handler.php:
public function register(): void
{
$this->renderable(function (NotFoundHttpException $e, $request) {
if ($request->is('api/*')) {
return response()->json(['error' => 'not_found'], 404);
}
return response()->view('errors.404', [], 404);
});
}
5. Apache / nginx のエラーページ
# .htaccess または httpd.conf
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
ErrorDocument 503 /errors/maintenance.html
# 外部 URL にリダイレクト
ErrorDocument 404 https://example.com/notfoundserver {
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
internal;
root /usr/share/nginx/html;
}
# API のみ JSON で返す
location /api {
error_page 404 = @json_404;
}
location @json_404 {
default_type application/json;
return 404 '{"error":"not_found"}';
}
}
表示確認のコツ
| 確認方法 | コマンド / 操作 |
|---|---|
| 404 を出す | 適当な URL /notexist をブラウザで叩く |
| 500 を出す | テスト用 endpoint /test/error で throw new RuntimeException() |
| Status を確認 | curl: curl -I http://localhost/notexist |
| JSON / HTML の出し分け | curl: -H "Accept: application/json" で差分確認 |
FAQ
Q: Spring Boot で 404 が error/404.html に行かない
A: spring.web.resources.add-mappings=false を設定して静的リソースの自動マッピングを無効化。さらに throw-exception-if-no-handler-found=true を有効化。
Q: 本番でスタックトレースが表示されてしまう
A: Spring Boot は server.error.include-stacktrace=never。Laravel は .env の APP_DEBUG=false。
Q: メンテナンス画面を出したい
A: nginx で 503 と Retry-After ヘッダ。Laravel なら php artisan down --render="errors::503"。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- インストール(eclipseプラグイン)
- クイックスタート
- プロジェクトの作成
- Spring Bootプロジェクトの作成
- Spring Bootプロジェクトの実行
- Spring BootでHello World!
- アノテーション一覧
- DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
- DB接続設定や値の取得(JdbcTemplate編)
- ビューから値をモデルに格納しコントローラーで受け取る方法
- コントローラーにてモデルに値を格納してビューに渡す方法
- テンプレートエンジン
- ModelとModelAndViewの違い
- AOPの使用方法
- classpath: 内部ファイルの読み込み
- file: 外部ファイルの読み込み
- CSVファイルアップロード方法(Ajax)
- CSVファイルダウンロード方法(Ajax)
- Spring Bootプロジェクトのビルドと本番環境へのデプロイ方法(内部tomcat使用)
- Application.propertiesの環境依存設定の分割方法
- JPAにおけるEntityManagerの取得方法
- JPAにおけるjava.sql.Connectionの取得方法
- エラー一覧
- jarの引数を受け取る方法
- Spring BootでGmailからメール送信
- 複数のDBに接続する設定(Spring Boot & JPA編)
- ポート番号の変更
- Basic認証の実装と特定のURLに限定する方法
- Spring SecurityのBasic認証の無効化
- 独自のエラーページを定義する方法
- プロパティファイルの値やjar実行時の引数を取得する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?