Latest web development tutorials

dados de formulário Servlet

Em muitos casos, precisamos passar algumas informações do navegador para o servidor Web e, finalmente, para o daemon. Browsers são duas formas de passar informações para o servidor Web são métodos GET e POST.

método GET

GET método para enviar as informações do usuário codificado para a solicitação de página. Página e informações intermédia codificados usando delimitada por caracteres, da seguinte forma ?:

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

GET é o método padrão de passar informações a partir do navegador para o processo do servidor Web que irá produzir uma cadeia longa, ele aparece na barra de endereços do browser. Se você quer passar um senhas de servidor ou outras informações confidenciais, por favor, não use o método GET. Há método GET limite de tamanho: pedido seqüência pode ter até 1024 caracteres.

Esta informação é transmitida usando cabeça QUERY_STRING, e pode ser acessado através da variável de ambiente QUERY_STRING, Servlet usar o métododoGet () para lidar com este tipo de solicitação.

método POST

Outro método mais confiável de passar informações para o daemon é o método POST. método POST para empacotar informações essencialmente da mesma maneira como GET, método POST, mas não a informação como um URL? Seqüência de texto depois que o personagem é transmitida, mas a informação como uma mensagem separada. Message in a forma de saída padrão alcançado daemon, você pode analisar e usá-los para a saída padrão. Use Servlet doPost () para lidar com este tipo de solicitação.

Use Servlet para ler dados do formulário

Servlet para processar os dados do formulário, que usam métodos diferentes, dependendo da situação resolve automaticamente:

  • getParameter (): Você pode chamar o método request.getParameter () para obter o valor do parâmetro de formulário.
  • getParameterValues (): Se o parâmetro aparece mais de uma vez, em seguida, chamar o método e retornar vários valores, tais como caixas de seleção.
  • getParameterNames (): Se você deseja obter uma lista completa das solicitações atuais todos os parâmetros, em seguida, chamar o método.

Exemplos de utilização do método de URL GET

Aqui está uma URL simples, usando o método GET para passar dois valores para o programa HelloForm.

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

Aqui é o negócio com o navegador Web entrou programaHelloForm.java Servlet.Nós vamos usar o métodogetParameter (), você pode facilmente acessar a transmissão de informações:

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);
	}
}
Em seguida, crie a seguinte entrada no arquivoweb.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>

Agora digite no navegador o endereço barhttp: // localhost: 8080 / TomcatTestnome / HelloForm =Este tutorial & url = www.w3big.com,e antes de acionar o comando acima foi criado para garantir que oservidorTomcat?.Se tudo correr bem, você receberá os seguintes resultados:


Use o método de formulário GET do Exemplo

Aqui está um exemplo simples, usando formulários HTML e enviar botão passa os dois valores. Vamos usar o mesmo HelloForm Servlet para processar a entrada.

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

Salve o arquivo HTML para hello.html, a estrutura de diretórios é a seguinte:

Tente digitar o nome URL e URL, e clique em "Enviar", Gif demonstração da seguinte forma:


Exemplos de método POST do formulário

Vamos fazer um pouco de Servlet acima modificado para que ele possa lidar com GET e POST métodos. A seguirHelloForm.java Servlet usa o método GET e POST para o processamento da entrada dada pelo navegador da Web.

Nota: Se os dados apresentados dados de formulários em transcodificação chinês é necessária:

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

Agora, compile a implantação do Servlet acima, e usar hello.html com métodos POST foram testados, como 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>

Aqui está a forma de saída real acima, tente introduzir o nome do URL e URL, e clique em "Enviar", Gif demonstração da seguinte forma:


Para passar os dados para o programa Caixa de Servlet

Quando você precisa selecionar mais de uma opção para usar a caixa.

Aqui está um HTML exemplos de código checkbox.html, um formulário com duas caixas de seleção.

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

Aqui está procedimentos CheckBox.java Servlet para lidar com navegador Web dá a caixa de entrada.

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

Defina o web.xml correspondente:

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

O exemplo acima irá mostrar os seguintes resultados:


Ler todos os parâmetros do formulário

O que se segue é um exemplo genérico da utilização do método HttpServletRequestgetParameterNames () para ler todos os parâmetros disponíveis do formulário.Este método retorna uma enumeração que contém o nome do parâmetro não é especificado ordem.

Uma vez que temos uma enumeração, podemos enumerar a circular de forma padrão, utilizando o método() hasMoreElementspara determinar quando parar de usar métodonextElement ()para obter o nome de cada parâmetro.

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

}

Agora, tente o Servlet acima através do formulário abaixo:

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

Defina o web.xml correspondente:

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

Agora use o formulário acima para chamar Servlet, produz os seguintes resultados:

Você pode tentar ler os outros dados do formulário acima Servlet, como caixas de texto, botões de rádio, ou a caixa drop-down e assim por diante.