Java II Sérgio Luiz Ruivace Cerqueira [email protected] Java Web Arquitetura • Aplicações web são basicamente constituídas de: – Requisições – Respostas © LES/PUC-Rio Model View Controller (MVC) • O que é MVC? – Padrão arquitetural em três camadas para desenvolvimento de sistemas, surgido nos anos 80. • Sugere a divisão de uma aplicação visual em 3 partes – Model: Modelo da sua aplicação, com as regras de negócio (business logic) e todo o processamento da aplicação – View: Apresenta a informação e recolhe os dados fornecidos pelo usuário – Controller: Recebe as informações da entrada e as transmite para o modelo View Controller © LES/PUC-Rio Model Arquitetura MVC • Em Java: – O modelo será uma aplicação orientada a objetos. – O controlador será alguma tecnologia de implementação (padrão comando) que juntamente com o Servlet redirecionará as chamadas feitas pelo cliente aos objetos no modelo. – A apresentação será representada pelo JSP. © LES/PUC-Rio Plataformas Java • Existem quatro plataformas para a programação em Java, cada uma com sua JVM e API: – Java Platform, Standard Edition (Java SE) • Provê a API base para o desenvolvimento em Java, essa plataforma define desde os tipos básicos e objetos até classes de alto nível usadas para segurança, rede, GUI, acesso a bases de dados... – Java Platform, Enterprise Edition (Java EE) • É construída a partir da Java SE. Provê uma API e um ambiente de desenvolvimento para larga escala, escalável, fidedigno, com múltiplas camadas. – Java Platform, Micro Edition (Java ME) • Provê uma API e um ambiente de desenvolvimento para dispositivos móveis. – Java FX • Provê um ambiente para desenvolvimento de aplicações escritas em Java FX Script. © LES/PUC-Rio JEE – Java Enterprise Edition • Voltado ao desenvolvimento de aplicações empresariais – Foco no desenvolvimento de componentes para reduzir custos • Projetado para ajudar a desenvolvedores produzirem sistemas que necessitem de: – Múltiplas camadas – Larga escala – Escalável – Fidedigno, confiável – Segurança • Aplicações para JEE são independentes de plataforma – A própria linguagem Java é independente – Assim como a máquina virtual, o ambiente JEE é totalmente especificado – Qualquer um pode fazer um JEE © LES/PUC-Rio Composição da Plataforma JEE • Modelo de desenvolvimento de aplicações Web • Modelo de aplicações distribuídas em camadas – A lógica da aplicação é dividida em componentes de acordo com sua função – Cada camada executa em diferentes máquinas • Modelo de desenvolvimento orientado a componentes reutilizáveis • Modelo de segurança unificado • Flexível controle de transações • Troca de dados integrada baseada em XML © LES/PUC-Rio Componentes • Um componente: – É um pacote coerente de software independentemente desenvolvido – É entregue como uma unidade – Oferece interfaces que podem ser conectadas, inalteradas, com outros componentes para compor um sistema maior • Componente JEE – Um componente JEE é uma unidade funcional auto-contida, que pode ser montada em uma aplicação JEE com suas classes e arquivos relacionados, e que se comunica com outros componentes © LES/PUC-Rio JEE – arquitetura em 3 camadas • Uma camada para lidar com a interface – Executa no computador cliente e no servidor JEE – Em desenvolvimento Web, é implementado por JSP. • Uma para lidar com a lógica da aplicação – Executa no servidor JEE – Em desenvolvimento Web, é implementado por servlets e classes do sistema. • Uma para gerenciar acesso a banco de dados – Executa no EIS (Enterprise Information System) © LES/PUC-Rio JEE – arquitetura em 3 camadas © LES/PUC-Rio JEE – camada de interface • Aplicações JEE podem ou não podem ser baseadas em Web – As primeiras executam diretamente na máquina cliente – As demais usam web browser para obter páginas e applets © LES/PUC-Rio JEE – camada de interface • Clientes de aplicação – São uma forma de gerenciar as aplicações ou o sistema – Tipicamente aplicações gráficas • java.awt • javax.swing • Aplicações JEE requerem uso de clientes leves (thin clients) – Interfaces bem simples – Delegam todas as tarefas mais complexas para o servidor JEE • Acesso a bancos de dados • Conexão com sistemas legados • ... © LES/PUC-Rio JEE – camada de lógica • Componentes Web – Apóiam a geração dinâmica de conteúdo • Componentes da lógica de negócio – Contêm o código para solucionar as necessidades de um domínio específico © LES/PUC-Rio Visão geral das tecnologias JEE 5 para a Web • Tecnologias para desenvolvimento de aplicações Web – Java Servlet 2.5 – JavaServer Pages 2.1 – JavaServer Pages Standard Tag Library – JavaServer Faces 1.2 © LES/PUC-Rio JEE – camada lógica (Web) • Servlets – Classes que processam pedidos e geram respostas dinamicamente • JSP – Documentos baseados em texto que executam como servlets – São especializadas na geração de conteúdo dinâmico para clientes Web (browsers). © LES/PUC-Rio JEE – contêineres e serviços • Componentes são instalados em seus contêineres durante a implantação – Contêineres são a interface entre o componente e o serviço específico da plataforma que ele provê © LES/PUC-Rio Desenvolvimento para a Web com JEE Aplicação Web • Uma aplicação Web é uma extensão dinâmica de um servidor Web ou servidor de aplicação • Existem dois tipos de aplicações Web – Orientada a apresentação • Uma aplicação web orientada a apresentação gera páginas web interativas contendo diversos tipos de linguagens de marcação (HTML, XML, ...) e conteúdo dinâmico em resposta a requisições – Orientada a serviços • Uma aplicação Web orientada a serviços implementa um endpoint de um Web service • Aplicações orientadas a apresentação geralmente são clientes de aplicações Web orientada a serviços © LES/PUC-Rio Componentes Web • Provêem as extensões dinâmicas de um servidor Web • São Java Servlets, páginas JSP ou Web services • A interação entre um cliente Web e uma aplicação Web © LES/PUC-Rio Servlets e JSPs • Servlets são classes implementadas em Java que dinamicamente processam requisições e constroem respostas • Páginas JSP são documentos baseados em texto que executam como servlets mas permitem uma forma mais natural de criar conteúdo estático • Servlets e JSP são parecidos e são equivalentes © LES/PUC-Rio Servlets e JSPs • O uso de servlets é recomendado para – Controlar as funções de uma aplicação orientada a apresentação, como redirecionar requisições e tratar dados não textuais (binários) – Aplicações orientadas a serviços • Páginas JSP são mais apropriadas para gerar marcações baseadas em texto – HTML, SVG, WML, e XML © LES/PUC-Rio Contêiner Web • Provê um ambiente de execução de aplicações Web e seus componentes, que são implementados por Servlets e JSPs • Realiza o processamento de requisições e respostas HTTP, como um servidor Web • Permite configurar: – serviços de segurança, concorrência e gerenciamento do ciclo de vida – acesso para APIs como resolução de nomes, transações e envio de e-mails © LES/PUC-Rio Contêiner Web • Alguns aspectos do comportamento de aplicações web podem ser configurados quando as aplicações são implantadas em um contêiner Web – As informações de configuração são mantidas em um arquivo texto em formato XML chamado Web application deployment descriptor (DD) • A maioria das aplicações Web utilizam o protocolo HTTP, e o suporte a HTTP é um dos maiores aspectos de componentes web © LES/PUC-Rio Módulo Web • É a menor unidade de implantação (deployment) de recursos web – Corresponde a uma aplicação Web • Pode conter – Componentes Web e recursos Web – Classes auxiliares da parte do servidor • Ex. beans de banco de dados, carros de compras – Classes da parte cliente • Ex. applets © LES/PUC-Rio Módulo Web • Tem uma estrutura específica. O diretório-raiz armazena – páginas JSP – classes client-side e – arquivos e recursos web estáticos (imagens) © LES/PUC-Rio Módulo Web • Subdiretório <raiz>/WEB-INF/ contém – web.xml: deployment descriptor da aplicação web – lib: Arquivos JAR de bibliotecas chamadas por classes da parte do servidor – classes: Classes server-side – Servlets, classes utilitárias e JavaBeans – tags: Arquivos de implementações de tag libraries © LES/PUC-Rio Servidores Servidor de aplicação x Contêiner Web • Contêiner Web – Serve Servlets e JSP – Provê, somente, formas de configurar/instalar serviços já disponíveis em servidores de aplicação – Exemplo de contêiner: Tomcat. • Servidor de aplicação: – Contém contêineres Web – Contém contêineres de objetos de negócio (também chamados EJB containers), podendo servir EJBs – Provê serviços de gerenciamento de transações, segurança, pool de conexões com banco de dados, balanceamento de carga, etc. – Exemplos de servidores de aplicação: JBoss e GlassFish. © LES/PUC-Rio N-Camadas Fonte:http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/intro/intro.htm © LES/PUC-Rio Jakarta TomCat Tomcat • Servidor gratuito baseado em java • Configurável de maneira simples via XML • Oferece suporte a Java (Servlets e JSP) • Tomcat – Pode ser gratuitamente obtido em http://www.apache.org – Utilizem a versão 5.x – VM jdk 1.6.x © LES/PUC-Rio Instalando o tomcat • Baixe o arquivo zip • Descompacte no diretório desejado • Configure a variável de ambiente CATALINA_HOME que deve apontar para o diretório onde foi descompactado o tomcat. • Adicione na variável path o texto ;%CATALINA_HOME%\bin © LES/PUC-Rio Configurando o Tomcat • Onde colocar as classes dos Servlets? • Primeiro, é preciso criar uma aplicação web – Cria-se um diretório em %TOMCAT_HOME%\webapps\, sem espaços no nome. – Dentro do diretório do projeto, cria-se a pasta WEB-INF – Dentro de WEB-INF, criam-se 2 pastas: lib e classes – Dentro de WEB-INF, cria-se o arquivo web.xml (deployment descriptor web) © LES/PUC-Rio Configurando o Tomcat • As classes são colocadas no diretório: – %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEBINF\classes – A partir deste diretório devem ser colocadas em seus próprios pacotes – As libs (arquivos .jar) devem ser colocadas no diretório: – %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEBINF\lib © LES/PUC-Rio Configurando o Tomcat • Registrando os Servlets – Os servlets devem ser chamados com seu nome completo (pacotes e classe) – Muitas vezes o nome se torna grande demais – Pode-se então dar um nome ao servlet através do qual o servidor redirecionará a chamada à classe específica © LES/PUC-Rio Configurando o Tomcat • Registrando Servlets – O arquivo web.xml localizado no diretório: – %TOMCAT_HOME%\webapps\DIRETÓRIO_APLICAÇÃO\WEBINF © LES/PUC-Rio JBoss O que é o JBoss? • É um servidor de aplicação. • Pode ser usado para – Aplicações Web de missão crítica. – Aplicações Web simples feitas com Servlets e JSP. – Aplicações Web que usam frameworks como Struts, Java Server Faces, Spring, etc. – Aplicações mais complexas, envolvendo SEAM, Enterprise Java Beans (EJB), Java Messaging (JMS), caching etc. – Middlewares usando JMS, Corba, JMX etc. © LES/PUC-Rio O que é o JBoss? • Arquitetura © LES/PUC-Rio O que é o JBoss? • Arquitetura – Consiste, basicamente, do microcontainer e beans de inicialização, conjunto de perfis de deployment e configurações de MBeans. • Microcontainer – Provê estrutura para implantar e integrar serviços corporativos entre si e com contêineres web, contêineres EJB, deployers e utilitários de gerenciamento. – Implementa um modelo de objetos através de POJOs. Estes são integrados via injeção de dependência para prover serviços © LES/PUC-Rio Configuração do JBoss • Pré-requisitos para instalação – JDK 1.5 ou 1.6 • Instalação no Linux – Baixe o JBoss (para este curso, será o JBoss 5.1) e o descompacte em um diretório de sua preferência – Após o baixar e descompactar o JBoss, configure as seguintes variáveis • export JAVA_HOME=/caminho/para/jsdk-xxxx • export JBOSS_HOME=/caminho/para/jboss-xxxx • JAVA_HOME /bin e JBOSS_HOME/bin devem estar declarados no path do sistema para executar seus scripts e programas fora dos seus diretórios © LES/PUC-Rio Configuração do JBoss • Inicialização no Linux – Execute o script run.sh para inicializar o JBoss – Execute shutdown.sh pará-lo – Ao final da inicialização, o prompt de comandos deve apresentar a mensagem “Started at ...” • Parâmetros de inicialização – É possível inicializar o JBoss com diferentes configurações de perfis – Cada configuração permite definir perfis de servidores que podem oferecer diferentes serviços e ambientes para deployment de aplicações © LES/PUC-Rio LOG © LES/PUC-Rio Configuração do JBoss Em geral, é usado este perfil © LES/PUC-Rio Configuração do JBoss • Parâmetros de inicialização – Linha de comando para escolher perfil (tipo) de deployment • “run.sh -c <perfil>”, onde os principais valores <perfil> são: – default: suporta a maior parte das APIs de J2EE (JSF e EJB, por exemplo) – all: suporte a todos os recursos corporativos, como RMI, clustering e outros serviços para aplicações corporativas – web: específico para suportar aplicações web, com um contêiner web. Prevê Web profile do J2EE 6. – minimal: sem suporte ao J2EE (sem contêineres Web e EJB), inicializa serviços de logging, JNDI e o scanner de novos deploys somente. » Oferece possibilidade. Mais leve e útil para implementar servidores customizados com os serviços desejados. – standard: configuração básica de J2EE 5. • shutdown.sh: pára o JBoss © LES/PUC-Rio Configuração do JBoss – Essas configurações se encontram abaixo de <diretório-dojboss>/server – Locais com as configurações dos serviços suportados no perfil • <JBoss_Home>/server/<perfil>/deployers • <JBoss_Home>/server/<perfil>/deploy • Parâmetros de inicialização – Linha de comando para inicializar o servidor em um IP ou host no qual responderá às requisições • “run.sh -b <nome do host ou IP>” © LES/PUC-Rio Configuração do JBoss • Tipos de aplicações, serviços e configurações que podem ser implantados – Web Application Runtime (WAR): empacotamento de aplicações Web – Enterprise Application Runtime (EAR): empacotamento de aplicações corporativas que incluem aplicações Web, EJB e definições de configurações como application.xml e jbossapp.xml – Service Application Runtime (SAR): serviços internos – Arquivos “*-ds.xml”: configurações de bancos de dados © LES/PUC-Rio Configuração do JBoss • Tipos de aplicações, serviços e configurações que podem ser implantados – XML para definição de serviços MBean, os quais podem estar em arquivos JAR em JBOSS_HOME/server/<perfil>/deploy ou JBOSS_HOME/server/<perfil>/lib – JAR com EJBs e outros objetos de serviço • Após sua inicialização, o JBoss monitora JBOSS_HOME/server/<perfil>/deploy procurando por empacotamentos colocados pelo usuários. Caso haja um novo, ele será expandido e implantado automaticamente. © LES/PUC-Rio Configuração do JBoss • Estrutura de diretórios – Para cada configuração em <JBoss_Home>/server/<perfil>, existe a seguinte estrutura de diretórios Diretório Descrição conf Contém o bootstrap.xml, que define os componentes (beans) do núcleo do servidor, os quais estarão ativos enquanto o servidor estiver executando. data Serve para persistir conteúdo no sistema de arquivos, como bancos de dados de teste. deploy Contém as aplicações e serviços (em JARs,WARs e EARs). Estes podem ser implatandos ou reimplantados mesmo em tempo de execução quando copiados neste diretório (hot deployment). © LES/PUC-Rio Configuração do JBoss • Estrutura de diretórios Diretório Descrição lib Contém bibliotecas (JARs) das aplicações dentro do perfil de deployment atual. Para compartilhar bibliotecas entre todos os perfiis de deployment, os JARs devem ser colocados em <JBoss_Home>/common/lib. log Contém os logs do servidor e das aplicações, os quais podem ser configurados em conf/jboss-log4j.xml. tmp Usado para armazenamento temporário pelos serviços do Jboss como, por exemplo, o deployer, que descompacta temporariamente as aplicações e serviços neste diretório. work Diretório usado pelo Tomcat para compilação de JSPs. © LES/PUC-Rio Eclipse Criação de aplicação Web no Eclipse • Crie um novo projeto do tipo Dynamic Web Project. © LES/PUC-Rio Criação de aplicação Web no Eclipse • Configure um contêiner Web ou servidor de aplicação em que será executada a aplicação. • Para este curso, utilizaremos o Tomcat 5.5 © LES/PUC-Rio Criação de aplicação Web no Eclipse Coloque o nome do projeto da aplicação Web. Escolha uma configuração de contêiner ou servidor de aplicações Web. © LES/PUC-Rio Criação de aplicação Web no Eclipse Clique em Browse para procurar o diretório onde está instalado o container ou servidor de aplicações web © LES/PUC-Rio Criação de aplicação Web no Eclipse Indique o diretório do servidor de aplicações. Escolha um contêiner ou servidor de aplicações Web. © LES/PUC-Rio Criação de aplicação Web no Eclipse • Estrutura básica de um projeto Web O Eclipse monta a aplicação no TomCat com esta estrutura de pastas e copia esta classe dentro de WEB-INF/classes dentro de seu pacote Diretório para conteúdo Web: páginas, css, bibliotecas usadas Diretório de bibliotecas Deployment descriptor © LES/PUC-Rio Criação de aplicação Web no Eclipse • Estrutura de um Dynamic Web Project Bibliotecas em WEB-INF/lib © LES/PUC-Rio Criação de aplicação Web • Páginas devem ser colocadas na raiz do pacote WAR • No projeto gerado no Eclipse, WebContent corresponde à raiz • Exemplo: página index.jsp © LES/PUC-Rio Criação de aplicação Web: web.xml Possíveis URLs das páginas iniciais. Identificador da servlet. Servlet que processará requisições e gerará respostas HTTP. URL que receberá as requisições para a servlet cujo nome é <servlet-name>. © LES/PUC-Rio Criação de aplicação Web: Servlet Responde a requisições HTTP GET para esta servlet Responde a requisições HTTP POST para esta servlet © LES/PUC-Rio Criação de aplicação Web no Eclipse: inicialização do TomCat Fazer debug da aplicação no servidor Iniciar o servidor © LES/PUC-Rio Parar o servidor Criação de aplicação Web: acesso • Resposta da Servlet • Resposta da página index.jsp © LES/PUC-Rio