見出し画像

職業訓練でJavaを学ぶ!27日目(3/3)「Javaプログラミング実習(JSP/Servlet編)」

職業訓練で、Javaを使ったWebシステム開発・Androidアプリ開発を学ぶことになりました。復習かねて情報発信をします!
これから職業訓練に通うことを検討している方の参考になれば嬉しいです。

↓↓職業訓練に通うことになった経緯はこちら
https://note.mu/yukoro/n/ned8d43b0110d

本日の授業

・Webシステム入門
・JSP入門
・JSP基礎 ←この記事


JSP基礎

この記事ではJSPの基本的な構文について書いていきます。

JSPで設定や処理を記述する場合は、JSP専用のタグを使っていきます。

書式:
--------------------------
・ディレクティブ
 <%@     %>
・アクションタグ
 <jsp:     >
・スクリプティング要素
 <%     >
・コメント
 <%--     --%>
--------------------------
使うタグは限られているため、よく使うものから押さえていけばOKです。

これらについて順番に説明していきます。


■ディレクティブ

ディレクティブはjspファイルの一行目に書く指示文で、JSPページをどのように処理するかを指示します。

ディレクティブは3種類あります。
– pageディレクティブ
– includeディレクティブ
– taglibディレクティブ

下記の書式のように、「 <%@ 」 で始まり 「 %> 」 で終わります。
ディレクティブの種類と属性を指定します。属性は、ディレクティブの種類によって異なります。

書式:
-----------
<%@ ディレクティブの種類 属性1="値1" 属性2="値2" ... %>
-----------


ディレクティブの種類について、もう少し詳しくみていきましょう。

◇pageディレクティブ
ページに関する設定を行います。

書式:
-----------
<%@ page 属性1="値1" 属性2="値2" ... %>
-----------

代表的な属性と値:
-----------
pageEncoding
 - 使用する文字コードの指定
 - 例)pageEncoding="UTF-8"
import
 - 使用するクラスやパッケージのインポート指定。カンマ区切りで複数の値を指定可能
 - 例)import="java.util.Arrays"
session
 - セッションを利用するかどうかの指定
 - 例)session="true"
isELIgnored
 - EL式を無視するかどうかの指定
 - 例)isELIgnored="false"
isErrorPage
 - 現在のページがエラー専用ページかどうかの指定
 - 例)isErrorPage="true"
errorPage
 - 例外が発生した場合に表示するページのパスの指定
 - 例)errorPage="error.jsp"
-----------


次にディレクティブを記述ルールを紹介します。

・複数に分けて記述してOK

<%@ page pageEncoding="UTF-8" %>
<%@ page isELIgnored="false" %>
<%@ page session="true" %>

・同じ属性を重複して記述できない
・ただしimport属性のみ重複して記述できる

//NG例
<%@ page session="true" %>
<%@ page session="false" %>
//OK例
<%@ page import="java.util.Arrays" %>
<%@ page import="java.io.File" %>


◇includeディレクティブ
他のファイル内容を取り込む場合に使います。

書式:
-----------
<%@ include file="取り込むファイルの相対パス" %>
-----------


インクルードしたコードが取り込まれるのは、インクルードする側がServletに変換されるタイミングです。これを「静的インクルード」と言います。読み込み側のjspと読み込まれたjspから、一つのServletが生成されます。


・リクエスト
  ↓
・jspファイル(.jsp)HTMLとJSPが混在
--------Servletコンテナの仕事--------
  ↓自動変換 ← ★インクルードしたコードの読み込み
・Servlet(.java)
  ↓自動コンパイル
・コンパイル済み(.class)
  ↓実行
--------------------------------------
・HTML
  ↓
・レスポンス


JSPからServletに変換されるのは、JSPファイルが更新されたタイミングです。そのため、インクルードされる側を更新した後に、インクルードする側を再変換しなければ取り込みも行われないため注意が必要です。ただしバージョン4.1以降のTomcatでは、インクルード元の更新は不要です。


◇taglibディレクティブ
タグライブラリをJSP内で利用する際に使用します。

書式:
-----------
<%@ taglib prefix="接頭辞" uri="タグライブラリのURI" %>
-----------

タグライブラリというのは、JSPでタグのライブラリを利用できる仕組みです。このタグは独自で作成して利用することもできますし、標準で用意されているタグを利用することもできます。

標準で用意されているタグライブラリを利用する場合は、このように記述します。
------------
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
------------


■アクションタグ

外部にあらかじめ用意された処理を、JSP内で呼び出して実行するためのタグです。

下記の書式のように、「 <jsp:   で始まり 「 />  で終わります。

書式:
-----------
<jsp:アクション名 属性1="値1" 属性2="値2" ... />
-----------
※最後にスラッシュが必要です。


アクションの種類:
-----------
<jsp:forward />
 - 処理を転送
<jsp:include />
 - 外部ファイルをインクルード
<jsp:useBean />
 - JavaBeansクラスをインスタンス化
<jsp:getProperty />
 - JavaBeansのプロパティ値を取得
<jsp:setProperty />
 - JavaBeansのプロパティ値を設定
-----------


読み込み元と読み込み先で一つのServletが生成されるincludeディレクティブと異なり、アクションタグでのページの取り込みでは、別々のServletが生成され、別々のServlet同士が連携して一つのHTMLを生成します。これを「動的インクルード」と言います。

書式:
---------------
<jsp:include page="取り込むページの相対パス" />
---------------


■スクリプティング要素

JSP内にJavaコードの断片を埋め込むための記述方法です。

下記の書式のように、「 <%   で始まり 「 >  で終わります。

書式:
-----------
<% Javaのコード %>
-----------


スクリプティング要素には下記のような種類があります。
 -スクリプトレット
 - 宣言
 - 式


◇スクリプトレット
JSP内にJavaのコードを直接記述する際に使います。

書式:
-----------
<% Javaのコード %>
-----------

下記のように複数行で書くことも可能です。

<% 
Javaのコード 
Javaのコード
%>


スクリプトレットのコードは、JSP内に複数記述することができます。HTMLコードをまたいで記述することも可能です。ただし、スクリプトレット内にメソッドを記述することはできません

例)HTMLコードをまたいだスクリプトレット

<% if(age <= 20) { %>
    <p>お酒NG</p>
<% } else { %>
    <p>お酒NOK</p>
<% } %>


このスクリプトレットに大量のロジック処理を書いてしまうと、コードが煩雑になってしまいます。JSP内に全ての処理を記述するのではなく後出
のServletやJavaBeansなどと役割分担をしながらシステム構築をするのが一般的です。


JSP内で暗黙的に利用できるオブジェクト:
---------------
request
 - クライアントからのリクエスト情報
response
 - クライアントへのレスポンス情報
out
 - クライアントへの出力を担当するオブジェクト
pageContext
 - JSPで使われる全オブジェクトを管理するオブジェクト
session
 - セッション情報
application
 - ユーザ間で共有可能な情報
page
 - JSPページ自身を表す情報
config
 - サーブレットの初期化パラメータ情報
exception
 - 例外発生時のエラー情報
---------------

例)暗黙オブジェクトoutを使った、JSP内での現在時刻の出力

<p>
<%
Date now = new Date();
out.println(now);
%>
</p>


◇宣言
JSP内で利用する変数やメソッドの定義の記述です。

書式:
------------
<%! Javaのコード %>
------------


コンテナが再起動した時や、JSPファイルが更新された時などのJSPがコンパイルされるタイミングで一度だけ実行されます。

この宣言の注意点としては、変数の宣言とメソッドの定義しか行えない点です。また、暗黙オブジェクトの使用も不可です。

ここで宣言した変数は JSPが再びコンパイルされるまで値を保持します。


◇式
JSP内で値を簡単に出力する記述です。

書式:
------------
<%= 式 %>
------------

変数の値や式の結果、メソッドの戻り値をHTML内に埋め込むことができます。つまり <% out.println(式); %> と同じ意味になります。

例)現在時刻を取得してHTML内に埋め込む

<%
Date now = new Date();
%>
<h1>現在時刻</h1>
<p><%= now %></p>


■コメント

JSPファイルにコメントを記述します。
下記の書式のように、「 <%--   で始まり 「 --%>  で終わります。

書式:
-----------
<%-- コメント --%>
-----------

下記のような書き方もできます。

<%-- コメント --%>

<%--
<% out.println("コメントアウト"); %>
--%>

<%
// out.println("コメントアウト");
%>

<%
/*
out.println("コメントアウト");
*/
%>



JSP基礎については以上です。

最後までお読みいただきありがとうございました!


この記事が気に入ったらサポートをしてみませんか?