MENU

JSP & サーブレットで一番最初に最低限抑えるべきコト

目次

前提知識

基本的なWebアプリケーションの構造と動作原理

  • クライアントとサーバーの役割
  • HTTPリクエストとレスポンスの基本的な仕組み

これについては別記事でまとめているので参照。

あわせて読みたい
Javaで一番最初に最低限抑えるべきコト 私がJavaを学ぶにあたって、一番基礎となる最初に最低限押さえるべき内容についてまとめてみました。 【Javaとは】 コンパイラ言語化つオブジェクト指向言語 Javaで作成...

Webコンテナ(通常はサーブレットコンテナ)がどのように動作するか

  • Webコンテナは、Webアプリケーションを実行するための環境で、通常はサーブレットコンテナと呼ばれる
  • サーブレットコンテナは、クライアントからのHTTPリクエストを受け取り、サーブレットやJSPなどのコンポーネントを実行し、生成されたデータをHTTPレスポンスとしてクライアントに送信する

Javaの基本的な知識

  • クラス、オブジェクト、メソッドの基本概念
  • パッケージとインポート文の使い方

大枠は理解できているので、追加したいことがあれば以下記事に追記予定。

あわせて読みたい
Javaで一番最初に最低限抑えるべきコト 私がJavaを学ぶにあたって、一番基礎となる最初に最低限押さえるべき内容についてまとめてみました。 【Javaとは】 コンパイラ言語化つオブジェクト指向言語 Javaで作成...

JSP

JSPとは何か、HTMLとの違い

  • JSPにはディレクティブ(ページ指示子)があり、ページの設定やインポート文の指定などに使用される
  • スクリプトレット内にはJavaコードを埋め込むことができ、JSPエクスプレッションを使ってJavaコードをHTML内で評価し、動的な値を表示することができる

JSPのディレクティブ(ページ指示子)とスクリプトレットの使用方法

ディレクティブ(ページ指示子)とは

  • JSPページ内でJSPコンテナに対して指示を出すための命令主にページの設定やインポートの指定に使用される
  • JSPファイルの先頭に <%@ から始まり、%> で終わる形式で記述される

ディレクティブ代表例

以下に代表的なディレクティブの例とその意味を表形式で示します。

ディレクティブコード例意味
page<%@ page language="java" contentType="text/html" %>JSPページの設定を行う
include<%@ include file="header.jsp" %>別JSPファイルを含める
taglib<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>JSTLタグライブラリを使用するための設定
directive.include<%@ directive.include file="footer.jsp" %>ディレクティブインクルードを実行する
taglib.prefix<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>特定の接頭辞をJSTLタグライブラリに関連付ける

JSPエクスプレッションとスクリプトレット内でのJavaコードの埋め込み方法

JSPエクスプレッションとは

  • JSPページ内でJavaコードを埋め込み、その結果を動的にHTMLコードに挿入するためのもの
  • エクスプレッションは、${} で囲まれた部分にJava式を記述する
  • エクスプレッション内では、変数の値やメソッドの結果などを表示することができる
<!-- エクスプレッション例 -->
<p>Hello, <%= request.getParameter("name") %></p>

エクスプレッション代表例

エクスプレッションコード例意味
変数表示${userName}userName 変数の値を表示する。
メソッド呼び出し${Math.random()}Math.random() メソッドの結果を表示する。
式の評価${2 + 3}数式の評価結果を表示する。

スクリプトレットとは

  • JSPページ内でJavaコードを埋め込むためのもの
  • <% %> タグで囲まれた部分にJavaコードを記述する

スクリプトレット代表例

スクリプトレットコード例意味
変数の定義と表示<% int age = 25; out.println(age); %>age 変数を定義して表示する。
ループ処理<% for (int i = 0; i < 5; i++) { out.println(i); } %>ループで変数をインクリメントしながら表示する。
メソッド呼び出し<% String result = calculate(); out.println(result); %>calculate() メソッドを呼び出して結果を表示する。

JSTL

  • Java Server Pages Tag Libraryの略、一般的によく使用されるタグライブラリをまとめたもの
種類prefix概要
corec変数操作、条件分岐、制御構文URL管理などの基本的な機能
i18nfmtメッセージの形式処理、通貨などに関するロケール処理、数値や日付の形式処理機能
Functionsfnコレクション(List、Map、配列など)の処理や文字列操作に関する機能
XMLxXML文章の解析やXML変換機能
Databasesqlデータベースへの接続、検索、更新、トランザクション機能などの機能

coreタグライブラリ

if<c:if test="真偽式">真の場合表示するコード</c:if>
out<c:out value = "出力したい値" />
forEachSampleRankingListのMapをforEachで回した場合(key:ID、value:名前)
<c:forEach items="${SampleRankingList}" var="sample" varStatus="status">
<p>${status.count}位:${sample.value}</p>
</c:forEach>

※indexだと要素番号(0から始まる)が取得でき、countだとループ数(1から始まる)が取得できる
  • 継承しているクラスの場合、継承元のクラスでresponseにaddされているリスト等は、JSP内で利用できる
  • 同様にincludeしたJSPファイルでも、元のJSPで受け取っているリスト等は利用できる

サーブレット

Webコンテナ(通常はサーブレットコンテナ)がどのように動作するか

  • Webアプリケーションを実行するための環境であり、通常サーブレットコンテナと呼ばれる
  • サーブレットコンテナは、クライアントからのHTTPリクエストを受け取り、サーブレットやJSPなどのコンポーネントを実行し、生成されたデータをHTTPレスポンスとしてクライアントに送信する

サーブレットのライフサイクル(初期化、サービス、破棄など)

サーブレットは、初期化、サービス、破棄というライフサイクルを持つ

初期化サーブレットが最初に作成されるときに1度だけ呼び出される
通常、データベース接続などの初期設定が行われる
サービスクライアントからのリクエストごとに呼び出され、実際の処理が行われる
破棄サーブレットがアンロードされる際に呼び出され、リソースの解放などの後処理が行われる

アンロード

  • プログラムやコンポーネントを終了することではなく、それらが利用していたリソースを解放することを指す
  • アンロードが行われると、そのプログラムやコンポーネントはメモリから削除され、他のタスクやプログラムがメモリやリソースを利用できるようになる

サーブレットクラスの作成と設定

  • サーブレットクラスは、Javaプログラムで書かれたコンポーネントであり、クライアントからのリクエストを受け取り、それに応じて動作する役割を果たす
  • このクラスは javax.servlet.Servlet インターフェースを実装する必要がある
  • web.xml ファイルにサーブレットのマッピング情報を記述して、URLとサーブレットの対応付けを行う
    • 以下の場合、com.example.MyServlet というサーブレットクラスを MyServlet という名前で定義し、/myservlet というURLパターンと対応付け
<!-- web.xmlでサーブレットを対応づけ -->
<servlet> 
  <servlet-name>MyServlet</servlet-name> 
  <servlet-class>com.example.MyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
  <servlet-name>MyServlet</servlet-name> 
  <url-pattern>/myservlet</url-pattern> 
</servlet-mapping>

HTTPメソッド(GET、POSTなど)の処理

  • サーブレットは、HTTPメソッドに応じて異なる処理を行うことができる
  • doGetdoPost メソッドをオーバーライドして、それぞれのメソッドに対応する処理を記述する

リクエストとレスポンスの操作

クライアントからのリクエストパラメータの受け取り

  • サーブレットは、クライアントから送信されるリクエストパラメータを受け取るために request.getParameter メソッドを使用する
  • これにより、フォームデータやクエリパラメータなどを取得できる

サーバーからのレスポンスの生成と送信

  • サーブレットは、クライアントに対するレスポンスを生成し、response.getWriter() メソッドを使用してレスポンスをクライアントに送信する
  • HTMLコードやテキストデータなどを送信することができる

セッション管理

セッションの基本概念と役割

  • セッションは、ユーザーごとに一意の識別子(セッションID)を用いて、ユーザーの状態を管理する仕組み
  • セッションは、異なるリクエスト間でのデータ共有や状態の保持に利用される

セッションスコープのデータの保存と取得

  • サーブレットでは、session.setAttribute メソッドを使用してセッションスコープにデータを保存し、session.getAttribute メソッドを使用してデータを取得することができる

データベース連携

JDBCを使用したデータベースへの接続とクエリ実行

  • JDBC(Java Database Connectivity)を使用して、Javaプログラムからデータベースに接続し、クエリを実行することができる
  • 以下例のように、Connection、Statement、ResultSetなどのクラスを使用して操作する
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcExample {

    public static void main(String[] args) {
        String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "yourUsername";
        String password = "yourPassword";

        try {
            // ドライバのロード
            Class.forName("com.mysql.cj.jdbc.Driver");

            // データベースへの接続
            Connection connection = DriverManager.getConnection(jdbcUrl, username, password);

            // ステートメントの作成
            Statement statement = connection.createStatement();

            // クエリの実行
            String sqlQuery = "SELECT * FROM employees";
            ResultSet resultSet = statement.executeQuery(sqlQuery);

            // 結果の処理
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");

                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            }

            // リソースのクローズ
            resultSet.close();
            statement.close();
            connection.close();

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

データベースからのデータの取得と表示

取得したデータはResultSetから取り出し、サーブレット内で処理して表示することができる。

モデル-ビュー-コントローラー(MVC)の理解

アプリケーションの構造をMVCパターンで設計する方法

  • MVCパターンは、アプリケーションをモデル(データ処理)、ビュー(表示)、コントローラー(制御)の3つのコンポーネントに分割し、それぞれの責任を明確にするための設計パターン
  • アプリケーションの保守性と拡張性を向上させる

エラーハンドリングとデバッグ

例外のキャッチと適切なエラーハンドリング

  • サーブレット内で発生する例外をキャッチし、適切なエラーハンドリングを行うことで、ユーザーに対するエラーメッセージの表示やログの記録などを行うことができる

ログの使用とデバッグ手法

  • ログはアプリケーションの実行中に情報を記録するためのツール
  • ログを使用して実行時の問題を追跡し、デバッグや運用監視を行う

セキュリティ考慮

フォームの入力検証とクロスサイトスクリプティング(XSS)対策

  • フォームの入力値を適切に検証して不正なデータの送信を防止し、XSS(クロスサイトスクリプティング)攻撃を防ぐために、ユーザーからの入力をエスケープする必要がある

クリックジャッキングなどの脆弱性からの保護方法

  • クリックジャッキングやCSRF(クロスサイトリクエストフォージェリ)などの攻撃からアプリケーションを保護するためには、適切なセキュリティ対策が必要
  • ヘッダーの設定やトークンの利用などが考えられる

学習コンテンツ

Web

coreタグライブラリについてわかりやすくまとまっています。ありがとうございます!

Qiita
JSTL coreタグライブラリの利用 - Qiita JSTL (Java Server Pages Tag Library)JSTLは、一般によく利用されるカスタムタグをまとめ、Apache Taglibs Project (旧Jakarta Ta…

JSTLのタグライブラリの種類を参考にしました。ありがとうございます!

正社員求人案件 | フリーランス案...
【Java】JSPでタグライブラリを使う(JSTL) JSPの標準タグライブラリであるJSTLを使うことで何ができるのか紹介したいと思います。

リファレンスです。ありがとうございます!

あわせて読みたい
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

関西在住のWebエンジニア。二児の娘と妻との4人家族。
自身の経験や知識をせっかくまとめるなら、誰かの参考になるかもと考えブログを開設。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

目次