Jsp-form-processing

提供:Dev Guides
移動先:案内検索

JSP-フォーム処理

この章では、JSPでのフォーム処理について説明します。 ブラウザからWebサーバーに、そして最終的にはバックエンドプログラムに何らかの情報を渡す必要がある場合、多くの状況に遭遇したに違いありません。 ブラウザは、2つの方法を使用してこの情報をWebサーバーに渡します。 これらのメソッドは、GETメソッドとPOSTメソッドです。

フォーム処理のメソッド

フォーム処理のメソッドについて説明します。

GETメソッド

GETメソッドは、エンコードされたユーザー情報をページリクエストに追加して送信します。 ページとエンコードされた情報は、? 次のような文字-

http://www.test.com/hello?key1=value1&key2=value2

GETメソッドは、ブラウザからWebサーバーに情報を渡すデフォルトのメソッドであり、ブラウザの Location:box に表示される長い文字列を生成します。 GETメソッドを使用しないことをお勧めします。 サーバーに渡すパスワードまたはその他の機密情報がある場合。

GETメソッドにはサイズ制限があります:リクエスト文字列に含めることができるのは1024文字のみです

この情報は* QUERY_STRINGヘッダー*を使用して渡され、リクエストオブジェクトの* getQueryString()および getParameter()*メソッドを使用して処理できるQUERY_STRING環境変数を介してアクセスできます。

POSTメソッド

一般に、バックエンドプログラムに情報を渡すより信頼性の高い方法は、POSTメソッドです。

このメソッドは、GETメソッドとまったく同じ方法で情報をパッケージ化しますが、?の後にテキスト文字列として送信する代わりに、 URLで別のメッセージとして送信します。 このメッセージは、解析して処理に使用できる標準入力の形式でバックエンドプログラムに送信されます。

JSPは、* getParameter()メソッドを使用して単純なパラメーターを読み取り、 getInputStream()*メソッドを使用してこのタイプの要求を処理し、クライアントからのバイナリデータストリームを読み取ります。

JSPを使用したフォームデータの読み取り

JSPは、状況に応じて次の方法を使用して自動的にフォームデータの解析を処理します-

  • * getParameter()-フォームパラメータの値を取得するには、 request.getParameter()*メソッドを呼び出します。
  • * getParameterValues()*-パラメーターが複数回表示され、チェックボックスなどの複数の値を返す場合、このメソッドを呼び出します。
  • * getParameterNames()*-現在のリクエストのすべてのパラメータの完全なリストが必要な場合は、このメソッドを呼び出します。
  • * getInputStream()*-このメソッドを呼び出して、クライアントからのバイナリデータストリームを読み取ります。

URLを使用したGETメソッドの例

次のURLは、GETメソッドを使用してHelloFormプログラムに2つの値を渡します。

*http://localhost:8080/main.jsp?first_name = ZARA&last_name = ALI*

以下は、Webブラウザからの入力を処理する main.jsp JSPプログラムです。 渡された情報へのアクセスを非常に簡単にする* getParameter()*メソッドを使用します-

<html>
   <head>
      <title>Using GET Method to Read Form Data</title>
   </head>

   <body>
      <h1>Using GET Method to Read Form Data</h1>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>

   </body>
</html>

ブラウザの Location:boxhttp://localhost:8080/main.jsp?first_name = ZARA&last_name = ALI と入力します。 これは、次の結果を生成します-

GETメソッドを使用してフォームデータを読み取る

  • :ZARA
  • :ALI

フォームを使用したGETメソッドの例

以下は、HTML FORMと送信ボタンを使用して2つの値を渡す例です。 同じJSP main.jspを使用して、この入力を処理します。

<html>
   <body>

      <form action = "main.jsp" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br/>
         Last Name: <input type = "text" name = "last_name"/>
         <input type = "submit" value = "Submit"/>
      </form>

   </body>
</html>

このHTMLをファイルHelloに保存し、 <Tomcat-installation-directory>/webapps/ROOT directory に置きます。 http://localhost:8080/Hello にアクセスすると、次の出力が表示されます。

名前苗字:

フォームを使用したPOSTメソッドの例

上記のJSPで少し変更を加えて、GETメソッドとPOSTメソッドの両方を処理します。 以下は、GETまたはPOSTメソッドを使用してWebブラウザから与えられた入力を処理する main.jsp JSPプログラムです。

実際、上記のJSPには変更はありません。パラメーターを渡す唯一の方法が変更され、JSPプログラムにバイナリデータが渡されないためです。 ファイル処理関連の概念については、バイナリデータストリームを読み取る必要がある別の章で説明します。

<html>
   <head>
      <title>Using GET and POST Method to Read Form Data</title>
   </head>

   <body>
      <center>
      <h1>Using POST Method to Read Form Data</h1>

      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>

   </body>
</html>

以下は Hello ファイルの内容です-

<html>
   <body>

      <form action = "main.jsp" method = "POST">
         First Name: <input type = "text" name = "first_name">
         <br/>
         Last Name: <input type = "text" name = "last_name"/>
         <input type = "submit" value = "Submit"/>
      </form>

   </body>
</html>
*main.jsp* とhelloを *<Tomcat-installationdirectory>/webapps/ROOT directory* に保存します。 *_http://localhost:8080/Hello_* にアクセスすると、次の出力が表示されます。

名前苗字:

名と姓を入力してから、送信ボタンをクリックして、Tomcatが実行されているローカルマシンで結果を確認してください。

提供された入力に基づいて、上記の例と同様の結果を受け取ります。

チェックボックスデータをJSPプログラムに渡す

チェックボックスは、複数のオプションを選択する必要がある場合に使用されます。

以下は、2つのチェックボックスを持つフォームの HTMLコード、CheckBox の例です。

<html>
   <body>

      <form action = "main.jsp" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked"/> Maths
         <input type = "checkbox" name = "physics" /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked"/> Chemistry
         <input type = "submit" value = "Select Subject"/>
      </form>

   </body>
</html>

上記のコードは、次の結果を生成します-

数学物理化学

次に示すのは、Webブラウザからチェックボックスボタンに指定された入力を処理するmain.jsp JSPプログラムです。

<html>
   <head>
      <title>Reading Checkbox Data</title>
   </head>

   <body>
      <h1>Reading Checkbox Data</h1>

      <ul>
         <li><p><b>Maths Flag:</b>
            <%= request.getParameter("maths")%>
         </p></li>
         <li><p><b>Physics Flag:</b>
            <%= request.getParameter("physics")%>
         </p></li>
         <li><p><b>Chemistry Flag:</b>
            <%= request.getParameter("chemistry")%>
         </p></li>
      </ul>

   </body>
</html>

上記のプログラムは、次の結果を生成します-

Reading Checkbox Data
  • 数学フラグ::オン
  • 物理フラグ::null
  • 化学フラグ::オン

すべてのフォームパラメーターの読み取り

以下は、HttpServletRequestの* getParameterNames()*メソッドを使用して、使用可能なすべてのフォームパラメーターを読み取る一般的な例です。 このメソッドは、指定されていない順序でパラメーター名を含む列挙を返します。

列挙ができたら、 _ hasMoreElements()' メソッドを使用して停止するタイミングを決定し、 ' nextElement()_ メソッドを使用して各パラメーター名を取得することにより、標準的な方法で列挙をループできます。

<%@ page import = "java.io.*,java.util.*" %>

<html>
   <head>
      <title>HTTP Header Request Example</title>
   </head>

   <body>
      <center>
         <h2>HTTP Header Request Example</h2>
         <table width = "100%" border = "1" align = "center">
            <tr bgcolor = "#949494">
               <th>Param Name</th>
               <th>Param Value(s)</th>
            </tr>
            <%
               Enumeration paramNames = request.getParameterNames();
               while(paramNames.hasMoreElements()) {
                  String paramName = (String)paramNames.nextElement();
                  out.print("<tr><td>" + paramName + "</td>\n");
                  String paramValue = request.getHeader(paramName);
                  out.println("<td> " + paramValue + "</td></tr>\n");
               }
            %>
         </table>
      </center>

   </body>
</html>

以下は Hello の内容です-

<html>
   <body>

      <form action = "main.jsp" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked"/> Maths
         <input type = "checkbox" name = "physics" /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked"/> Chem
         <input type = "submit" value = "Select Subject"/>
      </form>

   </body>
</html>

上記のHelloを使用してJSPを呼び出してみてください。これは、提供された入力に基づいて以下のような結果を生成します-

すべてのフォームパラメーターの読み取り

Param Name Param Value(s)
maths on
chemistry on

上記のJSPを試して、テキストボックス、ラジオボタン、ドロップダウンなどの他のオブジェクトがある他のフォームのデータを読み取ることができます。