Latest web development tutorials

bentuk Servlet Data

Dalam banyak kasus, kita perlu melewati beberapa informasi dari browser ke Web server, dan akhirnya ke daemon. Browser dua cara untuk menyampaikan informasi ke server Web yang GET dan POST metode.

GET Metode

GET metode untuk mengirimkan informasi pengguna dikodekan untuk permintaan halaman. Halaman dan informasi antara dikodekan menggunakan karakter-delimited, sebagai berikut ?:

http://www.test.com/hello?key1=value1&key2=value2

GET adalah metode standar lewat informasi dari browser untuk proses server Web yang akan menghasilkan string yang panjang, muncul di address bar browser. Jika Anda ingin mengirimkan password server atau informasi sensitif lainnya, jangan menggunakan metode GET. Ada GET batas ukuran metode: permintaan string dapat memiliki hingga 1024 karakter.

Informasi ini dikirim menggunakan kepala QUERY_STRING, dan dapat diakses melalui variabel lingkungan QUERY_STRING, Servlet menggunakan metodedoGet () untuk menangani jenis permintaan.

metode POST

Metode lain yang lebih handal menyampaikan informasi kepada daemon adalah metode POST. Metode POST untuk paket informasi di dasarnya cara yang sama seperti GET, metode POST tapi tidak informasi sebagai URL? Text tali setelah karakter ditularkan, tetapi informasi sebagai pesan terpisah. Pesan dalam bentuk output standar mencapai daemon, Anda dapat mengurai dan menggunakannya untuk output standar. Gunakan Servlet doPost () metode untuk menangani jenis permintaan.

Gunakan Servlet untuk membaca data formulir

Servlet untuk memproses data formulir, yang menggunakan metode yang berbeda tergantung pada situasi secara otomatis mengatasi:

  • getParameter (): Anda dapat memanggil metode request.getParameter () untuk mendapatkan nilai parameter bentuk.
  • getParameterValues (): Jika parameter muncul lebih dari sekali, kemudian memanggil metode dan kembali beberapa nilai, seperti kotak centang.
  • getParameterNames (): Jika Anda ingin mendapatkan daftar lengkap permintaan saat semua parameter, kemudian memanggil metode.

Contoh penggunaan metode URL GET

Berikut ini adalah URL sederhana, menggunakan metode GET untuk lulus dua nilai program HelloForm.

http: // localhost: 8080 / TomcatTest / nama HelloForm = tutorial & url = www.w3big.com ini?

Berikut adalah kesepakatan dengan memasuki programHelloForm.java Servlet Web browser.Kami akan menggunakan metodegetParameter (), Anda dapat dengan mudah mengakses informasi transmisi:

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);
	}
}
Kami kemudian membuat entri berikut dalam fileweb.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>

Sekarang masukkan di browser address barhttp: // localhost: 8080 / TomcatTestnama / HelloForm =tutorial & url ini = www.w3big.com,dan sebelum memicu perintah di atas telah diluncurkan untuk memastikanserverTomcat?.Jika semua berjalan dengan baik, Anda akan mendapatkan hasil sebagai berikut:


Gunakan metode bentuk GET dari Contoh

Berikut ini adalah contoh sederhana, menggunakan bentuk HTML dan tombol submit melewati dua nilai. Kami akan menggunakan Servlet HelloForm yang sama untuk memproses input.

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

Simpan file HTML untuk hello.html, struktur direktori adalah sebagai berikut:

Coba masukkan nama URL dan URL, dan klik "Kirim" tombol, Gif demo sebagai berikut:


Contoh metode POST form

Mari kita melakukan Servlet atas sedikit dimodifikasi sehingga dapat menangani GET dan POST metode. BerikutHelloForm.java Servlet menggunakan GET dan POST metode untuk memproses input yang diberikan oleh browser Web.

Catatan: Jika data yang diajukan data formulir di transcoding Cina diperlukan:

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

Sekarang, mengkompilasi penyebaran Servlet atas, dan menggunakan hello.html dengan metode POST diuji, sebagai berikut:

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

Berikut adalah bentuk output aktual di atas, cobalah untuk memasukkan nama URL dan URL, dan klik "Kirim" tombol, Gif demo sebagai berikut:


Untuk melewatkan data ke program kotak Servlet

Bila Anda perlu memilih lebih dari satu pilihan untuk menggunakan kotak.

Berikut adalah HTML contoh kode checkbox.html, bentuk dengan dua kotak centang.

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

Berikut ini adalah prosedur CheckBox.java Servlet untuk menangani browser Web memberikan kotak input.

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

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

Contoh di atas akan menampilkan hasil sebagai berikut:


Baca semua parameter bentuk

Berikut ini adalah contoh generik penggunaan metode HttpServletRequestgetParameterNames () untuk membaca semua parameter yang tersedia dari formulir.Metode ini mengembalikan sebuah enumerasi yang berisi nama parameter tidak ditentukan pesanan.

Setelah kita memiliki pencacahan, kita dapat menghitung beredar secara standar, menggunakanhasMoreElements ()metode untuk menentukan kapan untuk berhenti menggunakan metodenextElement ()untuk mendapatkan nama masing-masing parameter.

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

}

Sekarang, coba Servlet atas melalui formulir di bawah ini:

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

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

Sekarang gunakan formulir di atas untuk memanggil Servlet, menghasilkan hasil sebagai berikut:

Anda dapat mencoba untuk membaca data formulir Servlet atas lainnya, seperti kotak teks, tombol radio, atau kotak tarik-turun dan seterusnya.