サーブレット-フォームデータ

ブラウザから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ヘッダーを使用して渡され、QUERY_STRING環境変数を介してアクセスでき、サーブレットはを使用してこのタイプの要求を処理します。 doGet() 方法。

POSTメソッド

バックエンドプログラムに情報を渡す一般的により信頼性の高い方法は、POST方法です。これは、GETメソッドとまったく同じ方法で情報をパッケージ化しますが、?の後にテキスト文字列として送信する代わりに (疑問符)URLで別のメッセージとして送信します。このメッセージは、解析して処理に使用できる標準入力の形式でバックエンドプログラムに送信されます。サーブレットは、このタイプのリクエストを使用して処理しますdoPost() 方法。

サーブレットを使用したフォームデータの読み取り

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

  • getParameter() − request.getParameter()メソッドを呼び出して、フォームパラメータの値を取得します。

  • getParameterValues() −パラメータが複数回表示され、チェックボックスなどの複数の値を返す場合は、このメソッドを呼び出します。

  • getParameterNames() −現在のリクエストのすべてのパラメータの完全なリストが必要な場合は、このメソッドを呼び出します。

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

これは、GETメソッドを使用してHelloFormプログラムに2つの値を渡す単純なURLです。

http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALI

以下は HelloForm.javaWebブラウザからの入力を処理するサーブレットプログラム。使用しますgetParameter() 渡された情報に非常に簡単にアクセスできる方法-

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>" +
         "</html>"
      );
   }
}

環境が適切に設定されていると仮定して、HelloForm.javaを次のようにコンパイルします-

$ javac HelloForm.java

すべてがうまくいけば、上記のコンパイルは HelloForm.classファイル。次に、このクラスファイルを<Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classesにコピーし、に次のエントリを作成する必要があります。web.xml <Tomcat-installation-directory> / webapps / ROOT / WEB-INF /にあるファイル

<servlet>
   <servlet-name>HelloForm</servlet-name>
   <servlet-class>HelloForm</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloForm</servlet-name>
   <url-pattern>/HelloForm</url-pattern>
</servlet-mapping>

次に、ブラウザのLocation:boxにhttp:// localhost:8080 / HelloForm?first_name = ZARA&last_name = ALIと入力し、ブラウザで上記のコマンドを実行する前に、Tomcatサーバーがすでに起動していることを確認します。これにより、次の結果が生成されます-

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

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

これは、HTMLFORMと送信ボタンを使用して2つの値を渡す簡単な例です。同じサーブレットHelloFormを使用してこの入力を処理します。

<html>
   <body>
      <form action = "HelloForm" 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.htmに保存し、<Tomcat-installationdirectory> / webapps / ROOTディレクトリに配置します。http:// localhost:8080 / Hello.htmにアクセスする場合、上記のフォームの実際の出力は次のとおりです。

姓と名を入力してから[送信]ボタンをクリックして、Tomcatが実行されているローカルマシンで結果を確認してください。提供された入力に基づいて、上記の例で述べたのと同様の結果が生成されます。

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

上記のサーブレットに少し変更を加えて、GETメソッドとPOSTメソッドを処理できるようにします。以下でありHelloForm.java GETまたはPOSTメソッドを使用してWebブラウザからの入力を処理するサーブレットプログラム。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

次に、上記のサーブレットをコンパイルしてデプロイし、次のようにPOSTメソッドを使用してHello.htmを使用してテストします。

<html>
   <body>
      <form action = "HelloForm" 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>

上記のフォームの実際の出力は次のとおりです。姓名を入力してから[送信]ボタンをクリックして、Tomcatが実行されているローカルマシンで結果を確認してください。

提供された入力に基づいて、上記の例で述べたのと同様の結果が生成されます。

チェックボックスデータをサーブレットプログラムに渡す

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

これは、2つのチェックボックスがあるフォームのHTMLコードCheckBox.htmの例です。

<html>
   <body>
      <form action = "CheckBox" 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ブラウザからの入力を処理するCheckBox.javaサーブレットプログラムです。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>Maths Flag : </b>: "
                  + request.getParameter("maths") + "\n" +
                  "  <li><b>Physics Flag: </b>: "
                  + request.getParameter("physics") + "\n" +
                  "  <li><b>Chemistry Flag: </b>: "
                  + request.getParameter("chemistry") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

上記の例では、次の結果が表示されます-

Reading Checkbox Data

  • Maths Flag : : on
  • Physics Flag: : null
  • Chemistry Flag: : on

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

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

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

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
            "<th>Param Name</th>"
            "<th>Param Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration paramNames = request.getParameterNames();

      while(paramNames.hasMoreElements()) {
         String paramName = (String)paramNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n<td>");
         String[] paramValues = request.getParameterValues(paramName);

         // Read single valued data
         if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
               out.println("<i>No Value</i>");
               else
               out.println(paramValue);
         } else {
            // Read multiple valued data
            out.println("<ul>");

            for(int i = 0; i < paramValues.length; i++) {
               out.println("<li>" + paramValues[i]);
            }
            out.println("</ul>");
         }
      }
      out.println("</tr>\n</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

ここで、次の形式で上記のサーブレットを試してください-

<html>
   <body>
      <form action = "ReadParams" 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>

上記のフォームを使用してサーブレットを呼び出すと、次の結果が生成されます-

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

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