Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Servidor Sistemas web SERVLETs ServletsServlets • Uma servlet é um componente no lado do servidor. • Pode ser usada para estender a funcionalidade de qualquer servidor compatível com Java. • São independentes do servidor e da plataforma. • São executadas dentro do servidor. ServletsServlets • Uma servlet é uma instância de uma classe que implementa a interface javax.servlet.Servlet. • Na maioria das vezes estende uma implementação dessa interface – javax.servlet.http.HttpServlet (abstrata). JSP (abstrata). • As servlets não tem interface cliente – são independentes da exibição. • A seguir será apresentado um exemplo simples de Servlet, antecedido de breve explicação HTML. HTMLHTML • Abaixo temos a estrutura básica da página HTML, que também é chamado de documento HTML. JSP <html> <head> <title>Cálculo de Fatorial </title> </head> <body> </body> </html> • As marcas (tags) compõem a linguagem HTML que não é case-sensitive. <html> delimita todo o documento HTML <head> engloba o cabeçalho do documento <title> define o texto a ser exibido pelo browser <body> delimita o corpo do documento. HTMLHTML • Página com um conteúdo no corpo. No exemplo um FORM que será exibido como formulário a ser preenchido. JSP <body> <FORM NAME="frm" METHOD="POST" ACTION="/proj3/fatorial"> <table> <th> Cálculo de Fatorial </th> <tr> <td> NUMERO: </td> <td> <INPUT TYPE=TEXT NAME=“vNum" VALUE=“" > </td> </tr> <tr> <td> <INPUT TYPE=SUBMIT VALUE="Calcular"> </td> </tr> </table> </FORM> </body> </html> HTMLHTML <FORM> delimita área do formulário <method> atributo da tag FORM que define a forma de envio da requisição ao servidor Web, no caso do form anterior: POST <action> atributo da tag FORM que define uma ação a ser executada pelo servidor Web JSP executada pelo servidor Web <TABLE> delimita uma área de tabela. Aqui usada para organizar das informações e elementos visuais na página HTML <th> tag que delimita informações do cabeçalho da tabela <tr> delimita as informações de uma linha da tabela <td> delimita as informações de uma coluna da tabela HTMLHTML <INPUT TYPE=TEXT NAME=“vNum" VALUE=“" > <INPUT TYPE=TEXT define um campo texto no formulário. NAME=“vNum" define o nome do campo que será vNum que por sua vez será enviado ao servidor Web. No JSP que por sua vez será enviado ao servidor Web. No servidor Web esse campo se tornará um parâmetro contendo informação a ser processada. VALUE=““ define o conteúdo a ser exibido no campo vNum HTMLHTML <INPUT TYPE=SUBMIT VALUE="Calcular"> <INPUT TYPE=SUBMIT define um botão no formulário, que será utilizado para acionar a requisição a ser enviada ao servidor Web (enviar um request) JSP enviada ao servidor Web (enviar um request) VALUE=“Calcular“ define um label a ser exibido sobre o botão. Exemplo de Servlet SimplesExemplo de Servlet Simples JSP • No exemplo temos uma estrutura de uma classe servlet no formato criado automaticamente pelo Eclipse. import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletFatorial extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } Exemplo de Servlet SimplesExemplo de Servlet Simples • A servlet processa um parâmetro de nome vNum e gera o código HTML da página de resultado a ser retornada ao browser. JSP protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nm = request.getParameter("vNum"); int numero = Integer.parseInt(nm); int valorFat = fatorial(numero); PrintWriter out; out = response.getWriter();out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println("Calculo de Fatorial"); out.println("</TITLE></HEAD><BODY>"); out.println("Valor Recebido:"); out.println(numero); out.println("<BR>Resultado:"); out.println(valorFat); out.println("</BODY></HTML>"); out.close(); } Requisição e RespostaRequisição e Resposta • O browser envia uma requisição inicial ao servidor para obtenção de uma página. No exemplo aqui exposto, a requisição pode ser na forma abaixo: http://localhost:8080/proj3/fatorial.html • Alternativamente a requisição pode se resumir ao formato abaixo desde que a página fatorial.html seja definida com uma página default do proj9.definida com uma página default do proj9. http://localhost:8080/proj3/ • Definir uma página default de um projeto consiste em criar uma entrada (linha) no arquivo de configuração da aplicação – web.xml que está na pasta WEB-INF do projeto. Essa entrada é na forma abaixo. <welcome-file>fatorial.html</welcome-file> Requisição e RespostaRequisição e Resposta • Após o servidor Web processar a requisição inicial, o formulário descrito na página fatorial.html é retornado ao browser na forma HTML e exibido ao usuário, com aparência abaixo. • Após o usuário inserir a informação solicitada, aqui é um valor, o browser envia nova requisição ao servidor Web, tomando como base o method e o action definidos no formulário. Neste exemplo o request tem o formato abaixo. http://localhost:8080/proj3/fatorial Requisição e RespostaRequisição e Resposta • Quando o browser envia a requisição ao servidor por GET, o servidor aciona a Servlet e chama seu método doGET. A requisição POST aciona o método doPost. • Os métodos doGet e doPost possuem dois parâmetros que são objetos instâncias das classes HttpSerlvetRequest e HttpServletResponse. JSP • Os parâmetros (variáveis) recebidos do formulário são passados ao objeto da classe HttpSerlvetRequest que é parâmetro dos métodos citados. • O objeto da classe HttpServletResponse é utilizado para retornar dados para o browser cliente. • Os parâmetros são pares nome-valor. Eles são definidos no HTML com no exemplo: Requisição e RespostaRequisição e Resposta JSP <INPUT TYPE=TEXT NAME=“vNum" VALUE=“" > • No formulário ao usar o método POST, esse parâmetro será enviado ao servidor Web para ser entregue a uma instância da classe ServletFatorial. Abaixo a estrutura de dados HTTPclasse ServletFatorial. Abaixo a estrutura de dados HTTP enviada ao servidor Web. POST /proj9/fatorial HTTP/1.1 Referer: http://localhost/proj9/ Accept-Language: pt-br User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; Host: localhost:8080 Content-Length: 6 Connection: Keep-Alive Cache-Control: no-cache vNum=5 55 vNum • O mapeamento /fatorial para a ServletFatorial, foi definido quando a Servlet foi criada (no Eclipse) Requisição e RespostaRequisição e Resposta JSP • Considerando o uso do Eclipse, automaticamente, ou seja, de forma transparente ao codificador, foram inseridos trechos no arquivo web.xml.arquivo web.xml. • O arquivo web.xml é utilizado pelo container (servidor Web Java) para configurar a aplicação quando a mesma é publicada no servidor Web. O web.xml fica na pasta WEB-INF do projeto. Requisição e RespostaRequisição e Resposta JSP • Dentro do web.xml, o trecho da configuração da Servlet é transcrito abaixo. <servlet> <description></description> <display-name>ServletFatorial</display-name> <servlet-name>ServletFatorial</servlet-name> <servlet-class>classes.ServletFatorial</servlet-class> </servlet></servlet> <servlet-mapping> <servlet-name>ServletFatorial</servlet-name> <url-pattern>/fatorial</url-pattern> </servlet-mapping> • A localização do web.xml está em /proj3/WEB-INF/web.xml. • O POST para proj3/fatorial faz o container entender que a classe ServletFatorial deverá ser instanciada e executada. Requisição e RespostaRequisição e Resposta JSP • Na Servlet, você usa o método getParameter(...) para ter acesso aos parâmetros, ou seja, para recuperar os parâmetros recebidosdo formulário para processamento pela Servlet. String nm = request.getParameter("vNum"); • Observe que o objeto request é um parâmetro passado ao método doPost, veja o trecho abaixo protected void doPost(HttpServletRequest request ... • O método getParameter(...) recebe como argumento o nome da variável cujo valor deve ser obtido. No exemplo, obter o conteúdo da variável vNum. Conversão de variáveisConversão de variáveis JSP • O método getParameter(...) retorna uma informação do tipo String. String nm = request.getParameter("vNum"); • Na linha acima o objeto nm recebe o conteúdo da variável vNum que foi enviada pelo formulário. • Cada elemento HTML input type=“text” define uma variável a int numero = Integer.parseInt(nm); • Cada elemento HTML input type=“text” define uma variável a ser enviada ao servidor Web. • Se for necessário converter o valor de nm para um tipo inteiro utilize a forma abaixo. • Para outras conversões: utilize – Float.parseFloat(var), Double.parseDouble(var).. Estrutura Estrutura • Na Servlet, além dos métodos doPost, você pode implementar outros métodos para processamentos específicos na Servlet, conforme exemplo abaixo. Este método pode ser acionado a partir de outro método da Servlet. public int fatorial(int f) { int ft = 1; for (int i = 1; i <= f; i++) ft = ft * i;ft = ft * i; return ft; } protected void doPost(HttpServletRequest request, HttpServletResponse response) ...{ ... int resultado = fatorial(5); ... } Estrutura Estrutura • A Servlet pode gerar uma estrutura HTML para ser retornada ao browser, conforme exemplo a seguir. PrintWriter out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println("Calculo de Fatorial"); out.println("</TITLE></HEAD><BODY>"); out.println("Valor Recebido:"); out.println(numero); out.println("<BR>Resultado:"); out.println(valorFat); out.println("</BODY></HTML>"); out.close(); Estrutura Estrutura • A Servlet pode gerar uma estrutura HTML para ser retornada ao browser, conforme exemplo a seguir. O trecho foi retirado de dentro da implementação do método doPost da Servlet. PrintWriter out = response.getWriter(); • O objeto response é recebido no método doPost como• O objeto response é recebido no método doPost como parâmetro. • Ao chamar o método getWriter() obtemos um objeto (Instância) da classe PrintWriter. • Com o objeto out é gerado o conteúdo HTML a ser retornado ao browser. Retorno de informações ao browser Retorno de informações ao browser • Após a execução do método doPost, uma saida HTML é gerada e o conteúdo abaixo é retornado ao browser que exibe a informação ao usuário. <HTML> <HEAD> <TITLE>Calculo de Fatorial</TITLE> </HEAD> <BODY> Valor Recebido: 5 <BR>Resultado: 120 </BODY> </HTML> Valor Recebido: 5 Resultado: 120 • O conteúdo efetivamente exibido é o seguinte: Estrutura do projeto no EclipseEstrutura do projeto no Eclipse nome do projeto src=source – código fonte pacote das classes classes fontes conteúdo web e configuraçõesconteúdo web e configurações arquivo configuração da aplicação arquivos html Estrutura do projeto no Estrutura do projeto no TomcatTomcat
Compartilhar