Données du formulaire de servlet


Dans de nombreux cas, certaines informations doivent être transmises du navigateur au serveur Web et enfin au programme d'arrière-plan. Le navigateur utilise deux méthodes pour transmettre ces informations au serveur Web, la méthode GET et la méthode POST.

Méthode GET

La méthode GET envoie des informations utilisateur codées à la demande de page. La page et les informations codées sont séparées par des caractères ?, comme indiqué ci-dessous :

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

La méthode GET est la méthode par défaut de transmission des informations du navigateur au serveur Web. Elle générera une très longue chaîne. apparaît dans la barre d'adresse du navigateur. Si vous transmettez des mots de passe ou d'autres informations sensibles au serveur, n'utilisez pas la méthode GET. La méthode GET a une limite de taille : vous ne pouvez avoir qu'un maximum de 1024 caractères dans la chaîne de requête.

Ces informations sont transmises à l'aide de l'en-tête QUERY_STRING et sont accessibles via la variable d'environnement QUERY_STRING. Le Servlet utilise la méthode doGet() pour gérer ce type de requête.

Méthode POST

Une autre méthode plus fiable de transmission d'informations au programme d'arrière-plan est la méthode POST. La méthode POST regroupe les informations de la même manière que la méthode GET, mais au lieu d'envoyer les informations sous forme de chaîne de texte après le caractère ? dans l'URL, la méthode POST envoie les informations sous forme de message distinct. Les messages sont transmis au programme d'arrière-plan sous forme de sortie standard, que vous pouvez analyser et utiliser. Les servlets utilisent la méthode doPost() pour gérer ce type de requête.

Utilisez Servlet pour lire les données du formulaire

Servlet traite les données du formulaire, qui seront automatiquement analysées à l'aide de différentes méthodes selon différentes situations :

  • getParameter() : Vous pouvez appeler la méthode request.getParameter() pour obtenir la valeur du paramètre du formulaire.

  • getParameterValues() : Cette méthode est appelée si le paramètre apparaît plus d'une fois et renvoie plusieurs valeurs, comme une case à cocher.

  • getParameterNames() : Appelez cette méthode si vous souhaitez obtenir une liste complète de tous les paramètres de la requête en cours.

Exemple de méthode GET utilisant une URL

Vous trouverez ci-dessous une URL simple qui transmettra deux valeurs au programme HelloForm en utilisant la méthode GET.

http://localhost:8080/HelloForm?first_name=ZARA&last_name=ALI

Ce qui suit est HelloForm.java qui gère les entrées du navigateur Web Programme de servlets. Nous utiliserons la méthode getParameter(), qui permet d'accéder facilement aux informations transmises :

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 docType =
		"<!doctype html public \"-//w3c//dtd html 4.0 " +
		"transitional//en\">\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("first_name") + "\n" +
		    "  <li><b>姓氏</b>:"
		    + request.getParameter("last_name") + "\n" +
		    "</ul>\n" +
		    "</body></html>");
	}

}

En supposant que votre environnement a été correctement configuré, compilez HelloForm.java comme suit :

$ javac HelloForm.java

Si tout se passe bien, la compilation ci-dessus produira le fichier HelloForm.class. Ensuite, vous devez copier le fichier de classe dans <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes et le localiser dans <Tomcat-installation-directory>/webapps/ROOT/WEB. Créez l'entrée suivante. dans le fichier web.xml de INF/ :

    <servlet>
        <servlet-name>HelloForm</servlet-name>
        <servlet-class>HelloForm</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloForm</servlet-name>
        <url-pattern>/HelloForm</url-pattern>
    </servlet-mapping>

Entrez maintenant http://localhost:8080/HelloForm?first_name=ZARA&last_name=ALI dans la barre d'adresse de votre navigateur et assurez-vous que le serveur Tomcat est démarré avant de déclencher la commande ci-dessus. Si tout se passe bien, vous obtiendrez le résultat suivant :

Utilisez la méthode GET pour lire les données du formulaire

  • 使用 GET 方法读取表单数据

    • 名字:ZARA

    • 姓氏:ALI

    Prénom

    : ZARA

  • Nom : ALI

  • < /ul>< /td>

Exemple d'utilisation de la méthode GET du formulaire
Ce qui suit est un exemple simple qui utilise un formulaire HTML et un bouton de soumission pour transmettre deux valeurs. Nous utiliserons le même Servlet HelloForm pour gérer l'entrée.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<form action="HelloForm" method="GET">
名字:<input type="text" name="first_name">
<br />
姓氏:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>
</body>
</html>

Enregistrez ce code HTML dans le fichier hello.htm et placez-le dans le répertoire <Tomcat-installation-directory>/webapps/ROOT. Vous trouverez ci-dessous le résultat réel du formulaire ci-dessus lorsque vous visitez

http://localhost:8080/Hello.htm

.

Essayez de saisir votre prénom et votre nom, puis cliquez sur le bouton « Soumettre » pour voir le résultat sur votre machine. Sur la base des informations fournies, il produit des résultats similaires à l'instance précédente.

Utilisation de l'instance de méthode POST du formulaire

Apportons une petite modification au servlet ci-dessus afin qu'il puisse gérer à la fois les méthodes GET et POST. Le programme de servlet
HelloForm.java
suivant utilise les méthodes GET et POST pour traiter les entrées fournies par un navigateur Web.

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloForm extends HttpServlet {
 
  // 处理 GET 方法请求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");

      PrintWriter out = response.getWriter();
	  String title = "Using GET Method to Read Form Data";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\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("first_name") + "\n" +
                "  <li><b>姓氏</b>:"
                + request.getParameter("last_name") + "\n" +
                "</ul>\n" +
                "</body></html>");
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

Maintenant, compilez et déployez le servlet ci-dessus, et utilisez Hello.htm avec la méthode POST pour les tests, comme indiqué ci-dessous :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<form action="HelloForm" method="POST">
名字:<input type="text" name="first_name">
<br />
姓氏:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>
</body>
</html>

Ce qui suit est le résultat réel du formulaire ci-dessus, essayez pour saisir le nom et le prénom, puis cliquez sur le bouton « Soumettre » pour afficher le résultat sur votre ordinateur local.

Sur la base des informations fournies, cela produira des résultats similaires à l'instance précédente.

Transmettre les données des cases à cocher au programme Servlet
Lorsque plusieurs options doivent être sélectionnées, des cases à cocher sont utilisées.

Ce qui suit est un exemple de code HTML CheckBox.htm, un formulaire avec deux cases à cocher.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<form action="CheckBox" 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>

Le résultat de ce code est la forme suivante :

读取复选框数据

  • 数学标识:on

  • 物理标识:null

  • 化学标识:on

<🎜><🎜><🎜>Ci-dessous se trouve le programme Servlet CheckBox.java qui gère l'entrée de case à cocher donnée par le navigateur Web. <🎜>
// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class CheckBox extends HttpServlet {
 
  // 处理 GET 方法请求的方法
  public 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><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>数学标识:</b>: "
                + request.getParameter("maths") + "\n" +
                "  <li><b>物理标识:</b>: "
                + request.getParameter("physics") + "\n" +
                "  <li><b>化学标识:</b>: "
                + request.getParameter("chemistry") + "\n" +
                "</ul>\n" +
                "</body></html>");
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}
<🎜>L'exemple ci-dessus affichera les résultats suivants : <🎜>

Lire les données de la case à cocher

  • <🎜><🎜>Drapeau mathématique : <🎜>activé<🎜>
  • <🎜><🎜>Drapeau physique : <🎜>nul<🎜>
  • < li><🎜><🎜>Identification chimique : <🎜>on<🎜>

Lire tous les paramètres du formulaire

Ce qui suit est un exemple général, utilisant la méthode getParameterNames() de HttpServletRequest pour lire tous les paramètres de formulaire disponibles. Cette méthode renvoie une énumération contenant les noms de paramètres dans un ordre non spécifié.

Une fois que nous avons une énumération, nous pouvons parcourir l'énumération de la manière standard, en utilisant la méthode hasMoreElements() pour déterminer quand arrêter, en utilisant la nextElement() méthode 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 via le formulaire ci-dessous :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</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>

Appelez maintenant le Servlet en utilisant le formulaire ci-dessus, ce qui produira le résultat suivant :

Vous pouvez essayer d'utiliser le servlet ci-dessus pour lire d'autres données de formulaire, telles que des zones de texte, des boutons radio ou des listes déroulantes, etc.