Latest web development tutorials

Servlet danych formularza

W wielu przypadkach musimy przekazać pewne informacje z przeglądarki do serwera sieci Web, a ostatecznie do demona. Przeglądarki są dwa sposoby przekazywania informacji do serwera WWW są metody GET i POST.

Metoda GET

GET metodę wysyłania informacji o użytkowniku zakodowany na żądanie strony. Page i informacja pośrednia kodowane przy użyciu znaków oddzielonych następujący sposób ?:

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

GET jest domyślna metoda przekazywania informacji z przeglądarki do procesu serwera sieci Web, która będzie produkować długi łańcuch, to pojawia się w pasku adresu przeglądarki. Jeśli chcesz przekazać haseł serwera lub innych poufnych informacji, prosimy nie korzystać z metody GET. Tam dostać limit rozmiaru metoda: Żądanie ciąg może mieć maksymalnie 1024 znaków.

Informacje te są przesyłane za pomocą QUERY_STRING głowę i można uzyskać za pośrednictwem zmiennej środowiskowej QUERY_STRING, Servlet użyć metodydoGet (), aby obsłużyć tego typu żądanie.

metoda POST

Innym, bardziej niezawodna metoda przekazywania informacji do demona jest metodą POST. Metoda POST pakowania informacji w zasadzie w taki sam sposób jak GET, POST, ale nie sposób informacji jako URL? Ciąg tekstowy po znaku jest przesyłany, ale informacje w oddzielnym komunikacie. Wiadomość w formie standardowego wyjścia osiągnął demona, można przetworzyć i wykorzystać je do standardowego wyjścia. Korzystanie Servlet doPost () w celu obsługi tego typu żądania.

Użyj serwletu do odczytu danych formularza

Servlet przetwarzać dane formularzy, które używają różnych metod w zależności od sytuacji automatycznie rozwiązać:

  • getParameter (): Można wywołać metodę request.getParameter (), aby uzyskać wartość parametru formularza.
  • getParameterValues (): Jeżeli parametr pojawia się więcej niż jeden raz, a następnie wywołać metodę i zwracać wiele wartości, takich jak pola wyboru.
  • getParameterNames (): Jeśli chcesz uzyskać pełną listę aktualnych żądań wszystkich parametrów, a następnie wywołać metodę.

Przykłady zastosowania metody GET URL

Oto prosty URL, używając metody GET przejść dwie wartości do programu HelloForm.

http: // localhost: 8080 / TomcatTest / nazwisko HelloForm = Ten poradnik & url = www.w3big.com?

Tu chodzi z przeglądarki internetowej wprowadzonego programuHelloForm.java Servlet.Będziemy wykorzystywać metodęgetParameter (), można łatwo uzyskać dostęp do przekazu informacji:

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);
	}
}
Następnie należy utworzyć następujący wpis w plikuweb.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>

Teraz wpisz w pasku adresu przeglądarkihttp: // localhost: 8080 / TomcatTestNazwa / HelloForm =Ten poradnik & url = www.w3big.com,a przed wywołaniem powyższe polecenie została uruchomiona w celu zapewnieniaserwerTomcat?.Jeśli wszystko pójdzie dobrze, pojawi się następujące wyniki:


Użyj metody GET formularz z przykładu

Oto prosty przykład, za pomocą formularzy HTML i przedłożyć przycisku przechodzi dwie wartości. Będziemy korzystać z tego samego serwletu HelloForm przetwarzać dane wejściowe.

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

Zapisz plik HTML do hello.html, struktura katalogów jest następująca:

Spróbuj wpisać nazwę i adres URL, a następnie kliknij przycisk "Wyślij", gif demo, co następuje:


Przykłady metody POST formularza

Zróbmy trochę wyżej Servlet zmodyfikowany tak, że można go obsługiwać GET i POST metod. PoniższyHelloForm.java Servlet używa GET i POST metodę przetwarzania wejścia podany przez przeglądarkę WWW.

Uwaga: Jeśli wymagane dane przedstawione dane formularza w chińskim transkodowania:

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

Teraz skompilować wdrożenie powyższego serwletu i używać hello.html metodami POST były testowane, co następuje:

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

Oto aktualna forma wyjściowa powyżej, spróbuj wpisać nazwę i adres URL, a następnie kliknij przycisk "Wyślij", gif demo, co następuje:


Aby przekazać dane do programu skrzynki Servlet

Kiedy trzeba wybrać więcej niż jedną opcję, aby użyć okna.

Oto przykłady kodu HTML checkbox.html, forma z dwoma polami wyboru.

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

Oto procedury CheckBox.java Servlet do obsługi przeglądarki internetowej daje pole wprowadzania.

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

Ustaw odpowiedni 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>

Powyższy przykład pokazuje następujące wyniki:


Odczytu wszystkich parametrów w postaci

Poniżej znajduje się nazwą rodzajową przykładem zastosowania metody HttpServletRequestgetParameterNames () do odczytu wszystkich dostępnych parametrów postaci.Ta metoda zwraca wyliczenie zawierający nazwę parametr nie zostanie określony porządek.

Gdy mamy wyliczenie, możemy wyliczyć krążących w standardowy sposób, wykorzystując metodę() hasMoreElementsaby określić kiedy przerwać stosowanie metodynextElement (),aby uzyskać nazwę każdego parametru.

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

}

Teraz spróbuj powyższy serwletu poprzez poniższy formularz:

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

Ustaw odpowiedni 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>

Teraz za pomocą formularza powyżej zadzwonić serwletu, daje następujące wyniki:

Można spróbować odczytać inne dane formularza powyżej Servlet, takich jak pola tekstowe, przyciski radiowe, lub w polu rozwijanej i tak dalej.