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.