Programação em Rede Servlets

Propaganda
Programação em Rede
IGE, ETI e EI
Servlets
Manipulação de dados de input em Servlets
Os dados de um formulário podem ser utilizados para pedidos GET ou POST. Com
servlets JAVA esta operação é efectuada pelo método getParameter de
HttpServletRequest, indicando o nome do parâmetro como argumento. O retorno é uma
String que corresponde ao valor da primeira ocorrência do parâmetro. A String é vazia se
o parâmetro não tem valor e é null se o parâmetro não existe. Se o parâmetro puder ter
mais do que um valor, então em vez de getParameter deve ser chamado o método
getParameterValues, que retorna uma matriz de Strings.
Programação em Rede
IGE, ETI e EI
Exemplo de leitura de três parâmetros
Não há nenhuma obrigatoriedade de ler os parâmetros num determinado momento, podendo isso ser
feito quando necessário.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading Three Request Parameters";
out.println(ServletUtilities.headWithTitle(title) +
"<BODY>\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<UL>\n" +
" <LI>param1: "
+ request.getParameter("param1") + "\n" +
" <LI>param2: "
+ request.getParameter("param2") + "\n" +
" <LI>param3: "
+ request.getParameter("param3") + "\n" +
"</UL>\n" +
"</BODY></HTML>");
}
}
Programação em Rede
Resultado:
IGE, ETI e EI
Programação em Rede
IGE, ETI e EI
Exemplo de listagem dos dados de um formulário
Exemplo que mostra os nomes de todos os parâmetros enviados e que os coloca numa tabela.
Os parâmetros sem valores ou com vários valores são identificados.
Inicialmente é feito o levantamento dos nomes dos parâmetros, através do método
getParameterNames de HttpServletRequest. Este método retorna um objecto do tipo
Enumeration.
Seguidamente, o Enumeration é percorrido, usando hasMoreElements para determinar o
fim do enumerado e nextElement para obter cada elemento.
NextElement retorna um Object, por isso é necessário fazer o cast para String e passar essa
String a getParameterValues, o que retorna uma matriz de Strings. Se esta matriz contém
uma única String e se esta está vazia, então o parâmetro não tem valor e o servlet gera a
indicação “No Value”. Por outro lado, se a matriz tem mais do que uma String, então o
parâmetro tem vários valores e estes são mostrados numa lista indentada. Enfim, se só ouver
um valor este é colocado na tabela.
Programação em Rede
IGE, ETI e EI
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ShowParameters extends HttpServlet {
public void doGet(HttpServletRequest request,
} else {
HttpServletResponse response)
out.println("<UL>");
throws ServletException, IOException {
for(int i=0; i<paramValues.length; i++) {
response.setContentType("text/html");
out.println("<LI>" + paramValues[i]);
PrintWriter out = response.getWriter();
}
String title = "Reading All Request Parameters";
out.println("</UL>");
out.println(ServletUtilities.headWithTitle(title) +
}
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
}
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
out.println("</TABLE>\n</BODY></HTML>");
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
}
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Parameter Name<TH>Parameter Value(s)");
public void doPost(HttpServletRequest request,
Enumeration paramNames = request.getParameterNames();
HttpServletResponse response)
while(paramNames.hasMoreElements()) {
throws ServletException, IOException
String paramName = (String)paramNames.nextElement();
{
out.println("<TR><TD>" + paramName + "\n<TD>");
doGet(request, response);
String[] paramValues = request.getParameterValues(paramName); }
if (paramValues.length == 1) {
}
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.print("<I>No Value</I>");
else
out.print(paramValue);
Programação em Rede
IGE, ETI e EI
Página HTML que envia determinado número de parâmetros ao servlet anterior
Esta página utiliza POST para enviar dados (como os formulários de acesso sujeito a password, por
exemplo).
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>A Sample FORM using POST</TITLE>
</HEAD>
<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">A Sample FORM using POST</H1>
<FORM ACTION="/servlet/hall.ShowParameters"
METHOD="POST">
Item Number:
<INPUT TYPE="TEXT" NAME="itemNum"><BR>
Quantity:
<INPUT TYPE="TEXT" NAME="quantity"><BR>
Price Each:
<INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR>
<HR>
First Name:
<INPUT TYPE="TEXT" NAME="firstName"><BR>
Last Name:
<INPUT TYPE="TEXT" NAME="lastName"><BR>
Middle Initial:
<INPUT TYPE="TEXT" NAME="initial"><BR>
Shipping Address:
<TEXTAREA NAME="address" ROWS=3
COLS=40></TEXTAREA><BR>
Credit Card:<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Visa">Visa<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Master Card">Master Card<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Amex">American Express<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Discover">Discover<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Java SmartCard">Java SmartCard<BR>
Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR>
Repeat Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Submit Order">
</CENTER>
</FORM>
</BODY>
</HTML>
Programação em Rede
Resultado:
IGE, ETI e EI
Programação em Rede
Então, o resultado da invocação do servlet é:
IGE, ETI e EI
Programação em Rede
IGE, ETI e EI
Exercício:
1. Primeira versão:
•
Programe uma página web que inclua um possível formulário para inscrição
de alunos na base de dados do CIISCTE, com a finalidade de abertura de
conta na rede de alunos.
•
Programe um servlet, que a invocar a partir da página anterior, que mostra
uma tabela com os dados de cada aluno.
2. Segunda versão:
•
Ligue a sua aplicação a uma base de dados para gestão dos dados referentes
aos alunos.
Download