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: – service: – É chamado pelo servidor para que o servlet responda a um pedido (reencaminha para o doGet/doPost/do*). doGet, doPost, do*: – Só é chamado uma vez, que é quando o Servlet é corrido da primeira vez. 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: – HttpServletResponse: – Representa os pedidos do cliente (ex: métodos GET/POST). 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”);).