JSP - Processamento de Formulários
Neste capítulo, discutiremos o Processamento de Formulários em JSP. Você deve ter se deparado com muitas situações em que precisa passar algumas informações de seu navegador para o servidor da web e, finalmente, para seu programa de back-end. O navegador usa dois métodos para passar essas informações ao servidor da web. Esses métodos são o Método GET e o Método POST.
Os métodos no processamento de formulários
Vamos agora discutir os métodos de Processamento de Formulários.
Método GET
O método GET envia as informações codificadas do usuário anexadas à solicitação de página. A página e as informações codificadas são separadas por? personagem da seguinte forma -
http://www.test.com/hello?key1=value1&key2=value2
O método GET é o método padrão para passar informações do navegador para o servidor web e produz uma longa string que aparece no seu navegador Location:box. Recomenda-se que o método GET seja melhor não usado. se você tiver senha ou outras informações confidenciais para passar para o servidor.
O método GET tem limitação de tamanho: only 1024 characters can be in a request string.
Esta informação é passada usando QUERY_STRING header e estará acessível por meio da variável de ambiente QUERY_STRING, que pode ser tratada usando getQueryString() e getParameter() métodos do objeto de solicitação.
Método POST
Um método geralmente mais confiável de passar informações para um programa de back-end é o método POST.
Este método empacota as informações exatamente da mesma maneira que o método GET, mas em vez de enviá-las como uma string de texto após um? no URL, ele o envia como uma mensagem separada. Esta mensagem chega ao programa de backend na forma de entrada padrão que você pode analisar e usar para seu processamento.
JSP lida com este tipo de solicitações usando getParameter() método para ler parâmetros simples e getInputStream() método para ler o fluxo de dados binários vindo do cliente.
Leitura de dados de formulário usando JSP
JSP lida com a análise de dados de formulário automaticamente usando os seguintes métodos, dependendo da situação -
getParameter() - Você liga request.getParameter() método para obter o valor de um parâmetro de formulário.
getParameterValues() - Chame este método se o parâmetro aparecer mais de uma vez e retornar vários valores, por exemplo, caixa de seleção.
getParameterNames() - Chame esse método se quiser uma lista completa de todos os parâmetros na solicitação atual.
getInputStream() - Chame este método para ler o fluxo de dados binários vindo do cliente.
Exemplo de método GET usando URL
A seguinte URL passará dois valores para o programa HelloForm usando o método GET.
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI
Abaixo está o main.jspPrograma JSP para lidar com a entrada fornecida pelo navegador da web. Vamos usar ogetParameter() método que torna muito fácil acessar as informações passadas -
<html>
<head>
<title>Using GET Method to Read Form Data</title>
</head>
<body>
<h1>Using GET Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
Agora digite http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI no seu navegador Location:box. Isso irá gerar o seguinte resultado -
Usando o método GET para ler os dados do formulário
|
Exemplo de método GET usando formulário
A seguir está um exemplo que passa dois valores usando o FORM HTML e o botão de envio. Vamos usar o mesmo JSP main.jsp para lidar com essa entrada.
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Mantenha este HTML em um arquivo Hello.htm e coloque-o em <Tomcat-installation-directory>/webapps/ROOT directory. Quando você acessariahttp://localhost:8080/Hello.htm, você receberá a seguinte saída.
<p> Tente inserir o nome e o sobrenome e clique no botão enviar para ver o resultado em sua máquina local onde o tomcat está sendo executado. Com base na entrada fornecida, ele gerará um resultado semelhante ao mencionado no exemplo acima.Exemplo de método POST usando formulário
Vamos fazer uma pequena modificação no JSP acima para lidar com os métodos GET e POST. Abaixo está omain.jsp Programa JSP para lidar com a entrada fornecida pelo navegador da web usando os métodos GET ou POST.
De fato, não há mudança no JSP acima porque a única maneira de passar parâmetros é alterada e nenhum dado binário está sendo passado para o programa JSP. Os conceitos relacionados ao manuseio de arquivos serão explicados em um capítulo separado, onde precisamos ler o fluxo de dados binários.
<html>
<head>
<title>Using GET and POST Method to Read Form Data</title>
</head>
<body>
<center>
<h1>Using POST Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
A seguir está o conteúdo do Hello.htm arquivo -
<html>
<body>
<form action = "main.jsp" method = "POST">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Vamos agora manter main.jsp e hello.htm em <Tomcat-installationdirectory>/webapps/ROOT directory. Quando você acessahttp://localhost:8080/Hello.htm, você receberá a seguinte saída.
Tente inserir o nome e o sobrenome e clique no botão enviar para ver o resultado em sua máquina local onde o tomcat está sendo executado.
Com base nas informações fornecidas, você receberá resultados semelhantes aos dos exemplos acima.
Passando Dados da Caixa de Seleção para o Programa JSP
As caixas de seleção são usadas quando mais de uma opção deve ser selecionada.
A seguir está um exemplo HTML code, CheckBox.htm, para um formulário com duas caixas de seleção.
<html>
<body>
<form action = "main.jsp" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" /> Chemistry
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
O código acima irá gerar o seguinte resultado -
A seguir está o programa JSP main.jsp para lidar com a entrada fornecida pelo navegador da web para o botão da caixa de seleção.
<html>
<head>
<title>Reading Checkbox Data</title>
</head>
<body>
<h1>Reading Checkbox Data</h1>
<ul>
<li><p><b>Maths Flag:</b>
<%= request.getParameter("maths")%>
</p></li>
<li><p><b>Physics Flag:</b>
<%= request.getParameter("physics")%>
</p></li>
<li><p><b>Chemistry Flag:</b>
<%= request.getParameter("chemistry")%>
</p></li>
</ul>
</body>
</html>
O programa acima irá gerar o seguinte resultado -
Reading Checkbox Data
Maths Flag :: on
Physics Flag:: null
Chemistry Flag:: on
Lendo todos os parâmetros do formulário
A seguir está um exemplo genérico que usa getParameterNames()método de HttpServletRequest para ler todos os parâmetros de formulário disponíveis. Este método retorna uma Enumeração que contém os nomes dos parâmetros em uma ordem não especificada.
Assim que tivermos uma Enumeração, podemos fazer um loop para baixo da Enumeração da maneira padrão, usando o hasMoreElements() método para determinar quando parar e usar o nextElement() método para obter cada nome de parâmetro.
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</h2>
<table width = "100%" border = "1" align = "center">
<tr bgcolor = "#949494">
<th>Param Name</th>
<th>Param Value(s)</th>
</tr>
<%
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</center>
</body>
</html>
A seguir está o conteúdo do Hello.htm -
<html>
<body>
<form action = "main.jsp" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
Agora tente chamar JSP usando o Hello.htm acima; isso geraria um resultado parecido com o abaixo com base na entrada fornecida -
Lendo todos os parâmetros do formulário
Nome Param | Valor (es) de parâmetro |
---|---|
Matemáticas | em |
química | em |
Você pode tentar o JSP acima para ler os dados de qualquer outro formulário que contenha outros objetos como caixa de texto, botão de rádio ou lista suspensa, etc.