目次
前提知識
基本的なWebアプリケーションの構造と動作原理
- クライアントとサーバーの役割
- HTTPリクエストとレスポンスの基本的な仕組み
これについては別記事でまとめているので参照。
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 | 概要 |
---|---|---|
core | c | 変数操作、条件分岐、制御構文URL管理などの基本的な機能 |
i18n | fmt | メッセージの形式処理、通貨などに関するロケール処理、数値や日付の形式処理機能 |
Functions | fn | コレクション(List、Map、配列など)の処理や文字列操作に関する機能 |
XML | x | XML文章の解析やXML変換機能 |
Database | sql | データベースへの接続、検索、更新、トランザクション機能などの機能 |
coreタグライブラリ
if | <c:if test="真偽式">真の場合表示するコード</c:if> |
out | <c:out value = "出力したい値" /> |
forEach | SampleRankingListのMapをforEachで回した場合(key:ID、value:名前)<c:forEach items="${SampleRankingList}" var="sample" varStatus="status"> ※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メソッドに応じて異なる処理を行うことができる
doGet
やdoPost
メソッドをオーバーライドして、それぞれのメソッドに対応する処理を記述する
リクエストとレスポンスの操作
クライアントからのリクエストパラメータの受け取り
- サーブレットは、クライアントから送信されるリクエストパラメータを受け取るために
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タグライブラリについてわかりやすくまとまっています。ありがとうございます!
JSTL coreタグライブラリの利用 - Qiita
JSTL (Java Server Pages Tag Library)JSTLは、一般によく利用されるカスタムタグをまとめ、Apache Taglibs Project (旧Jakarta Ta…
JSTLのタグライブラリの種類を参考にしました。ありがとうございます!
【Java】JSPでタグライブラリを使う(JSTL)
JSPの標準タグライブラリであるJSTLを使うことで何ができるのか紹介したいと思います。
リファレンスです。ありがとうございます!
コメント