教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習
次のプログラム 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
query.jsp
を実行してみよ。
問題-2
query.jsp
を、Servletに変換した
プログラムquery.javaを作成し、NetBeansを使って実行してみよ。
問題-3
p_query.html
と
p_query.jsp
を実行してみよ。
問題-4
p_query.html
と
p_query.jsp
を実行してみよ。ただし、フォームでの
通信をGETメソッドとせよ。
問題-5
headers.jsp
を実行してみよ。
問題-6
headers.jsp
を、Servletに変換した
プログラムheaders.javaを作成し、NetBeansを使って実行してみよ。