5月22日

ServletとJSP

WebアプリケーションとはどういうものなのかをPowerPointで説明。

Webアプリケーション

プロジェクトを作成する

Eclipseで[新規]-[プロジェクト]を選択
Webの下にある[動的Webプロジェクト]を選択
プロジェクト名: tomcat
ターゲットランタイム: Apache Tomcat v8.0
「次へ」→「次へ」→「完了」でプロジェクトを作成する

HelloWorldServlet

Eclipseで[新規]-[その他]-[サーブレット]を選択
パッケージ名は jp.abc とする
クラス名は HelloWorldServlet とする

Tomcatサーバーの準備

Eclipseで[Java EE]パースペクティブを選択すると、画面の下に[サーバー]タブが表示される。
新規サーバーを作成する。
Tomcat8サーバーを作成し、tomcat プロジェクトを追加してサーバーを開始する。
ツールバーの[Webブラウザーを開く]をクリックし、以下のURLを入力する。

http://localhost:8080/tomcat/HelloWorldServlet

日時表示

HelloWorldServletを変更してブラウザ上に日時を表示してみる。

package jp.abc;

import java.io.IOException;
import java.io.Writer;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 */
@WebServlet("/HelloWorldServlet")
public class HelloWorldServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorldServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Writer w = response.getWriter();
		w.append("<html>");
		w.append("<body>");
		w.append(new Date().toString());
		w.append("<p>");
		w.append("Served at: ").append(request.getContextPath());
		w.append("<br />");
		w.append("Hello World!");
		w.append("</p>");
		w.append("</body>");
		w.append("</html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

JSPを作ってみる

WebContent フォルダを右クリックし[新規]-[JSPファイル]を選択する。
ファイル名を hello.jsp とする。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<p>JSPはTomcatによって、自動的にServletに変換されます。</p>
</body>
</html>

以下のURLにアクセスするとJSPの内容が表示される。

http://localhost:8080/tomcat/hello.jsp

JSTL

JSTLはJavaServerPages Standard Tag Libraryの略で、よく使われる便利なタグが用意されている。

\\kgakusei1\share\澤田\jstl\lib から Eclipseの WebContent – WEB-INF – lib フォルダにコピーする。

JSPの先頭にJSTLを使うためのコードを追加する。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>

スクリプトレットでデータを用意し、requestに設定して c:forEach ループで利用してみる。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<p>JSPはTomcatによって、自動的にServletに変換されます。</p>
<%="TEST!!" %><BR>
<%=(20+30)*10 %><BR>
<%=new java.util.Date() %><BR>
<%-- JSPコメント --%>
<!-- HTMLコメント -->

${request.method}
<%=request.getMethod() %>
<br />

<%
	List<String> list = new ArrayList<>();
	list.add("キリン");
	list.add("サッポロ");
	list.add("アサヒ");
	request.setAttribute("data", list);
%>

<c:forEach var="s" items="${data}" varStatus="status">
	${status.index} : ${s} <br />
</c:forEach>

</body>
</html>

ServletとJSPの連携

Servletで作成したデータをJSPで表示する。

DispatchServletを作成する。

package jp.abc;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DispatchServlet
 */
@WebServlet("/DispatchServlet")
public class DispatchServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DispatchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<String> list = new ArrayList<>();
		list.add("ドラゴンクエスト");
		list.add("ゼルダの伝説");
		list.add("ファイナルファンタジー");
		request.setAttribute("game", list);
		RequestDispatcher rd = request.getRequestDispatcher("hello.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

hello.jsp 側で forEach を増やす。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World</h1>
<p>JSPはTomcatによって、自動的にServletに変換されます。</p>
<%="TEST!!" %><BR>
<%=(20+30)*10 %><BR>
<%=new java.util.Date() %><BR>
<%-- JSPコメント --%>
<!-- HTMLコメント -->

${request.method}
<%=request.getMethod() %>
<br />

<%
	List<String> list = new ArrayList<>();
	list.add("キリン");
	list.add("サッポロ");
	list.add("アサヒ");
	request.setAttribute("data", list);
%>

<c:forEach var="s" items="${data}" varStatus="status">
	${status.index} : ${s} <br />
</c:forEach>

<c:forEach var="s" items="${game}" varStatus="status">
	${status.index} : ${s} <br />
</c:forEach>
</body>
</html>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です