教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習

リクエスト処理

ユーザからのクエリ情報の取得

次のプログラム query.jsp は、ブラウザの リクエスト(HTTPのGETリクエスト)に対して、JSP内で動的に 生成したHTML文章を返す。

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" %>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>クエリ情報を取得する</title>
</head>
<body>
<h1>クエリ情報一覧</h1>
<table border="1">
<%
Enumeration enmNam=request.getParameterNames();
while(enmNam.hasMoreElements()){
	String strNam=(String)(enmNam.nextElement());
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>" + request.getParameter(strNam) + "</td></tr>");
}
%>
</table>
</body>
</html>

たとえば、Webサーバが動いているホストlocalhostのWebアプリケーションの ルートディレクトリ下に格納されている、JSPファイルquery.jspを実行する。 そうすると、ブラウザが起動され、その上でユーザリクエストのクエリ情報が 表示される。なお、ユーザリクエストのクエリ情報とは、URLの末尾「?〜」以降に 付加された「キー名=値」の組のことを表す。

プログラム query.jsp の説明

ユーザリクエストのクエリ情報は、表形式で表示される。 表を表示させるためには、最低限、「表であることを示す タグ」、「表の中の1行を指定するタグ」、「表の各項目を 指定するタグ」の3つが必要である。表の各項目を<td> で定義し、いくつかの<td>〜</td>タグをまとめ て<tr>〜</tr>タグで囲み、さらに、 <tr>〜</tr>タグを<table>〜</table> タグで囲むのが、表を作る3つのタグの基本的な構造である。

表の定義は

<table border="1">
    〜
</table>
によっておこなわれる。

クエリ情報の取得は、

<%
Enumeration enmNam=request.getParameterNames();
while(enmNam.hasMoreElements()){
	String strNam=(String)(enmNam.nextElement());
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>" + request.getParameter(strNam) + "</td></tr>");
}
%>
によりおこなわれる。

requestオブジェクトのgetParameterNamesメソッドは、

Enumeration enmNam=request.getParameterNames();
によって、取得したクエリ情報に含まれるすべての「キー名情報」 を返す。このすべてのキー名情報のセットは、 Enumerationオブジェクトの変数enmNamに格納される。

以下では、

while(enmNam.hasMoreElements()){
	String strNam=(String)(enmNam.nextElement());
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>" + request.getParameter(strNam) + "</td></tr>");
}

求められたキー名情報セットから1つずつ「キー名情報」を取り出して、 すべての情報がなくなるまで、「キー名情報」とそのパラメータを表の行形式にて 表示することを繰り返す。

フォーム情報の取得

以下のp_query.htmlでは、Formタグのaction属性の値には、 送信ボタンが押された時に、ラジオボタンにより選択された 内容が、JSPプログラムである p_query.jspにPOSTメソッド を用いて送信されることを指定されている。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>フォーム情報を取得する</title>
</head>
<body>
<h1>フォーム情報を取得する</h1>
<form method="POST" action="p_query.jsp">
<table border="0">
	<tr>
		<th align="right">名前:</th>
		<td><input type="text" name="nam" size="15" /></td>
	</tr>
	<tr>
		<th align="right">よく使う言語:</th>
		<td>
			<input type="checkbox" name="lang" value="jsp" />Java(JSP/Servlet)
			<input type="checkbox" name="lang" value="python" />Python
			<input type="checkbox" name="lang" value="php" />PHP
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" value="登録" /><input type="reset" value="取消" />
		</td>
	</tr>
</table>
</form>
</body>
</html>

次のプログラム p_query.jsp は、HTMLフォームから入力されたデータを 受け取って表示する。HTMLフォームから入力されたデータは、POSTメソッ ドによりJSP に送信される。 このプログラムでは、ユーザリクエスト情報 からクエリ情報をgetParameterNamesメソッドにより取得して、その内容を 表示する。

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" %>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>クエリ情報を取得する</title>
</head>
<body>
<h1>クエリ情報一覧</h1>
<table border="1">
<%
Enumeration enmNam=request.getParameterNames();
while(enmNam.hasMoreElements()){
	String   strNam=(String)(enmNam.nextElement());
	String[] strVal=request.getParameterValues(strNam);
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>");
	for(int i=0;i<strVal.length;i++){out.println(strVal[i] + " ");}
	out.println("</td></tr>");
}
%>
</table>
</body>
</html>

たとえば、JSPファイルであるp_query.jspとHTMLファイルであるp_query.html は、Webサーバが動いているホストlocalhostのWebアプリケーションの ルートディレクトリ下に格納される。 JSPプログラムを実行するためには、p_query.htmlを実行する。 これにより、ブラウザが起動しHTMLフォームが表示される。ブラウザ上か らデータを入力して(ラジオボタンを選択し)、送信ボタンを押すと、 ユーザリクエストのクエリ情報が表示される。

プログラム p_query.html の説明

フォームからのデータの入力は、

<form method="POST" action="p_query.jsp">
<table border="0">
	<tr>
		<th align="right">名前:</th>
		<td><input type="text" name="nam" size="15" /></td>
	</tr>
	<tr>
		<th align="right">よく使う言語:</th>
		<td>
			<input type="checkbox" name="lang" value="jsp" />Java(JSP/Servlet)
			<input type="checkbox" name="lang" value="python" />Python
			<input type="checkbox" name="lang" value="php" />PHP
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" value="登録" /><input type="reset" value="取消" />
		</td>
	</tr>
</table>
</form>
によっておこなわれる。入力は表形式によりおこなわれる。

はじめに、名前の入力は

	<tr>
		<th align="right">名前:</th>
		<td><input type="text" name="nam" size="15" /></td>
	</tr>
によりおこなわれる。 次に、よく使う言語の入力は、

	<tr>
		<th align="right">よく使う言語:</th>
		<td>
			<input type="checkbox" name="lang" value="jsp" />Java(JSP/Servlet)
			<input type="checkbox" name="lang" value="python" />Python
			<input type="checkbox" name="lang" value="php" />PHP
		</td>
	</tr>
によりおこなう。フォームにおいて、チェックボックスを使って、 ユーザから複数の選択回答が可能としている。ここでは、<input>タグに 「type="checkbox"」と指定し、name属性はHTML部品の名前(ここでは"lang")を、 value属性はそのチェックボックスが選択されたときに送信するデータ("jsp"、 "python"、"php"のいずれか)を指定する。

データ送信ボタンは、

			<input type="submit" value="登録" />
によって表示され、ボタン名は"登録"となる。

入力内容の消去ボタンは、

            <input type="reset" value="取消" />
によって表示され、ボタン名は"取消"となる。

プログラム p_query.jsp の説明

表の定義は

<table border="1">
    〜
</table>
によっておこなわれる。

クエリ情報の取得は、

<%
Enumeration enmNam=request.getParameterNames();
while(enmNam.hasMoreElements()){
	String   strNam=(String)(enmNam.nextElement());
	String[] strVal=request.getParameterValues(strNam);
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>");
	for(int i=0;i<strVal.length;i++){out.println(strVal[i] + " ");}
	out.println("</td></tr>");
}
%>
によりおこなわれる。

requestオブジェクトのgetParameterNamesメソッドは、

Enumeration enmNam=request.getParameterNames();
によって、取得したクエリ情報に含まれるすべての「キー名情報」 を返す。このすべてのキー名情報のセットは、 Enumerationオブジェクトの変数enmNamに格納される。

以下では、

while(enmNam.hasMoreElements()){
	String   strNam=(String)(enmNam.nextElement());
	String[] strVal=request.getParameterValues(strNam);
	out.println("<tr><th>" + strNam + "</th>");
	out.println("<td>");
	for(int i=0;i<strVal.length;i++){out.println(strVal[i] + " ");}
	out.println("</td></tr>");
}

求められたキー名情報セットから1つずつ「キー名情報」を取り出して、 すべての情報がなくなるまで、「キー名情報」とそのパラメータを表の行形式にて 表示することを繰り返す。

ヘッダ情報の取得

次のプログラム headers.jsp は、ブラウザの リクエスト(HTTPのGETリクエスト)に対して、JSP内で動的に 生成したHTML文章を返す。

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" %>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ヘッダ情報の取得</title>
</head>
<h1 style="background:#cccccc">ヘッダ情報の取得</h1>
<table border="0">
<%
Enumeration hdr=request.getHeaderNames();
while(hdr.hasMoreElements()){
	String strNam=(String)hdr.nextElement();
%>
	<tr>
	<th style="color:#FFffFF;background:#0086b2;text-align:right;width:80pt;">
		<%=strNam %></th>
	<td><%=request.getHeader(strNam) %></td>
	</tr>
<% } %>
</table>
</html>

たとえば、Webサーバが動いているホストlocalhostのWebアプリケーションの ルートディレクトリ下に格納されている、JSPファイルheaders.jspを実行する。 そうすると、ブラウザが起動され、その上でユーザリクエストの際についてくる ヘッダ情報が表形式で表示される。

プログラム headers.jsp の説明

ページ要求時に送信されたヘッダ名を 取得するには、

Enumeration hdr=request.getHeaderNames();

によって、暗黙オブジェクトrequestに属するメソッド getHeaderNamesメソッドを使用する。

個々のヘッダ名と対応する値の出力は、

while(hdr.hasMoreElements()){
	String strNam=(String)hdr.nextElement();
%>
	<tr>
	<th style="color:#FFffFF;background:#0086b2;text-align:right;width:80pt;">
		<%=strNam %></th>
	<td><%=request.getHeader(strNam) %></td>
	</tr>
<% } %>

によリおこなわれる。

ヘッダの値の出力は、

	<td><%=request.getHeader(strNam) %></td>
によりおこなわれる。

問題-1

NetBeansを使って、上のプログラムquery.jsp を実行してみよ。

問題-2

上のプログラム query.jspを、Servletに変換した プログラムquery.javaを作成し、NetBeansを使って実行してみよ。

問題-3

NetBeansを使って、上のプログラムp_query.htmlp_query.jsp を実行してみよ。

問題-4

NetBeansを使って、上のプログラムp_query.htmlp_query.jsp を実行してみよ。ただし、フォームでの 通信をGETメソッドとせよ。

問題-5

NetBeansを使って、上のプログラムheaders.jsp を実行してみよ。

問題-6

上のプログラム headers.jspを、Servletに変換した プログラムheaders.javaを作成し、NetBeansを使って実行してみよ。

システムプログラミング演習


nagai