Latest web development tutorials

dati del modulo Servlet

In molti casi, abbiamo bisogno di passare un po 'di informazioni dal browser al server Web, e in ultima analisi, al demone. I browser sono due modi per passare le informazioni al server Web sono GET e POST metodi.

metodo GET

metodo per inviare le informazioni all'utente codificato per la richiesta della pagina GET. Pagina e informazioni intermedie codificati usando delimitato da caratteri, come segue ?:

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

GET è il metodo predefinito di passare informazioni dal browser al processo del server Web che produrrà una lunga serie, appare nella barra degli indirizzi del browser. Se si desidera passare una password del server o altre informazioni sensibili, si prega di non utilizzare il metodo GET. Ci GET limite di dimensione metodo: richiesta di stringa può avere fino a 1024 caratteri.

Queste informazioni vengono trasmesse mediante testa QUERY_STRING, e si può accedere tramite la variabile d'ambiente QUERY_STRING, Servlet utilizzare il metododoGet () per gestire questo tipo di richiesta.

metodo POST

Un altro metodo più affidabile di passare informazioni al demone è il metodo POST. metodo POST per confezionare informazioni essenzialmente nello stesso modo come GET, metodo POST ma non le informazioni in un URL? stringa di testo dopo il carattere viene trasmesso, ma le informazioni come un messaggio separato. Messaggio sotto forma di standard output raggiunto daemon, è possibile analizzare e li usa per standard output. Utilizzare Servlet doPost () per gestire questo tipo di richiesta.

Utilizzare Servlet di leggere i dati del modulo

Servlet per elaborare i dati del modulo, che utilizzano metodi diversi a seconda della situazione risolvere automaticamente:

  • getParameter (): è possibile chiamare il metodo request.getParameter () per ottenere il valore del parametro di modulo.
  • getParameterValues (): Se il parametro appare più di una volta, quindi chiamare il metodo e restituire più valori, come ad esempio le caselle di controllo.
  • getParameterNames (): Se si desidera ottenere un elenco completo di richieste di corrente tutti i parametri, quindi chiamare il metodo.

Esempi di utilizzo del metodo URL GET

Ecco un semplice URL, utilizzando il metodo GET per passare due valori da programmare HelloForm.

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

Qui è l'affare con il browser Web programmaHelloForm.java Servlet inserito.Useremo il metodogetParameter (), è possibile accedere facilmente la trasmissione di informazioni:

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);
	}
}
Abbiamo quindi creare la seguente voce nel 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>

Ora entrare nel browser barra degli indirizzihttp: // localhost: 8080 / TomcatTestNome / HelloForm =Questo tutorial & url = www.w3big.com,e prima di attivare il comando precedente è stato lanciato al fine di garantire ilserverTomcat?.Se tutto va bene, si ottengono i seguenti risultati:


Utilizzare il metodo GET modulo dell'esempio

Ecco un semplice esempio, utilizzando formati HTML e pulsante di invio passa i due valori. Useremo lo stesso HelloForm Servlet per elaborare l'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>

Salvare il file HTML per hello.html, la struttura delle directory è la seguente:

Prova a inserire il nome dell'URL e l'URL, e fare clic su pulsante "Invia", Gif demo come segue:


Esempi di metodo POST del form

Facciamo un po 'sopra Servlet modificato in modo che possa gestire GET e POST metodi. La seguenteHelloForm.java servlet utilizza il metodo GET e POST per l'elaborazione di input proposta dal browser web.

Nota: Se sono necessari i dati presentati dati del modulo in transcodifica cinese:

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

Ora, compilare il dispiegamento della Servlet sopra, e utilizzare hello.html con metodi POST sono stati testati, come segue:

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

Ecco il modulo di uscita effettiva sopra, provare ad inserire il nome URL e l'URL e fare clic su pulsante "Invia", Gif demo come segue:


Per passare i dati al programma contenitore Servlet

Quando è necessario selezionare più di una opzione per utilizzare la casella.

Ecco un HTML esempi di codice checkbox.html, un modulo con due caselle di controllo.

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

Ecco procedure CheckBox.java Servlet per la gestione dei Web browser dà casella di 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);
	}
}

Impostare il web.xml corrispondente:

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

L'esempio sopra mostra i seguenti risultati:


Leggere tutti i parametri del modulo

Quanto segue è un esempio generico di uso del metodo HttpServletRequestgetParameterNames () per leggere tutti i parametri disponibili della forma.Questo metodo restituisce una enumerazione che contiene il nome del parametro non è nell'ordine specificato.

Una volta che abbiamo una enumerazione, possiamo elencare circola in un modo standard, utilizzandohasMoreElements ()per determinare quando smettere di usare il metodonextElement ()per ottenere il nome di ciascun parametro.

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

}

Ora, provate il Servlet sopra tramite il modulo sottostante:

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

Impostare il web.xml corrispondente:

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

Ora usare il modulo qui sopra per chiamare Servlet, produce i seguenti risultati:

Si può provare a leggere gli altri dati del modulo sopra Servlet, come caselle di testo, pulsanti di opzione, o la casella a discesa e così via.