0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jsp

Last updated at Posted at 2024-08-28

自分なりのまとめ:writing_hand:

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>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?