Latest web development tutorials

données de formulaire Servlet

Dans de nombreux cas, nous avons besoin de passer des informations à partir du navigateur vers le serveur Web, et, finalement, le démon. Les navigateurs sont deux façons de transmettre des informations au serveur Web sont des méthodes GET et POST.

Méthode GET

GET méthode pour envoyer les informations utilisateur codé à la demande de page. Page et de l'information intermédiaire codé en utilisant le caractère délimité comme suit ?:

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

GET est la méthode de transmettre des informations à partir du navigateur au processus du serveur Web qui produira une longue chaîne par défaut, il apparaît dans la barre d'adresse du navigateur. Si vous voulez passer un mot de passe du serveur ou d'autres informations sensibles, s'il vous plaît ne pas utiliser la méthode GET. Il GET méthode limite de taille: la demande chaîne peut avoir jusqu'à 1024 caractères.

Ces informations sont transmises en utilisant la tête QUERY_STRING, et peut être consulté par la variable d'environnement QUERY_STRING, Servlet utiliser la méthodedoGet () pour gérer ce type de demande.

méthode POST

Une autre méthode plus fiable de transmettre des informations au démon est la méthode POST. méthode POST pour emballer des informations essentiellement de la même manière que GET, la méthode POST, mais pas les informations sous forme d'URL? chaîne de texte après le caractère est transmis, mais l'information comme un message séparé. Un message sous la forme de sortie standard atteint démon, vous pouvez analyser et les utiliser pour la sortie standard. Utilisez Servlet doPost () pour gérer ce type de demande.

Utilisez Servlet pour lire les données de formulaire

Servlet pour traiter les données de formulaire, qui utilisent des méthodes différentes en fonction de la situation résoudre automatiquement:

  • getParameter (): Vous pouvez appeler la méthode request.getParameter () pour obtenir la valeur du paramètre de forme.
  • getParameterValues (): Si le paramètre apparaît plus d'une fois, puis appelez la méthode et renvoyer plusieurs valeurs, telles que des cases à cocher.
  • getParameterNames (): Si vous souhaitez obtenir une liste complète des demandes actuelles de tous les paramètres, puis appelez la méthode.

Des exemples d'utilisation de la méthode URL GET

Voici une URL simple, en utilisant la méthode GET pour passer deux valeurs à programmer HelloForm.

http: // localhost: 8080 / TomcatTest / nom HelloForm = Ce tutoriel & url = www.w3big.com?

Voici le deal avec le navigateur Web entré programmeHelloForm.java Servlet.Nous allons utiliser la méthodegetParameter (), vous pouvez facilement accéder à la transmission de l' information:

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);
	}
}
Nous créons ensuite l'entrée suivante dans le fichierweb.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>

Entrez maintenant dans le navigateur barre d' adressehttp: // localhost: 8080 / TomcatTestnom / HelloForm =Ce tutoriel & url = www.w3big.com,et avant le déclenchement de la commande ci - dessus a été lancée pour assurer que leserveurTomcat?.Si tout va bien, vous obtiendrez les résultats suivants:


Utilisez la méthode sous forme de GET de l'exemple

Voici un exemple simple, en utilisant des formulaires HTML et bouton de soumission passe les deux valeurs. Nous allons utiliser le même HelloForm Servlet pour traiter l'entrée.

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

Enregistrez le fichier HTML à hello.html, la structure de répertoire est le suivant:

Essayez d'entrer le nom d'URL et URL, puis cliquez sur "Soumettre", demo gif comme suit:


Des exemples de la méthode POST du formulaire

Faisons un peu de Servlet ci-dessus modifié de sorte qu'il peut gérer GET et POST méthodes. LeHelloForm.java Servlet suivant utilise la méthode GET et POST pour le traitement de l'entrée donnée par le navigateur Web.

Remarque: Si les données soumises les données de formulaire dans le transcodage chinois est nécessaire:

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

Maintenant, compilez le déploiement de la Servlet ci-dessus, et utiliser hello.html avec des méthodes POST ont été testées, comme suit:

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

Voici la forme de sortie réelle ci-dessus, essayez d'entrer le nom d'URL et URL, puis cliquez sur «Soumettre» bouton, demo gif comme suit:


Pour transmettre des données au programme de boîte de Servlet

Lorsque vous devez sélectionner plus d'une option pour utiliser la boîte.

Voici un HTML des exemples de code checkbox.html, un formulaire avec deux cases.

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

Voici les procédures CheckBox.java Servlet pour le traitement navigateur Web donne boîte d'entrée.

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

Réglez le web.xml correspondant:

<?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'exemple ci-dessus indique les résultats suivants:


Lire tous les paramètres de la forme

Ce qui suit est un exemple générique de l'utilisation de la méthode HttpServletRequestgetParameterNames () pour lire tous les paramètres disponibles de la forme.Cette méthode renvoie une énumération contenant le nom du paramètre est pas spécifié l'ordre.

Une fois que nous avons une énumération, nous pouvons énumérer circulant de manière standard, en utilisanthasMoreElements ()pour déterminer le moment de cesser d' utiliser la méthodenextElement ()pour obtenir le nom de chaque paramètre.

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

}

Maintenant, essayez le Servlet ci-dessus à travers le formulaire ci-dessous:

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

Réglez le web.xml correspondant:

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

Maintenant, utilisez le formulaire ci-dessus pour appeler Servlet, produit les résultats suivants:

Vous pouvez essayer de lire les autres données de formulaire Servlet ci-dessus, tels que les zones de texte, boutons radio, ou zone de liste déroulante et ainsi de suite.