ข้อมูลแบบฟอร์ม Servlet
ในหลายกรณีที่เราต้องผ่านข้อมูลบางอย่างจากเบราว์เซอร์ไปยังเว็บเซิร์ฟเวอร์และท้ายที่สุดจะภูต เบราว์เซอร์ที่มีสองวิธีในการส่งผ่านข้อมูลไปยังเว็บเซิร์ฟเวอร์ที่มีวิธี GET และ POST
GET วิธี
มีวิธีการในการส่งข้อมูลผู้ใช้เข้ารหัสการร้องขอหน้า หน้าและข้อมูลกลางเข้ารหัสโดยใช้ตัวอักษรที่คั่นดังนี้ ?:
http://www.test.com/hello?key1=value1&key2=value2
ได้รับคือวิธีการเริ่มต้นของการส่งผ่านข้อมูลจากเบราว์เซอร์ในการประมวลผลเว็บเซิร์ฟเวอร์ซึ่งจะผลิตสายยาวก็จะปรากฏขึ้นในแถบที่อยู่ของเบราเซอร์ หากคุณต้องการที่จะผ่านรหัสผ่านเซิร์ฟเวอร์หรือข้อมูลสำคัญอื่น ๆ โปรดอย่าใช้วิธีการ GET มีวิธีการ จำกัด ขนาดได้รับ: สตริงคำขอสามารถมีได้ถึง 1024 อักขระ
ข้อมูลนี้จะถูกส่งโดยใช้หัว QUERY_STRING และสามารถเข้าถึงได้ผ่านตัวแปรสภาพแวดล้อม QUERY_STRING ที่ Servlet ใช้doGet () วิธีการจัดการกับชนิดของคำขอนี้
วิธีการ POST
อีกวิธีที่น่าเชื่อถือมากขึ้นของการส่งผ่านข้อมูลไปยังภูตเป็นวิธีการ POST วิธีการ POST แพคเกจข้อมูลในลักษณะที่เป็นหลักเช่นเดียวกับการได้รับวิธีการ POST แต่ไม่ข้อมูลที่เป็น URL? สตริงข้อความหลังจากที่ตัวละครจะถูกส่ง แต่ข้อมูลที่เป็นข้อความที่แยกต่างหาก ข้อความในรูปแบบของการส่งออกมาตรฐานภูตถึงคุณสามารถแยกและใช้พวกเขาออกมาตรฐาน ใช้ Servlet doPost () วิธีการจัดการกับชนิดของคำขอนี้
ใช้ Servlet ในการอ่านข้อมูลแบบฟอร์ม
Servlet ในการประมวลผลข้อมูลแบบฟอร์มซึ่งใช้วิธีการที่แตกต่างกันขึ้นอยู่กับสถานการณ์โดยอัตโนมัติแก้ไข:
- getParameter (): คุณสามารถเรียก request.getParameter () วิธีการที่จะได้รับค่าพารามิเตอร์ของแบบฟอร์ม
- getParameterValues (): ถ้าพารามิเตอร์ปรากฏมากกว่าหนึ่งครั้งแล้วเรียกวิธีการและค่าตอบแทนต่างๆเช่นกล่องกาเครื่องหมาย
- getParameterNames (): ถ้าคุณต้องการที่จะได้รับรายการที่สมบูรณ์ของการร้องขอปัจจุบันพารามิเตอร์ทั้งหมดแล้วเรียกวิธี
ตัวอย่างของการใช้วิธีการ GET URL
นี่คือ URL ที่เรียบง่ายใช้วิธีการ GET ที่จะผ่านสองค่าในการเขียนโปรแกรม HelloForm
http: // localhost: 8080 / TomcatTest / ชื่อ HelloForm = กวดวิชาและ url = www.w3big.com นี้?
นี่คือการจัดการกับเว็บเบราเซอร์ที่ป้อนโปรแกรมHelloForm.java Servletเราจะใช้getParameter () วิธีการที่คุณสามารถเข้าถึงการส่งข้อมูล:
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloForm */ @WebServlet("/HelloForm") public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloForm() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "使用 GET 方法读取表单数据"; // 处理中文 String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8"); String docType = "<!DOCTYPE html> \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>站点名</b>:" + name + "\n" + " <li><b>网址</b>:" + request.getParameter("url") + "\n" + "</ul>\n" + "</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }จากนั้นเราจะสร้างรายการต่อไปนี้ในไฟล์web.xml ไปนี้:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>HelloForm</servlet-name> <servlet-class>com.w3big.test.HelloForm</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloForm</servlet-name> <url-pattern>/TomcatTest/HelloForm</url-pattern> </servlet-mapping> </web-app>
ตอนนี้ใส่ในแถบที่อยู่เบราว์เซอร์ที่ http: // localhost: 8080 / TomcatTestชื่อ / HelloForm =กวดวิชาและ URL นี้ = www.w3big.com และก่อนที่จะเรียกคำสั่งดังกล่าวได้รับการเปิดตัวเพื่อให้แน่ใจว่าเซิร์ฟเวอร์Tomcat?.หากทุกอย่างไปคุณจะได้รับผลลัพธ์ที่ต่อไปนี้:
ใช้วิธีการรูปแบบ GET ตัวอย่าง
นี่คือตัวอย่างง่ายๆโดยใช้รูปแบบ HTML และปุ่มส่งผ่านไปสองค่า เราจะใช้ HelloForm Servlet เดียวกันในการประมวลผลการป้อนข้อมูล
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</title> </head> <body> <form action="HelloForm" method="GET"> 网址名:<input type="text" name="name"> <br /> 网址:<input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
บันทึกไฟล์ HTML ในการ hello.html โครงสร้างไดเรกทอรีเป็นดังนี้:
ลองใส่ชื่อ URL และ URL และคลิกที่ปุ่ม "ส่ง", GIF สาธิตดังนี้
ตัวอย่างของวิธีการ POST ของแบบฟอร์ม
ขอให้เราทำ Servlet ข้างต้นเล็ก ๆ น้อย ๆ ที่แก้ไขเพื่อที่จะสามารถจัดการกับ GET และวิธีการ POST ต่อไปนี้HelloForm.java Servlet ใช้ GET และ POST วิธีการป้อนข้อมูลสำหรับการประมวลผลที่ได้รับจากเว็บเบราเซอร์
หมายเหตุ: หากข้อมูลที่ส่งข้อมูลแบบฟอร์มในการแปลงรหัสจีนจะต้อง:
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloForm */ @WebServlet("/HelloForm") public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloForm() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "使用 POST 方法读取表单数据"; // 处理中文 String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8"); String docType = "<!DOCTYPE html> \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>站点名</b>:" + name + "\n" + " <li><b>网址</b>:" + request.getParameter("url") + "\n" + "</ul>\n" + "</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ตอนนี้รวบรวมการใช้งานของ Servlet ข้างต้นและใช้ hello.html ด้วยวิธีการโพสต์ได้รับการทดสอบดังนี้
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</title> </head> <body> <form action="HelloForm" method="POST"> 网址名:<input type="text" name="name"> <br /> 网址:<input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
นี่คือรูปแบบการแสดงผลที่เกิดขึ้นจริงดังกล่าวข้างต้นให้ลองใส่ชื่อ URL และ URL และคลิกที่ปุ่ม "ส่ง", GIF สาธิตดังนี้
เพื่อส่งผ่านข้อมูลไปยังโปรแกรมกล่องเซิร์ฟเล็ต
เมื่อคุณจำเป็นต้องเลือกมากกว่าหนึ่งตัวเลือกที่จะใช้กล่อง
นี่คือตัวอย่างโค้ด HTML checkbox.html รูปแบบที่มีสองช่องทำเครื่องหมาย
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</title> </head> <body> <form action="CheckBox" method="POST" target="_blank"> <input type="checkbox" name="w3big" checked="checked" /> 本教程 <input type="checkbox" name="google" /> Google <input type="checkbox" name="taobao" checked="checked" /> 淘宝 <input type="submit" value="选择站点" /> </form> </body> </html>
นี่คือขั้นตอนการ CheckBox.java Servlet สำหรับการจัดการเว็บเบราเซอร์ให้กล่องใส่
package com.w3big.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class CheckBox */ @WebServlet("/CheckBox") public class CheckBox extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "读取复选框数据"; String docType = "<!DOCTYPE html> \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>本按教程标识:</b>: " + request.getParameter("w3big") + "\n" + " <li><b>Google 标识:</b>: " + request.getParameter("google") + "\n" + " <li><b>淘宝标识:</b>: " + request.getParameter("taobao") + "\n" + "</ul>\n" + "</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ตั้ง web.xml ที่สอดคล้องกัน:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>CheckBox</servlet-name> <servlet-class>com.w3big.test.CheckBox</servlet-class> </servlet> <servlet-mapping> <servlet-name>CheckBox</servlet-name> <url-pattern>/TomcatTest/CheckBox</url-pattern> </servlet-mapping> </web-app>
ตัวอย่างข้างต้นจะแสดงผลลัพธ์ต่อไปนี้:
อ่านทั้งหมดของพารามิเตอร์ของแบบฟอร์ม
ต่อไปนี้เป็นตัวอย่างทั่วไปของการใช้ HttpServletRequestgetParameterNames () วิธีการในการอ่านค่าพารามิเตอร์ที่มีอยู่ทั้งหมดของแบบฟอร์มวิธีนี้จะสั่งซื้อสินค้าที่มีการแจงนับชื่อพารามิเตอร์ไม่ได้ระบุ
เมื่อเรามีการแจกแจงเราสามารถระบุการไหลเวียนในลักษณะที่เป็นมาตรฐานโดยใช้hasMoreElements ()วิธีการกำหนดเวลาที่จะหยุดการใช้nextElement () วิธีการที่จะได้รับชื่อของแต่ละพารามิเตอร์
import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ReadParams */ @WebServlet("/ReadParams") public class ReadParams extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ReadParams() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "读取所有的表单数据"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><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>参数名称</th><th>参数值</th>\n"+ "</tr>\n"); Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String[] paramValues = request.getParameterValues(paramName); // 读取单个值的数据 if (paramValues.length == 1) { String paramValue = paramValues[0]; if (paramValue.length() == 0) out.println("<td><i>没有值</i></td>"); else out.println("<td>" + paramValue + "</td>"); } else { // 读取多个值的数据 out.println("<td><ul>"); for(int i=0; i < paramValues.length; i++) { out.println("<li>" + paramValues[i]); } out.println("</ul></td>"); } out.print("</tr>"); } out.println("\n</table>\n</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
ตอนนี้ลอง Servlet ข้างต้นผ่านแบบฟอร์มด้านล่าง:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3big.com)</title> </head> <body> <form action="ReadParams" method="POST" target="_blank"> <input type="checkbox" name="maths" checked="checked" /> 数学 <input type="checkbox" name="physics" /> 物理 <input type="checkbox" name="chemistry" checked="checked" /> 化学 <input type="submit" value="选择学科" /> </form> </body> </html>
ตั้ง web.xml ที่สอดคล้องกัน:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ReadParams</servlet-name> <servlet-class>com.w3big.test.ReadParams</servlet-class> </servlet> <servlet-mapping> <servlet-name>ReadParams</servlet-name> <url-pattern>/TomcatTest/ReadParams</url-pattern> </servlet-mapping> </web-app>
ตอนนี้ใช้แบบฟอร์มด้านบนเพื่อเรียก Servlet, ก่อให้เกิดผลลัพธ์ต่อไปนี้:
คุณสามารถลองอ่านข้อมูลในแบบฟอร์ม Servlet ข้างต้นอื่น ๆ เช่นกล่องข้อความปุ่มหรือหล่นลงกล่องและอื่น ๆ