當前位置:首頁 » Servlets » Servlet表單數據

Servlet表單數據

Servlets表單數據代碼例子 - 瀏覽器使用兩種方法可將此信息傳遞到Web服務器,分彆為GET方法和POST方法。

很多情況下,需要傳遞一些信息,從瀏覽器到Web服務器,最終到後台程序。瀏覽器使用兩種方法可將此信息傳遞到Web服務器,分彆為GET方法和POST方法。

GET 方法:

GET方法發送編碼的用戶信息添加到頁麵請求。頁麵並已編碼的信息中作用 ?分離字符如下:

http://www.gitbook.net/hello?key1=value1&key2=value2

GET方法是默認的方法來傳遞信息,從瀏覽器到Web服務器,它會產生一個很長的字符串出現在瀏覽器的位置:框中。不要使用GET方法,如果你有密碼或其他敏感信息傳遞給服務器。GET方法有大小限製:能夠在一個請求字符串,隻有1024個字符。

這個信息被傳遞使用QUERY_STRING頭,將可以通過QUERY_STRING環境變量的servlet處理這種類型的請求使用doGet()方法。

POST 方法:

將信息傳遞給後端的程序一般比較可靠的方法是POST方法。這些軟件包中的信息完全相同的方式為GET方法,而是把它發送一個文本字符串在?後,在URL中,它發送它作為一個單獨的消息。This 此消息的形式,可以處理分析和使用標準輸入到後台程序。servlet處理這種類型的請求使用doPost()方法。

使用Servlet讀取表單數據:

Servlet的處理表單數據解析自動根據不同的情況使用下列方法:

  • getParameter():  可以調用request.getParameter()方法的獲取表單參數的值。

  • getParameterValues():  調用此方法,如果參數出現一次以上,並返回多個值,例如“複選框“。

  • getParameterNames(): 如果你想在當前請求的所有參數的完整列表,調用此方法。

使用URL GET方法示例:

下麵是一個簡單的URL,將傳遞兩個值HelloForm程序,使用GET方法。

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

下麵的servlet程序來處理HelloForm.java通過Web瀏覽器的輸入,我們將使用getParameter()方法,這使得它很容易訪問傳遞的信息:

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

// Extend HttpServlet class -by www.gitbook.net
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-installation-directory>/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>

現在在瀏覽器的位置:框中輸入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方法使用表單的示例:

下麵是一個簡單的例子,通過兩個值,使用HTML表單和提交按鈕。我們將使用相同Servlet的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-installation-directory>/webapps /目錄根目錄。當你想訪問http://localhost:8080/Hello.htm,這裡是上述形式的實際輸出。

First Name:  
Last Name:  

嘗試輸入First Name和Last名稱,然後單擊“提交”按鈕,在Tomcat運行在本地計算機上看到的結果。基於所提供的輸入的,它會產生類似的結果,如在上麵的例子中提到的。


使用表單POST方法示例:

讓我們在上麵的servlet做小的修改,以便它可以處理GET和POST方法。下麵的servlet程序來處理HelloForm.java通過Web瀏覽器輸入使用GET或POST方法。

// 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);
  }
}

現在,編譯,部署上述的Servlet和測試它的使用將hello.htm與POST方法如下:

<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運行在本地計算機上看到的結果。

基於提供的輸入,將產生類似的結果,如在上述例子中提到。


將複選框數據傳遞到Servlet程序

複選框被使用時,須選擇一個以上的選項。

下麵是一個例子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>

這段代碼的結果是以下表格

 Maths  Physics  Chemistry 

下麵的servlet程序來處理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

讀取一切形式參數:

以下是通用的示例,它使用HttpServletRequest的getParameterNames()方法讀取所有可用的形式參數。此方法返回一個枚舉,其中包含一個未指定的順序中的參數名。

一旦我們有一個枚舉,我們可以循環下來的枚舉以標準方式,使用調用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);
  }
}

現在,請嘗試下麵的表格上麵的servlet:

<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>

現在調用servlet使用上述表單,將產生以下結果:

讀取所有的表單參數

Param Name Param Value(s)
maths on
chemistry on

你可以試試上麵的servlet讀取任何其他形式的數據等其他的對象,如文本框,單選按鈕或下拉框等