Tecnologias Web Java Enterprise Edition Cristiano Lehrer, M.Sc.
Introdução Java Enterprise Edition (JEE): Plataforma de tecnologias para o desenvolvimento de aplicações corporativas distribuídas. É uma especificação e não uma implementação, evitando assim o vendor lock-in: Expressão usada quando você está preso sempre nas mãos de um único fabricante. Provê: Suporte ao gerenciamento automático de componentes. Infraestrutura de serviços complexos, como por exemplo, transações, segurança e persistência. Objetivo principal: Permitir que desenvolvedores possam se concentrar no desenvolvimento da lógica de negócio.
Principais Especificações JEE JavaServer Pages (JSP), Java Servlets, Java Server Faces (JSF): Trabalhar para a Web. Enterprise Javabeans Components (EJB) e Java Persistence API (JPA): Objetos distribuídos, clusters, acesso remoto a objetos. Java API for XML Web Services (JAX-WS), Java API for XML Binding (JAX-B): Trabalhar com arquivos Extensible Markup Language (XML) e webservices. Java Autenthication and Authorization Service (JAAS): API padrão do Java para segurança. Java Transaction API (JTA): Controle de transação no contêiner. Java Message Service (JMS): Troca de mensagens assíncronas. Java Naming and Directory Interface (JNDI): Espaço de nomes e objetos. Java Management Extensions (JMX): Administração da aplicação e estatísticas sobre a mesma.
Componentes JEE Aplicações JEE são constituídas por componentes. Um componente JEE: Unidade funcional de software formada por um conjunto de classes e arquivos relacionados. Pode se comunicar com outros componentes. Pode ser reusado durante a construção de aplicações JEE. Deve seguir a especificação JEE.
Modelos de Componentes JEE Aplicações stand-alone: Applets: Aplicação Java. Mantidos e executados no cliente. Graphical User Interface (GUI). Servlets e JSP: Normalmente executados dentro do browser. Mantidos pelo servidor e executados no cliente. EJB: Servlet: Objetos java que respondem requisições em Hypertext Transfer Protocol (HTTP). Resposta normalmente é HyperText Markup Language (HTML) gerado dinamicamente. Mantidos e executados no servidor. JSP: Componentes mantidos e executados em um ambiente gerenciado pelo servidor. Provê: Monitoramento transacional. Persistência. Distribuição de objetos. Segurança. Linguagem de script adequada para escrita de servlets de apresentação. Não são JavaBeans!
Servidores JEE (1/2) Componentes JEE são instalados em servidores. Servidores: Oferecem infraestrutura para gerenciamento do ciclo de vida dos componentes. Incluem contêineres Web e EJB. Proveem diversos serviços para os componentes: Transações. Persistência. Segurança. Nomes. Distribuição.
Servidores JEE (2/2) JBoss Application Server: Fornecido pela RedHat implementação JEE 5 gratuito. GlassFish: Fornecido pela Sun implementação JEE 6 gratuito. Apache Geronimo: Fornecido pela Apache implementação JEE 5 gratuito. WebLogic Application Server: Fornecido pela Oracle/BEA implementação JEE 5. IBM Websphere Application Server: Fornecido pela IBM implementação JEE 5. Sun Java System Application Server (baseado no GlassFish): Fornecido pela Sun implementação JEE 5. SAP Application Server: Fornecido pela SAP implementação JEE 5.
Java ServerPages JSP é uma tecnologia que permite combinar informações estáticas com informações geradas dinamicamente. Script executado no servidor: Combinação de sintaxe JSP e tags de marcação. Tags estáticos: HTML e XML. Conteúdo dinâmico gerado pelo código do script: Java. Exemplo: <html><head><title>primeiro JSP</title></head> <body><h1>data e hora: <%=new java.util.date()%></h1> </body></html>
Compilação do JSP (1/2) Requisição para xxx.jsp xxx.jsp Geração de Código Java xxx.java (servlet) Resposta xxx.class (servlet) Compilação
Compilação do JSP (2/2) Requisição para xxx.jsp xxx.jsp Geração de Código Java xxx.java (servlet) Resposta xxx.class (servlet) Compilação
Escopo dos Atributos O JSP pode acessar objetos em tempo de execução em quatro escopos diferentes: Página: Objeto PageContext corrente (pagecontext). Requisição: Objeto HttpServletRequest corrente (request). Sessão: Objeto HttpSession corrente (session). Aplicação: Objeto ServletContext corrente (application). Para armazenar informações: setattribute(string, Object) Para recuperar informações: getattribute(string)
Tags JSP Diretivas: Configuração do processador JSP. Inclusão estática de conteúdo. Encaminhamento de requisições para outros servidores. Comandos de script: Ações: Inserção de código para a programação de conteúdo dinâmico. Tags de alto nível que encapsulam padrões de programação mais corriqueiros.
Diretivas <%@ nome-da-diretiva [nome-atributo = "valor-do-atributo"]* %> Diretivas disponíveis: <%@ include file="url-relativa" %> Inclusão em tempo de compilação. <%@ taglib uri="url-relativa-da-biblioteca-de-tags" prefix="prefixo-das-tags" %> <%@ page lista-de-atributos %>
Atributos da Diretiva Page language="nome-da-linguagem-de-script" (java) contenttype="mime-type mime-type; charset=nome-charset" (text/html;charset=iso-8859-1) errorpage="url-página-de-erro" iserrorpage="true false" (false) buffer="none tamanho-em-kb" (8kb) auto-flush="true false" (true) import="lista-de-pacotes" session="true false" (true) info="texto-informativo"
Exemplos de Diretivas Diretiva include: <%@ include file="/layout/header.html" %> Diretiva taglib: <%@ taglib uri="/tags/ybadootags" prefix="ybadoo" %> <ybadoo:exemplo parametro="exemplo" /> Diretiva page: <%@ page language="java" errorpage="error.jsp" iserrorpage="false" buffer="12kb" auto-flush="true" session="true" isthreadsafe="true" info="exemplo" %> Outra opção: <%@ page language="java" %> <%@ page errorpage="error.jsp" %> <%@ page import="com.ybadoo.output.*" %>
Tags de Script Declarações: <%! declarações %> Scriptlets: <% comandos %> Expressões: <%= expressão %> Comentários: <!-- comentário HTML --> <%-- comentário JSP --%>
Declarações <%! declarações %> Declara variáveis ou métodos a serem utilizados no código JSP. Exemplos: <%! int i = 0; public void metodo() {...} %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %>
Scriptlets <% comandos %> Um scriptlet pode conter qualquer número de instruções, variáveis, métodos, declarações ou expressões válidas. Exemplo: <% String name = null; if(request.getparameter("name") == null) { %> <%@ include file="error.html" %> <% %> } else { entity.setname(request.getparameter("name")); }
Expressão <%= expressão %> Esta tag contém uma expressão que é avaliada e convertida para string, depois de processada. Exemplo: O mapa tem <font color="blue"><%=mapa.getcount()%></font> entradas.
Comentários <!-- comentário HTML --> O processador JSP trata um comentário como texto HTML não interpretado, retornando-o ao cliente. Uma expressão pode ser incluída em um comentário, sendo avaliada e seu resultado é retornado ao usuário juntamente com o HTML de resposta. Exemplos: <!-- Comentário --> <!-- Esta página foi carregada em <%=(new java.util.date()).tolocalestring() %> -->
Comentários para Desenvolvimento <%-- comentário JSP --%> O processador JSP simplesmente ignora este tipo de comentário e não processa nenhum código ou expressão contida entre os delimitadores. Este tipo de comentário não será enviado para o cliente. Exemplos: <%@ page language="java" %> <html><head><title>um teste comentário</title></head> <body><h2>um teste comentário</h2> <%-- Este comentário não estará disponível para o cliente --%> </body></html>
Objetos Pré-definidos Disponíveis para scriptlets e expressões: request response session out exception (somente em páginas de erro) page
Exemplo <%@ page language="java" errorpage="error.jsp" %> <%@ page import="com.ybadoo.alunos.*" %> <%@ page import="java.util.*" %> <html><head><title>processo de Matrícula</title></head> <body color="#fff"> <h1><center>sistema Acadêmico</center></h1><hr/> <p><center><h3>processo de Matrícula</h3></center></p> <p><center>selecione o aluno que deseja realizar a matrícula</center></p> <p><center><form action="/siga/servlet/matricula" method="post"> Lista de Alunos: <select name="matriculaaluno"> <% Collections alunos = (Collections) request.getattribute("alunos"); Aluno aluno = null; // Concatena todos os alunos dos departamentos for(iterator i = alunos.iterator(); i.hasnext(); ){ aluno = (Aluno)i.next(); %> <option value="<%=aluno.getmatricula()%>"> <%=aluno.getmatricula()%> - <%=aluno.getnome()%></option> <% } %> <input type="submit" name="botaolistardisciplinas" value="listar Disciplinas" /> </form></center></p> </body> </html>
Ações jsp:usebean jsp:setproperty jsp:getproperty jsp:include jsp:forward Outras tags personalizadas via taglib.
jsp:usebean Cria ou recupera uma instância de um bean. <jsp:usebean lista-de-atributos> A lista de atributos pode ser: id = "nome-da-instância-do-bean" scope = "page request session application" class = "com.ybadoo.nomedaclasse" type = "com.ybado.nomedotipo" Exemplo: <jsp:usebean id="stringbean" class="com.ybadoo.meubean" scope="session" />
jsp:include e jsp:forward Ações utilizadas para o encadeamento de páginas JSP. <jsp:include page="url-relativa-da-página" /> Suspende o processamento da página chamadora e repassa o controle para a página chamada até que esta retorne-o. <jsp:forward page="url-relativa-da-página" /> O processamento da página chamadora é terminado e o controle é repassado sem espera de retorno para a página chamada.
jsp:include (1/2) <jsp:include page="{relativeurl <%= expression %>}" flush="true false" /> Exemplos: <jsp:include page="scripts/login.jsp" /> <jsp:include page="copyright.html" /> <jsp:include page="/index.html" flush="true" />
jsp:include (2/2) <jsp:include page="{relativeurl <%= expression %>}" flush="true false" > <jsp:param name="parametername" />+ value="{parametervalue <%= expression %>}" </jsp:include> Exemplo: <jsp:include page="scripts/login.jsp"> <jsp:param name="username" value="jsmith" /> </jsp:include>
jsp:forward (1/2) <jsp:forward page="{relativeurl <%= expression %>}" /> A tag <jsp:forward> repassa o objeto request enviado para o arquivo JSP para que seja processado por outra aplicação. O processador JSP não executa o restante das instruções contidas após a tag. Exemplo: <jsp:forward page="/servlet/login" />
jsp:forward (2/2) <jsp:forward page="{relativeurl <%= expression %>}" > <jsp:param name="parametername" />+ value="{parametervalue <%= expression %>}" </jsp:forward> Exemplo: <jsp:forward page="/servlet/login"> <jsp:param name="username" value="jsmith" /> </jsp:forward>
Informações Adicionais JavaServer Pages Technology http://www.oracle.com/technetwork/java/javaee/jsp/index.html