很多情況下啃洋,需要傳遞一些信息传货,從瀏覽器到 Web 服務(wù)器,最終到后臺程序宏娄。瀏覽器使用兩種方法可將這些信息傳遞到 Web 服務(wù)器问裕,分別為 GET 方法和 POST 方法。
使用 Servlet 讀取表單數(shù)據(jù)
Servlet 處理表單數(shù)據(jù)孵坚,這些數(shù)據(jù)會根據(jù)不同的情況使用不同的方法自動解析:
- getParameter():您可以調(diào)用 request.getParameter() 方法來獲取表單參數(shù)的值粮宛。
- getParameterValues():如果參數(shù)出現(xiàn)一次以上,則調(diào)用該方法卖宠,并返回多個值巍杈,例如復(fù)選框。
- getParameterNames():如果您想要得到當前請求中的所有參數(shù)的完整列表扛伍,則調(diào)用該方法筷畦。
GET 方法
GET 方法向頁面請求發(fā)送已編碼的用戶信息。頁面和已編碼的信息中間用 ? 字符分隔刺洒,如下所示:
http://localhost:8080/test/servlet/TestGet?param1=1¶m2=2¶m3=3
GET 方法是默認的從瀏覽器向 Web 服務(wù)器傳遞信息的方法鳖宾,它會產(chǎn)生一個很長的字符串亚斋,出現(xiàn)在瀏覽器的地址欄中。如果您要向服務(wù)器傳遞的是密碼或其他的敏感信息攘滩,請不要使用 GET 方法帅刊。GET 方法有大小限制:請求字符串中最多只能有 1024 個字符。
這些信息使用 QUERY_STRING 頭傳遞漂问,并可以通過 QUERY_STRING 環(huán)境變量訪問赖瞒,Servlet 使用 doGet() 方法處理這種類型的請求。
測試GET(這里我用的命令行操作Tomcat,所以java文件編譯完成后,應(yīng)將class文件放入Tomcat下的webapp中對應(yīng)的目錄,具體細節(jié)參考3 Servlet部署與實例)
在web.xml文件中加入
<!-- 測試GET -->
<servlet>
<servlet-name>TestGet</servlet-name>
<servlet-class>GetPost.TestGet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestGet</servlet-name>
<url-pattern>/servlet/TestGet</url-pattern>
</servlet-mapping>
TestGet.html
<form id="form1" name="form1" method="get" action="servlet/TestGet">
<table width="343" border="1">
<tr>
<td width="92">param1</td>
<td width="92">
<input name="param1" type="text" id="param1">
</td>
</tr>
<tr>
<td>param2</td>
<td>
<label>
<input name="param2" type="text" id="param2">
</label>
</td>
</tr>
<tr>
<td width="92">param3</td>
<td><input name="param3" type="text" id="param3"></td>
</tr>
<tr>
<td> </td>
<td>
<label>
<input type="submit" value="提交">
</label>
</td>
</tr>
</table>
</form>
TestGet.java
package GetPost;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestGet extends HttpServlet {
//request封裝了客戶端向服務(wù)器端的請求,包括所有的參數(shù)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
System.out.println("ThreeParams.doGet()");
//request.getParameter(String args); 根據(jù)args獲取傳入的值
pw.println(request.getParameter("param1"));
pw.println("<br/>");
pw.println(request.getParameter("param2"));
pw.println("<br/>");
pw.println(request.getParameter("param3"));
pw.println("<br/>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// PrintWriter pw = response.getWriter();
//
// //request.getParameter(String args); 根據(jù)args獲取傳入的值
// pw.println(request.getParameter("param1"));
// pw.println("<br/>");
// pw.println(request.getParameter("param2"));
// pw.println("<br/>");
// pw.println(request.getParameter("param3"));
// pw.println("<br/>");
System.out.println("doPost()");
//如果Post方法與Get方法實現(xiàn)的效果一直,可直接傳參
doGet(request,response);
}
}
提交前
提交后
測試POST(這里我用的命令行操作Tomcat,所以java文件編譯完成后,應(yīng)將class文件放入Tomcat下的webapp中對應(yīng)的目錄,具體細節(jié)參考3 Servlet部署與實例)
- TestPost.html
<form id="form1" name="form1" method="post" action="servlet/TestPost">
<table width="343" border="1">
<tr>
<td width="92">param1</td>
<td width="92">
<input name="param1" type="text" id="param1">
</td>
</tr>
<tr>
<td>param2</td>
<td>
<label>
<input name="param2" type="text" id="param2">
</label>
</td>
</tr>
<tr>
<td width="92">param3</td>
<td><input name="param3" type="text" id="param3"></td>
</tr>
<tr>
<td> </td>
<td>
<label>
<input type="submit" value="提交">
</label>
</td>
</tr>
</table>
</form>
TestPost.java
package GetPost;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestPost extends HttpServlet {
//request封裝了客戶端向服務(wù)器端的請求,包括所有的參數(shù)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
System.out.println("ThreeParams.doGet()");
//request.getParameter(String args); 根據(jù)args獲取傳入的值
pw.println(request.getParameter("param1"));
pw.println("<br/>");
pw.println(request.getParameter("param2"));
pw.println("<br/>");
pw.println(request.getParameter("param3"));
pw.println("<br/>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// PrintWriter pw = response.getWriter();
//
// //request.getParameter(String args); 根據(jù)args獲取傳入的值
// pw.println(request.getParameter("param1"));
// pw.println("<br/>");
// pw.println(request.getParameter("param2"));
// pw.println("<br/>");
// pw.println(request.getParameter("param3"));
// pw.println("<br/>");
System.out.println("doPost()");
//如果Post方法與Get方法實現(xiàn)的效果一直,可直接傳參
doGet(request,response);
}
}
在web.xml中加入
<!-- 測試POST -->
<servlet>
<servlet-name>TestPost</servlet-name>
<servlet-class>GetPost.TestPost</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestPost</servlet-name>
<url-pattern>/servlet/TestPost</url-pattern>
</servlet-mapping>
提交前
提交后