unipac – araguari campus – ix prof. everton hipÓlito de freitas java – j2ee java pra web

98
UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Upload: valentina-borges-raminhos

Post on 07-Apr-2016

221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

UNIPAC – ARAGUARICAMPUS – IX

PROF. EVERTON HIPÓLITO DE FREITAS

Java – J2EEJava pra Web

Page 2: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

O que devemos saber antes? Java é uma linguagem de programação.

A linguagem java é utilizada na implementação das 3 plataformas existentes: JSE – Java Standart Edition

• Ferramentas e APIs essenciais para qualquer aplicação Java (inclusive GUI) desktop

JEE – Java Enterprise Edition (Web)• ferramentas e APIs para o desenvolvimento de aplicações

distribuídas JME – Java Micro Enterprise

• ferramentas e APIs para o desenvolvimento de aplicações para aparelhos portáteis

Page 3: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

O que devemos saber antes? O que são interfaces Classes abstratas

Page 4: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

A plataforma Java JEE surgiu com o objetivo de padronizar e simplificar a criação de aplicações empresariais.

Para isso, propõe um modelo onde componentes J2EE (páginas JSP, Servlets, EJB's, etc) escritos pelos usuários da plataforma, podem fazer uso de serviços providos por esta, os quais simplificam sua implementação e possibilitam maior foco no negócio.

Isto é, o usuário passa a preocupar com as regras do negócio,não se preocupando com a parte técnica referente a arquiteturae processamento.

Page 5: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE Um diferencial na arquitetura J2EE foi a iniciativa de

enfatizar a utilização de padrões de projetos. Tais padrões trazem inúmeras vantagens na modelagem e implementação de um software: possibilidade de projetar soluções mais

rapidamente e com qualidade já que os padrões são soluções comprovadamente eficientes para problemas já conhecidos;

Visam principalmente flexibilidade, organização e reaproveitamento de código, o que resulta em maior produtividade, qualidade e facilidade de manutenção das aplicações assim desenvolvidas.

Page 6: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

A comunicação entre o cliente (browse) e o servidor (de aplicações) se faz através do protocolo http.

Page 7: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Aplicações distribuídas são comumente compostas de uma camada cliente, que implementa a interface com o usuário, uma ou mais camadas intermediárias, que processam a lógica do negócio e provêem serviços à camada cliente, e outra, sistemas legados e bancos de dados.

A infraestrutura oferecida pela JEE possibilita que estas camadas, possivelmente localizadas em máquinas diferentes, possam se comunicar remotamente e juntas comporem uma aplicação.

Page 8: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Um componente criado numa aplicação J2EE deve ser instalado no container apropriado.

Um container é um ambiente de execução padronizado que provê serviços específicos a um componente. Assim, um componente pode esperar que em

qualquer plataforma J2EE implementada por qualquer fornecedor estes serviços estejam disponíveis.

Page 9: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações Container

Aplicações Web J2EE utilizam o conceito de container. O container Web, além de gerar conteúdo dinâmico através da execução dos JSPs e Servlets, oferece os seguintes serviços: Gerenciamento dos recursos utilizados pelos

componentes. Exemplo: Conexões com o banco de dados.

Gerenciamento do ciclo de vida dos componentes. Gerenciamento de sessões de usuários. Gerenciamento de segurança da aplicação.

Page 10: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Um web container destina-se a processar componentes web como servlets, JSP's, HTML's e Java Beans.

Page 11: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Uma aplicação Web é dividido em 3 camadas: Apresentação e visualização. Controle (definição e o processamento das regras de

negócios). Persistência de dados.

Page 12: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Apresentação e visualização. É responsável por interagir e apresentar os dados aos

usuários e por se comunicar com outras camadas da aplicação.

Em geral é a única parte da aplicação com a qual o usuário tem contato. A camada cliente comunica-se com outras camadas através de interfaces bem definidas.

Page 13: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Controle (definição e o processamento das regras de negócios). é quem recebe e processa as requisições dos

usuários através de um web container. É responsável por realizar todo processamento

web, como hospedar páginas HTML, executar servlets e formatar páginas JSP a serem apresentadas pelos navegadores. Em nosso caso, é responsável também pelo controle do fluxo da

aplicação e por processar toda a lógica do negócio, incluindo o gerenciamento de conexões com banco de dados e conectores para acesso a recursos legados

Page 14: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Persistência de dados. Camada de banco de dados e sistemas de informação

legados: tipicamente nesta camada estão incluídos sistemas gerenciadores de banco de dados, sistemas de planejamento de recursos (ou Enterprise Resource Planning (ERP)) e quaisquer sistemas legados.

Page 15: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Mas, o que significam todos estes termos: servlets, JSP, bean, etc...?

Page 16: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE – servlets e JSP

Servlets e JSP são duas tecnologias desenvolvidas pela Sun para desenvolvimento de aplicações na Web a partir de componentes Java que executem no lado servidor.

Page 17: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE - Servlets

Servlets são classes Java que são instanciadas e executadas em associação com servidores Web, atendendo requisições realizadas por meio do protocolo HTTP.

Os Servlets são tipicamente usados no desenvolvimento de sites dinâmicos. Sites dinâmicos são sites onde algumas de suas páginas

são construídas no momento do atendimento de uma requisição HTTP. Assim é possível criar páginas com conteúdo variável, de acordo com o usuário, tempo, ou informações armazenadas em um banco de dados.

Page 18: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Ao serem acionados, os objetos Servlets podem enviar a resposta na forma de uma página HTML ou qualquer outro conteúdo MIME (como por exemplo:pdf).

Page 19: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Servlets não possuem interface gráfica e suas instâncias são executadas dentro de um ambiente Java denominado de Container. O container gerencia as instâncias dos Servlets e

provê os serviços de rede necessários para as requisições e respostas.

Page 20: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

O container atua em associação com servidores Web recebendo as requisições reencaminhada por eles.

Tipicamente existe apenas uma instância de cada Servlet, no entanto, o container pode criar vários threads de modo a permitir que uma única instância Servlet atenda mais de uma requisição simultaneamente .

Threads são múltiplos processos filhos de um processo pai.

Page 21: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Visão do Servlet e Container

Page 22: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

A API Servlet A API Servlet é composta por um conjunto de

interfaces e Classes. O componente mais básico da API é interface Servlet. Ela define o comportamento básico de um Servlet.

Page 23: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Page 24: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE – Interface Servlet

O método service() é responsável pelo tratamento de todas as requisições dos clientes.

Já os métodos init() e destroy() são chamados quando o Servlet é carregado e descarregado do container, respectivamente.

Page 25: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE – Interface Servlet

O método getServletConfig() retorna um objeto ServletConfig que contém os parâmetros de inicialização do Servlet.

O método getServletInfo() retorna uma String contendo informações sobre o Servlet, como versão e autor.

Page 26: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Hierarquia

A classe HttpServlet é especialmente projetada para lidar com o protocolo HTTP.

Page 27: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE

Para criar um Servlet que atenda requisições HTTP o programador deve criar uma classe derivada da HttpServlet e sobrescrever pelo menos um dos métodos abaixo:

Page 28: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE - Requisições

Todos esses métodos são invocados pelo servidor por meio do método service().

O método doGet() trata as requisições GET. Este tipo de requisição pode ser enviada várias vezes.

O método doPost() trata as requisições POST que permitem que o cliente envie dados de tamanho ilimitado para o servidor Web.

Page 29: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JEE - Requisições

O método doPut() trata as requisições PUT. Este tipo de requisição permite que o cliente envie um arquivo para o servidor à semelhança de como é feito via FTP.

O método doDelete() trata as requisições DELETE, permitindo que o cliente remova um documento ou uma página do servidor. O método service(), que recebe todas as requisições, em

geral não é sobrescrito, sendo sua tarefa direcionar a requisição para o método adequado.

Page 30: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Servidores Web

Tomcat, Websphere, Weblogic, JRun são servidores Web compatíveis com J2EE;

Page 31: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Exemplo - Servlet

public class getMethodGet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();

out.println("<html>"); out.println("<head>"); out.println("<title>Primeira aplicação</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Local da chamada: " + request.getContextPath () + "</h1>"); out.println("<h1>Informações do Servlet: " + getServletInfo() + "</h1>"); out.println("</body>"); out.println("</html>"); } }

Page 32: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Ciclo de vida de um servlet

O ciclo de vida de um servlet é controlado pelo containerQuando o servidor recebe uma requisição, ela é

repassada para o container que a delega a um servlet. O container Carrega a classe na memória Cria uma instância da classe do servlet Inicializa a instância chamando o método init()

Depois que o servlet foi inicializado, cada requisição é executada em um método service() O container cria um objeto de requisição (ServletRequest) e de

resposta (ServletResponse) e depois chama service() passando os objetos como parâmetros

Quando a resposta é enviada, os objetos são destruídosQuando o container decidir remover o servlet da

memória, ele o finaliza chamando destroy()

Page 33: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Inicialização de um Servlet

Deve-se sobrepor init(config) com instruções que serão realizadas para inicializar um servlet Carregar parâmetros de inicialização, dados de

configuração Obter outros recursos

Falha na inicialização deve provocar UnavailableException (subclasse de ServletException)public void init(ServletConfig config)

throws ServletException {

String dirImagens = config.getInitParameter("imagens"); if (dirImagens == null) { throw new UnavailableException(

"Configuração incorreta!"); }}

Page 34: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Finalização do servlet

Quando um servlet container decide remover um servlet da memória, ele chama o seu método destroy() Use destroy() para liberar recursos (como conexões de banco de

dados, por exemplo) e fazer outras tarefas de "limpeza".

O servlet geralmente só é destruído quando todos os seus métodos service() terminaram (ou depois de um timeout) Se sua aplicação tem métodos service() que demoram para

terminar, você deve garantir um shutdown limpo.

public void destroy() { banco.close(); banco = null;}

Page 35: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Parâmetros de inicialização

<web-app><servlet> <servlet-name>exemplo</servlet-name> <servlet-class>curso.ExemploServlet</servlet-class> <init-param> <param-name>JDBCDriver</param-name> <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-

value> </init-param> <load-on-startup>1</load-on-startup></servlet></web-app>

Page 36: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

A requisição HTTP

Uma requisição HTTP feita pelo browser tipicamente contém vários cabeçalhos RFC822*

Os métodos de HttpServletRequest permitem extrair informações de qualquer um deles Pode-se também identificar o método e URL

Page 37: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Obtenção de dados de requisições

Alguns métodos de HttpServletRequest Enumeration getHeaderNames() - obtém nomes dos cabeçalhos String getHeader("nome") - obtém primeiro valor do cabeçalho Enumeration getHeaders("nome") - todos os valores do cabeçalho String getParameter(param) - obtém parâmetro HTTP String[] getParameterValues(param) - obtém parâmetros repetidos Enumeration getParameterNames() - obtém nomes dos parâmetros Cookie[] getCookies() - recebe cookies do cliente HttpSession getSession() - retorna a sessão setAttribute("nome", obj) - define um atributo obj chamado "nome". Object getAttribute("nome") - recupera atributo chamado nome String getRemoteUser() - obtém usuário remoto (se autenticado,

caso contrátio devolve null)

Page 38: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

A resposta HTTP

Uma resposta HTTP é enviada pelo servidor ao browser e contém informações sobre os dados anexados.

Os métodos de HttpServletResponse permitem construir um cabeçalho

Page 39: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Preenchimento de uma resposta

Alguns métodos de HttpServletResponse addHeader(String nome, String valor) - adiciona cabeçalho

HTTP setContentType(tipo MIME) - define o tipo MIME que será

usado para gerar a saída (text/html, image/gif, etc.) sendRedirect(String location) - envia informação de

redirecionamento para o cliente (Location: url) Writer getWriter() - obtém um Writer para gerar a saída.

Ideal para saída de texto. OutputStream getOutputStream() - obtém um OutputStream.

Ideal para gerar formatos diferentes de texto (imagens, etc.) addCookie(Cookie c) - adiciona um novo cookie encodeURL(String url) - envia como anexo da URL a

informação de identificador de sessão (sessionid) reset() - limpa toda a saída inclusive os cabeçalhos resetBuffer() - limpa toda a saída, exceto cabeçalhos

Page 40: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Como implementar doGet() e doPost()

Use doGet() para receber requisições GET Links clicados ou URL digitadas diretamente Alguns formulários que usam GET

Use doPost() para receber dados de formuláriosSe quiser usar ambos os métodos, não sobreponha

service() mas implemente tanto doGet() como doPost()public class ServletWeb extends HttpServlet {

public void doGet (HttpServletRequest request, HttpServletResponse response) {

processar(request, response); } public void doPost (HttpServletRequest request,

HttpServletResponse response) {processar(request, response);

} public void processar(HttpServletRequest request,

HttpServletResponse response) { ... }}

Page 41: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Parâmetros da requisição

Parâmetros são pares nome=valor que são enviados pelo cliente concatenados em strings separados por &:

nome=Jo%E3o+Grand%E3o&id=agente007&acesso=3Parâmetros podem ser passados na requisição de

duas formas Se o método for GET, os parâmetros são passados em uma

única linha no query string, que estende a URL após um "?“

Se o método for POST, os parâmetros são passados como um stream no corpo na mensagem (o cabeçalho Content-length, presente em requisições POST informa o tamanho)

GET /servlet/Teste?id=agente007&acesso=3 HTTP/1.0

POST /servlet/Teste HTTP/1.0Content-length: 21Content-type: x-www-form-urlencoded

id=agente007&acesso=3

Page 42: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Como ler parâmetros da requisição

Seja o método POST ou GET, os valores dos parâmetros, podem ser recuperados pelo método getParameter() de ServletRequest, que recebe seu nome String parametro = request.getParameter("nome");

Parâmetros de mesmo nome podem ser repetidos. Neste caso getParameter() retornará apenas a primeira

ocorrência. Para obter todas use String[] getParameterValues() String[] params = request.getParameterValues("nome");

Page 43: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Como gerar uma resposta

Para gerar uma resposta, primeiro é necessário obter, do objeto HttpServletResponse, um fluxo de saída, que pode ser de caracteres (Writer) ou de bytes (OutputStream) Writer out = response.getWriter(); // ou OutputStream out = response.getOutputStream();

Apenas um deve ser usado. Os objetos correspondem ao mesmo stream de dados

Deve-se também definir o tipo de dados a ser gerado. Isto é importante para que o cabeçalho Content-type seja gerado corretamente e o browser saiba exibir as informações response.setContentType("text/html");

Depois, pode-se gerar os dados, imprimindo-os no objeto de saída (out) obtido anteriormente

Page 44: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

O que você deve saber sobre o Container TOMCAT

Page 45: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Descrevendo estrutura de diretórios

No diretório bin encontram-se os programas execução e interrupção do container Tomcat.

No diretório conf encontram-se os arquivos de configuração.

No diretório doc encontram-se os arquivos de documentação.

Page 46: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Descrevendo estrutura de diretórios

No diretório lib encontram-se os bytecodes do container e da implementação da API.

No diretório logs são registradas as mensagens geradas durante a execução do sistema.

Page 47: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Descrevendo estrutura de diretórios

No diretório src encontram-se os arquivos fontes do container e da implementação da API de configuração.

No diretório webapps encontram-se as páginas e códigos das aplicações dos usuários.

Page 48: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Porta utilizada pelo TOMCAT

Por padrão o Tomcat utiliza a porta 8080. http://localhost:8080/

A número porta default para recebimento das requisições HTTP podeser alterada por meio da edição do arquivo server.xml do diretório confcomo mostrado abaixo:<Connector className="org.apache.tomcat.service.PoolTcpConnector"><Parameter name="handler"value="org.apache.tomcat.service.http.HttpConnectionHandler"/><Parameter name="port" value="Número da porta"/></Connector>

Page 49: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Diretório comum das aplicações no TOMCAT

Diretório de AplicaçõesNa verdade é possível definir outro diretório para colocar as aplicações do Tomcat.Para indicar outro diretório é preciso editar o arquivo server.xml e indicar o diretório por meio da diretiva home do tag ContextManager.

Page 50: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Descrição do diretório

Nome da aplicação Nome dado ao diretório principal da aplicação em

desenvolvimento.Web-inf

Diretório que contém arquivos que determinam a configuração da aplicação.

Classes Diretório padrão onde serão colocadas as classes da

aplicação.

Page 51: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Arquivo Deployment Descriptor

Este arquivo possui as configurações que definem os servlets. Este arquivo possui as configurações que definem

características e comportamentos da aplicação. Algumas características são:

Apelido de acesso ao servlet Tempo de sessão Arquivo inicial a ser exibido Página de erros

As configurações da apresentação são definidas através de um arquivo XML.

Page 52: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Arquivo Deployment Descriptor

Algumas TAGs utilizadas para definir a aplicação: <servlet>...</servlet>

Mapear o servlet definindo seu nome e a classe que o representa. <init-param>

• Define parâmetros que serão utilizados pelos services.

<servlet-mapping> Define o apelido de acesso ao servlet

Page 53: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Arquivo Deployment Descriptor

<servlet> <servlet-name>procFormGet</servlet-name> <servlet-class>procFormGet</servlet-class> <init-param> <description>Desenvolvedor do servlet</description> <param-name>autor</param-name> <param-value>Leandra</param-value> </init-param></servlet><servlet-mapping> <servlet-name>procFormGet</servlet-name> <url-pattern>/joaoemaria</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>

Page 54: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Interface HttpServletRequest

getAttribute(String) Retorna um Object que é o atributo armazenado na request.

getAttributeNames() Retorna um Objeto Enumeration que representará os nomes

dos atributos existentes.setAttribute(String,Object)

Define um atributo e o objeto referente que será armazenado.removeAttribute(String)

Apaga um atributo específico.getParameter(String)

Obtém dados vindos do formulário. Retorna uma String.

Page 55: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Interface HttpServletRequest

getParameterMap() Retorna um objeto java.util.Map que representa os

campos recebidos de um formulário. Variavei(“chave”,”valor”)

getParameterValues() Retorna um array de String com todos os valores

definidos como parâmetros da request.getParameterNames()

Retorna um Enumeration de objetos Strings com todos os nomes dos parâmetros definidos na request.

Page 56: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Interface HttpServletRequest

getContextPath() Retorna o nome da aplicação na url. Ex:http://localhost:28213/exemploOlaMundo/joaoemaria

?teste=12 Retorno:/exemploOlaMundo

getQueryString() Retorna a string de consulta passada na URL. Ex:http://localhost:28213/exemploOlaMundo/joaoemaria

?teste=12 Retorno:teste=12

Page 57: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Interface HttpServletRequest

getRequestURI() Retorna a URI informada. Ex:http://localhost:28213/exemploOlaMundo/joaoemaria?

teste=12 Retorno:/exemploOlaMundo/joaoemaria

getRequestURL() Retorna o valor da URL

Retorno:http://localhost:28213/exemploOlaMundo/joaoemariagetServletPath()

Retorna o caminho do servlet Retorno:joaoemaria

Page 58: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Interface HttpServletResponse

SetContentType(String) Define o tipo de informação que será retornada pelo cliente

Objetivo:Permite o navegador saber o qual o programa a ser utilizado para exibir os dados que estão sendo enviados.

getWriter() Obtém um objeto PrintWriter. Este objeto é utilizado para

retornar dados ao cliente.sendRedirect(String)

Redireciona para url informadaaddCookie(Cookie)

Adiciona o Cookie especificado na response.

Page 59: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Reencaminhando ou Redirecionando

Existem algumas situações onde pode ser desejável transferir uma requisição para outra URL. Isto é feito com frequência em sistemas que combinam o uso de Servlets juntamente com JSP. Podemos transferir uma requisição de um Servlet

para uma página JSP, HTML ou um Servlet. Da mesma forma uma página JSP pode transferir

uma requisição para uma página JSP, HTML ou um Servlet.

Page 60: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Reencaminhando ou Redirecionando

Existem dois tipos de transferência de requisição O redirecionamento

O redirecionamento é obtido usando o método sendRedirect() de uma instância HttpServletResponse, passando como argumento a URL de destino.

Reencaminhamento Já no caso de reencaminhamento a requisição é

encaminhada diretamente para a nova URL mantendo todos os objetos associados e evitando uma nova ida ao cliente.

Page 61: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Reencaminhando ou Redirecionando

Redirecionamento

Page 62: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Reencaminhando ou Redirecionando

Reencaminhamento O reencaminhamento é obtido usando o método

forward() de uma instância RequestDispatcher,

passando como argumento os objetos HttpServletRequest e HttpServletResponse para a URL de destino. Uma instância RequestDispatcher é obtida por meio

do método getRequestDispatcher()de uma instância ServletContext , que é obtido, por sua vez, por meio do método getServletContext() do Servlet

Page 63: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Reencaminhando ou Redirecionando

Reencaminhamento

Page 64: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Trocando informações entre os servlets

Para armazenar informações extras, além da informações passadas durante uma requisição requestHTTP, basta que usamos ao método setAttribute(String nomeId,String value) ou getAttribute(String) para recuperar.

Page 65: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Cookies

Um cookie nada mais é que um bloco de informação que é enviado do servidor para o navegador através do cabeçalho da página. A partir de então, dependendo do tempo de validade

do cookie, o navegador reenvia essa informação para o servidor a cada nova requisição.

Os cookies permitem armazenar informações utilizadas pelo servidor, no lado do cliente. o usuário pode impedir que o navegador aceite

cookies. Neste caso, é necessário utilizar as outras técnicas para controle de sessão.

Page 66: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Cookies

A API Servlet permite a manipulação explicita de cookies. Para controle de sessão o programador pode manipular diretamente

os cookies.

//COOKIE Cookie[] cookies = request.getCookies(); if (cookies != null){ if (cookies.length > 0){ for (int i = 0; i < cookies.length; i++){ out.print("Cookie Nome: " + cookies[i].getName() + "<br>"); out.println(" Cookie Valor: " + cookies[i].getValue() +"<br><br>"); } } }else{ System.out.println("Não possui cookies."); //criar um cookie com o nome do usuário e sexualidade Cookie cookie = new Cookie("Nome",request.getParameter("nome")); Cookie cookie1 = new Cookie("Sexo",request.getParameter("sexo"));

response.addCookie(cookie); response.addCookie(cookie1); }

Page 67: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Cookies

Alguns atributos podem ser definidos para cookies, tais como: Tempo de vida – setMaxAge(int)

Um valor positivo indica a quantidade de segundos que um cookie aguardará para expirar.

Um valor negativo indica que o cookie será apagado no momento que o browser for fechado.

O valor zero indica que o cookie deve ser apagado imediatamente

Domínio – setDomain(String) Indica qual domínio deverá criar os cookies.Cookie cookie = new Cookie(cName ,cValor);

cookie.setDomain(“*.uvf.br”); // todos os domínios como dpi.uvf.br mas não *.dpi.ufv.brcookie.setMaxAge (3600); // uma hora de tempo de vida...

Page 68: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações em 3 camadas

Um padrão de projeto muito utilizado para desenvolvimento de aplicações J2EE é o MVC (Model-View-Controller). Este padrão separa três formas distintas de

funcionalidades em uma aplicação. Modelo Visualização Controle

Page 69: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações em 3 camadas

O modelo representa a estrutura de dados e operações que atuam nestes dados. Em uma aplicação orientada a objetos, constitui

as classes de objetos da aplicação que implementam o que quer que a aplicação tenha que fazer.

Page 70: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações em 3 camadas

Visões implementam exclusivamente a lógica de apresentação dos dados em um formato apropriado para os usuários. A mesma informação pode ser apresentada de

maneiras diferentes para grupos de usuários com requisitos diferentes.

Page 71: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações em 3 camadas

Um controlador traduz ações de usuários (movimento e click de mouse, teclas de atalho, etc) juntamente com os valores de entrada de dados em chamadas à funções específicas no modelo.

Page 72: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Aplicações em 3 camadas

Os benefícios em usar o padrão MVC são: Separação Modelo-Vista

separando o modelo da visualização é mais fácil adicionar diferentes apresentações do mesmo dado, além de facilitar também a adição de novos tipos de visão a medida que a tecnologia evolui.

Separação Controlador-Vista Separar o controlador da visualização permite maior flexibilidade

para selecionar, em tempo de execução, visões apropriadas baseado no fluxo de trabalho, preferências do usuário ou estado interno do modelo, quando mais de uma estiver disponível.

Separação Controlador-Modelo Separando o controlador do modelo temos como criar mapeamentos

configuráveis de ações capturadas pelo controlador para funções no modelo. Estas configurações possibilitam, por exemplo, que uma mesma ação seja executada, para usuários diferentes, por funções diferentes.

Page 73: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Muitas vezes o desenvolvimento de um site é uma tarefa complexa que envolve vários profissionais. A tarefa de projeto do layout da página fica a cargo do Web Designer Incluindo a diagramação dos textos e imagens,

aplicação de cores, tratamento das imagens, definição da estrutura da informação apresentada no site e dos links para navegação pela mesma.

Page 74: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Já o Desenvolvedor Web é responsável pela criação das aplicações que vão executar em um site. O trabalho destes dois profissionais é somado na

criação de um único produto, mas durante o desenvolvimento a interferência mutua deve ser a mínima possível. Ou seja, um profissional não deve precisar alterar o que é foi feito pelo outro profissional para cumprir sua tarefa.

Page 75: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Com a tecnologia servelt, essa independência é impossível, pois não seria nada bom criar uma página através do servlet utilizando out.print.

Foi devido a esse problema a Sun desenvolveu uma tecnologia baseada em Servlets chamada de JSP.

Java Server Pages (JSP) são páginas HTML que incluem código Java e outros tags especiais. Desta forma as partes estáticas da página não precisam ser

geradas por println(). Elas são fixadas na própria página. A parte dinâmica é gerada pelo código JSP. Assim a parte

estática da página pode ser projetada por um Web Designer que nada sabe de Java.

Page 76: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

A primeira vez que uma página JSP é carregada pelo container JSP o código Java é compilado gerando um Servlet que é executado, gerando uma página HTML que é enviada para o navegador.

As chamadas subsequentes são enviadas diretamente ao Servlet gerado na primeira requisição, não ocorrendo mais as etapas de geração e compilação do Servlet.

Page 77: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Page 78: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

<html><head><title>Exemplo JSP</title></head><body><%String x = "Ol&aacute; Mundo!";%><%=x%></body></html>

Para executar o exemplo salve-o com a extensão .jsp. Por exemplo ola.jsp.

Page 79: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Note que o Servlet é subclasse de uma classe HttpJspBase e não da HttpServlet.

Além disso, o método que executado em resposta à requisição é o método _jspService() e não o método service().

Note também que todas as partes estáticas da página JSP são colocadas como argumentos do método write() do objeto referenciado out.

Page 80: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

public class _0002fjsp_0002fola_00032_0002ejspola_jsp_0 extends HttpJspBase {....public void _jspService(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {....PageContext pageContext = null;HttpSession session = null;ServletContext application = null;ServletConfig config = null;JspWriter out = null;...try {...out.write("<html>\r\n <head>\r\n <title>Exemplo JSP</title>\r\n</head>\r\n <body>\r\n");String x = "Ol&aacute; Mundo!";out.write("\r\n");out.print(x);out.write("\r\n </body>\r\n</html>\r\n");...} catch (Exception ex) {...}}}

Page 81: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

Existe 5 tags disponíveis para trabalhar com JSP TAG de declaração (declaration) TAG de expressões (expression) TAG de diretivas (directive) TAG de scripts (Scriptlet) TAG de ações (Action)

Page 82: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

Existe 5 tags disponíveis para trabalhar com JSP TAG de declaração (declaration)

Esta tag permite ao desenvolvedor declarar variáveis e métodos.

Antes da declaração deverá utilizar os operadores de início e fim. <%! --utilizado para abrir uma tag %> --utilizado para fechar uma tag

• Os códigos adicionados entre a TAG deverão finalizar com ; (ponto e vírgula)

Page 83: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

TAG de expressões (expression) Expressões são avaliadas, convertidas para String e

colocadas na página enviada. A avaliação é realizada em tempo de execução, quando

a página é requisitada.

Exemplos:<%= new java.util.Date() %><%= request. getMethod() %>

Page 84: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

TAG de script(scriptlets) Quando é necessário mais de um comando Java ou

o resultado da computação não é para ser colocado na página de resposta é preciso usar outra categoria de tags JSP: os Scriptlets .

Os Scriptlets permitem inserir trechos de código em Java na página JSP.

Page 85: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Exemplo de JSP scriptlets

<html><head><title>Conversao Celcius Fahrenheit </title></head><body><%String valor = request.getParameter("celcius");if (valor != null ){double f = Double.parseDouble(valor)*9/5 +32;out.println("<P>");out.println("<h2>Valor em Fahrenheit:" +f +"<h2><br>");}%><form action=conversao.jsp method=POST>Celcius: <input type=text size=20 name=celcius><br><input type=submit>

Page 86: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

TAG de script(scriptlets) Quando é necessário mais de um comando Java ou

o resultado da computação não é para ser colocado na página de resposta é preciso usar outra categoria de tags JSP: os Scriptlets .

Os Scriptlets permitem inserir trechos de código em Java na página JSP.

Page 87: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

Comentários Existem dois tipos de comentários utilizados em páginas

JSP. O primeiro exclui todo o bloco comentado da saída gerada

pelo processamento da página. A forma geral deste tipo de comentário é a seguinte:

• <%--comentário --%>O segundo tipo de comentário é o utilizado em

páginas HTML. Neste caso o comentário é enviado dentro da página de resposta. A forma geral deste tipo de comentário é a seguinte: <!-- comentário.-->

Page 88: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Tags utilizadas em JSP

Diretivas Diretivas são mensagens para JSP container. Elas não enviam nada para a página mas são

importantes para definir atributos JSP e dependências com o JSP container. A forma geral da diretivas é a seguinte: <%@ Diretiva atributo="valor" %>

Tipos de diretivas Diretiva page Diretiva include

Page 89: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Diretiva Page

Page 90: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Diretiva Page

<%@ page[ language="java" ][ extends="package.class" ][ import="{package.class | package.*}, ..." ][ session="true|false" ][ buffer="none|8kb|sizekb" ][ autoFlush="true|false" ][ isThreadSafe="true|false" ][ info="text" ][ errorPage="URL relativa" ][ contentType="mimeType [ ;charset=characterSet ]" |"text/html ; charset=ISO-8859-1" ][ isErrorPage="true|false" ]%>

Page 91: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Diretiva Include

Inclui um arquivo estático em uma página JSP. Sintaxe:

<%@ include file="relativeURL" %><%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.util.Date"%><!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=UTF-8"> <title>JSP Page</title> </head> <body> <%=new Date() %> </body></html>

Page 92: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Gerando erro e tratando com Pagina de erro

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page errorPage="error.jsp"%><!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=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <%@include file="novojsp.jsp"%> </body></html>

INDEX.JSP

Page 93: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Gerando erro e tratando com Pagina de erro

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.util.Date"%><!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=UTF-8"> <title>JSP Page</title> </head> <body> <%=new Date() %>

<% String x = "as"; int a = Integer.parseInt(x); %> </body></html> NOVOJSP.JSP

Page 94: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Gerando erro e tratando com Pagina de erro

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page isErrorPage="true"%><!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=UTF-8"> <title>JSP Page</title> </head> <body> ERROR </body></html>

ERROR.JSP

Page 95: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Java Server Page

Objetos implícitos Alguns objetos estão disponíveis por padrão para uma

página JSP, são eles (os mais utilizados):

Page ConfigRequest Response OutSessionApplicationPageContextException

Page 96: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Objetos Implícitos

Page(javax.servlet.jsp.HttpJspPage) Instância de servlet da página

Config(javax.servlet.ServletConfig) Dados de configuração do Servlet

Request (javax.servlet.http.HttpServletRequest) Dados de solicitação incluindo parâmetros

Out(javax.servlet.jsp.JspWriter ) Fluxo de saída para o conteúdo da página

Response(javax.servlet.http.HttpServletResponse) Dados da resposta

Page 97: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

JSP – Objetos Implícitos

pageContext(javax.servlet.jsp.PageContext) Dados de contexto para execução da página

Application(javax.servlet.ServletContext) Dados compartilhados por todas as páginas da aplicação

Session(javax.servlet.http.HttpSession) Dados de sessão específicos de usuário

Out(javax.servlet.jsp.JspWriter ) Fluxo de saída para o conteúdo da página

Page 98: UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web

Sessões

A manipulação direta de cookies para controle de sessão é um tanto baixo nível, uma vez que o usuário deve se preocupar com a identificação, tempo de vida e outros detalhes.

Por isso a API Servlet fornece um objeto com controles de nível mais alto para monitorar a sessão, o HttpSession.