自分なりのまとめ
JSPとは
JavaServer Pagesの略。
サーブレットと同じ、サーバサイドプログラム。サーブレットクラスの代わりにJSPファイルを使用する。サーブレットクラスでできることはJSPファイルでもできる。
JSPは基本的にHTMLページで、そこにJavaコードを埋め込むことができる。それにより、Webページの中で動的な処理を行い、動的なコンテンツを生成することができる。
代表的なディレクティブ
①pageディレクティブ
JSP全体に影響を与える設定を行う。
属性 | 説明 |
---|---|
language | スクリプト言語を指定。通常はjavaだが、他のJSPでサポートされるスクリプト言語を指定することも可能 |
contentType | JSPファイルのレスポンスのMIMEタイプ及びエンコーティングを指定。クライアントが受け取るデータの形式を定義 |
pageEncoding | JSPページ自身のエンコーティング方式を指定。JSPファイルを読み込む際に使用される文字エンコーティングを設定 |
extends | JSPページがServletに変換された際に、サーブレットが継承するクラスを指定。デフォルトではHttpServletを継承するが、カスタムクラスを指定することも可能 |
import | SPページ内で使用するJavaのクラスやパッケージをインポート。複数のクラスをインポートする場合は、カンマで区切る |
errorPage | ページ内で発生した例外がキャッチされなかった場合に、リダイレクトされるエラーページを指定。 |
session | セッションの有無を指定。この属性がtrue の場合はHTTPセッションが利用され、false だどセッションを使用しない。 |
<%-- ContentType --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%-- pageEncoding --%>
<%@ page pageEncoding="UTF-8" %>
<%-- import --%>
<%@ page import="java.util.Date, java.util.List" %>
②includeディレクティブ
他のファイルを静的にインクルード(読み込む)する。JSPページの中に他のHTMLファイルやJSPファイルの内容を挿入することができる。インクルードされたファイルはコンパイル時に1つのページとして扱われる。
主にヘッダーやフッターにような共通部分を再利用するときに使用する。
<%@ include file="header.jsp" %>
③taglibディレクティブ
JSPでカスタムタグライブラリを使用する。これを使うことで、JSTL(JavaServer Pages Standard Tag Library)や独自に定義したカスタムタグを使用できる。
uri
使用するタグライブラリのURIを指定。STLなどの標準ライブラリには既定のURIがあり、それを指定する。
prefix
カスタムタグを使用する際の接頭辞(プレフィックス)を指定。このプレフィックスを使ってタグを呼び出す。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
スクリプトタグ
JSP内でjavaコードを直接埋め込む為のタグ。
スクリプトタグを使用することで、JSPページに動的なロジックを追加できる
①スクリプトレットタグ
JSPページ内にJavaコードを直接埋め込む為のタグ。
こんにちは と表示させる
<%
out.println("こんにちは");
%>
②式タグ<%= ..... %>
Javaの式を評価し、その結果を直接HTMLとして出力する。式タグは出力を自動的にout.printで書き出すため、簡潔なコードを書ける。
現在時刻の表示
<%= "現在の時刻: " + new java.util.Date() %>
③宣言タグ<%! .... %>
JSPページ内でクラスレベルの変数やメソッドを定義するためのタグ。このタグ内に書かれたコードは、JSPがサーブレットに変換される際に、クラスレベルのメンバーとして定義される。
int型の変数numを宣言し、0で初期化
<%!
int num=0;
%>
④コメント<%-- .... --%>
<%-- コメントを入れる --%>
コードを書いてみる
日時を表示
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat, java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="ContentType" content="text/html; charset=UTF-8">
<title>時刻表示</title>
</head>
<body>
<%
//現在の日時を取得
Date now = new Date();
//日付のフォーマットを指定
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分");
//フォーマットした日付を文字列として取得
String formattedDate = sdf.format(now);
%>
<p>現在の日時は、<%= formattedDate %>です</p>
</body>
</htm
入力フォーム
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="ContentType" content="text/html; charset="UTF-8">
<title>入力フォーム</title>
</head>
<body>
<h2>ユーザー情報を入力してください</h2>
<form method="post" action="display.jsp" >
名前:<input type="text" name="name"><br><br>
年齢:<input type="text" name="age"><br><br>
出身:<input type="text" name="from"><br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="ContentType" content="text/html; charset=UTF-8">
<title>表示画面</title>
</head>
<body>
<h2>ユーザ情報</h2>
<p>名前:<%= request.getParameter("name") %></p>
<p>年齢:<%= request.getParameter("age") %></p>
<p>出身:<%= request.getParameter("from") %></p>
</body>
</html>
定義済みオブジェクト
JSPや他のプログラミング環境において、しすてむによって自動的に提供される。
オブジェクト名 | 説明 |
---|---|
request | クライアントからサーバーへのリクエストを表すオブジェクト。HTTPリクエスト情報にアクセス可能 |
response | サーバーからクライアントへのレスポンスを表すオブジェクト。レスポンスの設定や出力を制御 |
out | クライアントに出力するためのオブジェクト。HTMLや文字列を送信 |
sessio | クライアントとサーバー間のセッションを管理するオブジェクト。セッションスコープでデータ共有 |
applicatio | Webアプリケーション全体でデータを共有するためのオブジェクト |
pageContext | JSPページ全体の情報にアクセスするためのオブジェクト。他のスコープにもアクセス可能 |
page | 現在のJSPページ自身を表すオブジェクト。通常thisキーワードで使用 |
exception | SPページでエラーが発生した場合の例外情報にアクセスするオブジェクト |
request
対応クラス:jakarta.servlet.http.HttpServletRequest
クライアントから送信されたフォームデータ(名前・年齢)を取得
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>リクエストパラメータの取得</title>
</head>
<body>
<h2>リクエストパラメータの取得</h2>
<%
// クライアントから送信された名前と年齢を取得
String name = request.getParameter("name");
String age = request.getParameter("age");
%>
<p>名前: <%= name %></p>
<p>年齢: <%= age %></p>
</body>
</html>
response
対応クラス:HttpServletRequest
クライアントを別のURLにリダイレクトする
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// クライアントにリダイレクトを行う
response.sendRedirect("https://www.example.com");
%>
session
対応クラス:ttpServletResponse
ユーザ名をセッションに保存し、別のページでそのデータを取得
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// セッションにユーザー名を保存
session.setAttribute("userName", "山田太郎");
%>
<!DOCTYPE html>
<html>
<head>
<title>セッションの使用</title>
</head>
<body>
<h2>セッションから取得したユーザー名</h2>
<p>ユーザー名: <%= session.getAttribute("userName") %></p>
</body>
</html>
out
対応クラス:JspWriter
クライアントにテキストを出力させる
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// クライアントに文字列を書き出す
out.println("Hello, JSP World!");
%>
application
対応クラス:ServletContext
Webアプリケーション全体で共有されるデータ(アプリケーション名)を設定し、それを表示する
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// アプリケーション全体で共有されるデータを設定
application.setAttribute("appName", "MyJSPApp");
%>
<!DOCTYPE html>
<html>
<head>
<title>アプリケーションスコープの使用</title>
</head>
<body>
<h2>アプリケーション名</h2>
<p>アプリケーション名: <%= application.getAttribute("appName") %></p>
</body>
</html>