📚

ITスクールのWEB開発授業~「CustomTag」まとめ~外部ライブラリー「jstl.jar」を利用した条件文、反復分例文

2023/09/16に公開

前書き

今回はCustomTagの中でも、基本的には使えず外部からライブラリー(.jar)があってから使えるCustomTag、そのなかでも「jstl.jar」を使った例文をまとめてみる。

「jstl.jar」を利用すると、jspで<% %>ブロックの中にjava言語を使ってできた条件文、反復文、Format[1]をよりHTMLに近い言語、つまりDOMインスタンスの形式で使うことができる。

今回のコードでは、最初のページで数字を1字入力すると、他のページでその数字を使って上記した文法を使ってみる。

今回の例文では、jstlを使うCustomTagのコードだけに注釈をつける。WEBページの間での移動を担当するコードが分からない場合は、前のまとめを参考しよう。

「jstl.jar」を使った、条件文、反復文、例外処理文まとめ

jstl.jarを使うには、jspファイルの上段に「jstl文法を、このキーワードで使います」という意味のコードを追加する。下記のjspコードの注釈を注目しよう。

とりあえず、最初に実行するServletと数字を入力するページのコードから見せて、最後にjstlを使うjspファイルのコードを見せる。

JSTLCController

@WebServlet("/JSTLCController")
public class JSTLCController extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	if(!request.getParameterNames().hasMoreElements()) {
		request.setAttribute("contentPage", "jstlc/input.jsp");
	} else {
		request.setAttribute("contentPage", "jstlc/output.jsp");
	}

	request.getRequestDispatcher("index.jsp").forward(request, response);
	}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}
}
input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action = "JSTLCController">

		入力数字 : <input name = "n"><p>
		<button>output.jspに伝送</button>

	</form>
</body>
</html>

output.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--jstlの「core」というものを「c」という名前で使うために、下のコードを入力。 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>${param.n}</h1>
   <!-- if条件文-->
   <c:if test="${param.n % 2 ==0}"> <!--input.jspからもらった値を2に割ったあまり値が2であるなら -->
   偶数
   </c:if>

   <!-- if-else文とswitch-caseが混ざってある形-->
   <c:choose>
      <c:when test="${param.n > 10 }"><!-- input.jspからもらった値が10より大きいなら -->
         10より大きいです。
      </c:when>
      <c:when test="${param.n>5 }"> <!--値が11よりは小さい場合、5よりは大きいなら-->
         6~10の数字です。
      </c:when>
      <c:otherwise><!-- 上記の場合でないなら -->
         5以下の数字です。
      </c:otherwise>
   </c:choose>

   <!-- 反復文-->
  <!--下記のコードはjava言語での反復文である。これを見ながらjstlの反復文を理解しよう。-->
   <%
      //for(int i=1; i<5; i+=2){
           //System.out.print(i);   
      //}
   %>

   <c:forEach var="v" begin="1" end="${param.n}" step="2">
	<!--「--var="v"」は「int i =」にあたる。反復文で使う変数を宣言する。-->
	<!--「begin="1"」は 「i = 1」にあたる。反復を始まるときに初期化する値を表す。-->
	<!--「end="${}"」は 「i <= ${}」にあたる。反復を終える条件になる値を表す。 -->
	<!--「step=""」は 「i+=」にあたる。反復が繰り返すとき、変化する値を表す。 -->
      <marquee>${v }</marquee>
   </c:forEach>
   <hr>

  <!--Improved for文-->
  <!--javaでの例文。これを見ながらjstlコードを見よう。 -->
   <%
      //for(int i :ar){
         //System.out.print(i);
      //}   
   %>
   <!--「var=""」は「int i」に当たる。持ってきたインスタンスの要素を表す。-->
   <!--「items=""」は 「:""」に当たる。要素を持ってくるインスタンスを表す。 -->
   <c:forEach var="i" items="&{ar }" >
      <marquee>${i }</marquee>
   </c:forEach>
   <hr>
  
   <!--jstlで使うtry-catch文 -->
   <c:catch var="myExcept"> <!--例外チェックの結果になる変数を宣言-->
      <% int result =100/2; %><!--例外をチェックする変数を宣言-->
      計算の結果 : <%=result %>
   </c:catch>
   <br>
   <c:catch var="myExcept">
     <% int result =100/0; %>
      計算の結果 : <%=result %><!--例外が発生するコードを作成-->
   </c:catch>
   <c:if test="${myExcept!=null}"><!--100/0;コードでnull例外が発生した。-->
       エラーが発生しました。: ${myExcept.message }
   </c:if>

</body>
</html>

以上で、htmlに近いDOMインスタンスの形で反復文、条件文、例外文を作成してみた。まだJSPで<% %>を使うときと何が違うのかはまだ分からない。.jarファイルも追加することは不便であるが、あとで他のライブラリーを使うともっと様々な機能を使えると思うので、忘れないように頑張ってみる。

脚注
  1. データを数字、文字列、日付形式に変換することをいう。 ↩︎

Discussion