Latest web development tutorials

ข้อมูลแบบฟอร์ม 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 ข้างต้นอื่น ๆ เช่นกล่องข้อความปุ่มหรือหล่นลงกล่องและอื่น ๆ