Programação II Programação para a Web Christopher Burrows
Apache Tomcat O Apache Tomcat é um Servlet Container desenvolvido pela Apache Software Foundation. Implementa as tecnologias Java Servlets e Java Server Pages (JSP). http://tomcat.apache.org/
Java Servlets Os Servlets são programas que correm num servidor Web, permitindo gerar páginas dinamicamente consoante cada pedido (Http Request). São utilizados em diversas situações: O conteúdo da página varia consoante dados submetidos pelo cliente; Os dados são constantemente alterados; A página utiliza dados obtidos em Bases de dados ou outras fontes.
Java Server Pages O Java Server Pages (JSP) é uma tecnologia que, à semelhança dos Java Servlets, permite gerar páginas dinamicamente. A principal vantagem sobre os Servlets é que o JSP permite fundir código HTML estático com código HTML gerado dinamicamente.
Java Server Pages Não existem diferenças a nivel de capacidade entre os Java Servlets e JSPs, pelo que tudo o que é possivel fazer com um, também é possivel com o outro. No entanto, é muito mais conveniente escrever e alterar código HTML estático, do que uma série de printlns.
Apache Tomcat - Instalação Instalação da versão 6.0.16, disponivel em http://tomcat.apache.org
Apache Tomcat Instalação
Apache Tomcat Instalação Porta a utilizar para os Servlets/JSPs
Apache Tomcat - Instalação Directoria onde está instalado o JRE
Apache Tomcat Testar o Servidor Após a Instalação, abrir o Monitor Tomcat (Iniciar > Programas > Apache Tomcat 6.0 > Monitor Tomcat) Iniciar o Tomcat através do Monitor. Para testar o servidor, tentar abrir a página http://localhost:8080/ (a porta 8080 é a que tiver sido definida durante a instalação).
Apache Tomcat Testar o Servidor O browser deverá apresentar a seguinte página:
Apache Tomcat - Configuração Após a instalação do Tomcat, é necessário fazer a sua configuração no Eclipse. Para isto deverá ser utilizada a última versão do Eclipse IDE para Java EE ou, se utilizar o Eclipse IDE normal, instalar o Web Tools Platform.
Apache Tomcat - Configuração Na secção Preferences do Eclipse (Window > Preferences), do lado esquerdo deverá aparecer agora uma opção Server e por baixo desta, uma opção Installed Runtimes. Adicionar o runtime do Tomcat. (Add > Seleccionar o Apache Tomcat v6.0, e depois indicar a directoria onde este se encontra instalado)
Java Servlets Tempo de vida de um Servlet: init: Só é chamado uma vez, que é quando o Servlet é corrido da primeira vez. service: É chamado pelo servidor para que o servlet responda a um pedido (reencaminha para o doget/dopost/do*). doget, dopost, do*: Tratam dos pedidos do cliente, devem ser implementados para terem o comportamento desejado. destroy: É chamado quando o servidor fecha a instância do servlet.
Java Servlets - Exemplos Um Servlet simples para gerar texto: import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class OlaServlet extends javax.servlet.http.httpservlet implements javax.servlet.servlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter saida = response.getwriter(); saida.println("olá Mundo!"); } }
Java Servlets - Exemplo O Servlet acima descrito apenas imprime uma página com o texto Olá Mundo!, sem formatação. O seguinte exemplo descreve uma página em HTML com o texto Olá Mundo!.
Java Servlets Exemplo 2 Um Servlet simples para gerar HTML: import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class OlaServlet extends javax.servlet.http.httpservlet implements javax.servlet.servlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter saida = response.getwriter(); } } saida.println("<html>"); saida.println("<head>"); saida.println("<title>olá Mundo!</title>"); saida.println("</head>"); saida.println("<body>"); saida.println("<p>olá Mundo!</p>"); saida.println("</body>"); saida.println("</html>");
Java Servlets Exemplo 3 Os exemplos anteriores geram páginas estáticas, no entanto a potencialidade dos Servlets parte da capacidade de gerar páginas dinâmicas. O seguinte exemplo descreve o método doget de um Servlet que recebe dois parâmetros (nome e apelido) e imprime uma página HTML com o texto Olá (nome) (apelido)!.
Java Servlets Exemplo 3 Desenhe um formulário em html com duas caixas de texto e um botão de submeter. A acção do formulário deverá indicar o caminho para o servlet, e o método deverá ser o GET. As caixas de texto deverão chamar-se nome e apelido.
Java Servlets Exemplo 3 protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); String nome = request.getparameter("nome"); String apelido = request.getparameter("apelido"); PrintWriter saida = response.getwriter(); } saida.println("<html>"); saida.println("<head>"); saida.println("< p>olá " + nome + " " + apelido + "!</ title>"); saida.println("</head>"); saida.println("<body>"); saida.println("<p>olá " + nome + " " + apelido + "!</p>"); saida.println("</body>"); saida.println("</html>");
Java Servlets Exemplo 3 O exemplo anterior funciona se o formulário que enviar os dados utiliza o método GET. Para o POST será necessário utilizar o método dopost(). A principal diferença entre estes dois métodos é que no método POST as variáveis não aparecem no endereço.
Java Servlets Para além dos métodos identificados no tempo de vida do Servlet, existem outros elementos importantes: HttpServletRequest; HttpServletResponse; HttpSession; PrintWriter; ServletContext;
Java Servlets HttpServletRequest: Representa os pedidos do cliente (ex: métodos GET/POST). HttpServletResponse: Identifica a resposta dada ao cliente (ex: tipo de resposta). HttpSession: Identifica a sessão HTTP em uso (ex: pode-se saber quando o utilizador acedeu à primeira página).
Java Servlets PrintWriter: Permite imprimir texto (ex: System.out). ServletContext: Identifica o ambiente aplicacional do Servlet (ex: partilhar variáveis/objectos entre todos os servlets no Container).
Java Server Pages - Exemplo Exemplo de um JSP simples: <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>olá mundo!</title> </head> <body> <% String s = new String("Olá mundo!"); %> <%= s %> </body> </html>
Java Server Pages - Exemplo Como se pode ver, a mesma página é muito mais perceptivel em JSP que num Servlet. Com os JSPs é mais fácil desenhar uma página num programa próprio para tal (ex: Frontpage), levando a uma possivel divisão entre o HTML e o código que gera o conteúdo.
Exercicio: Implementar o Exemplo 3 dos Servlets em JSP, utilizando o mesmo formulário (só altera a acção). O método de recepção dos valores é o mesmo que para os Servlets (request.getparameter( parametro );).