A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "UNIPAC – ARAGUARI CAMPUS – IX PROF. EVERTON HIPÓLITO DE FREITAS Java – J2EE Java pra Web."— Transcrição da apresentação:

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

2 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

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

4 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 arquitetura e processamento.

5 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.

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

7 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.

8 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.

9 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.

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

11 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.

12 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.

13 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

14 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.

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

16 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.

17 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.

18 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).

19 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.

20 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.

21 JEE Visão do Servlet e Container

22 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.

23 JEE

24 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.

25 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.

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

27 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:

28 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.

29 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.

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

31 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(" "); out.println(" Primeira aplicação "); out.println(" "); out.println(" Local da chamada: " + request.getContextPath () + " "); out.println(" Informações do Servlet: " + getServletInfo() + " "); out.println(" "); } }

32 Ciclo de vida de um servlet O ciclo de vida de um servlet é controlado pelo container Quando 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ídos Quando o container decidir remover o servlet da memória, ele o finaliza chamando destroy()

33 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!"); }

34 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; }

35 Parâmetros de inicialização exemplo curso.ExemploServlet JDBCDriver sun.jdbc.odbc.JdbcOdbcDriver 1

36 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

37 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)

38 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

39 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

40 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ários Se 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) {... }

41 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=3 Parâ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.0 Content-length: 21 Content-type: x-www-form-urlencoded id=agente007&acesso=3

42 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");

43 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

44 O que você deve saber sobre o Container TOMCAT

45 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.

46 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.

47 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.

48 Porta utilizada pelo TOMCAT Por padrão o Tomcat utiliza a porta 8080.  http://localhost:8080/ http://localhost:8080/ A número porta default para recebimento das requisições HTTP pode ser alterada por meio da edição do arquivo server.xml do diretório conf como mostrado abaixo: <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/>

49 Diretório comum das aplicações no TOMCAT Diretório de Aplicações Na 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.

50 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.

51 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.

52 Arquivo Deployment Descriptor Algumas TAGs utilizadas para definir a aplicação: ...  Mapear o servlet definindo seu nome e a classe que o representa. Define parâmetros que serão utilizados pelos services.   Define o apelido de acesso ao servlet

53 Arquivo Deployment Descriptor procFormGet Desenvolvedor do servlet autor Leandra procFormGet /joaoemaria 30 index.jsp

54 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.

55 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.

56 Interface HttpServletRequest getContextPath()  Retorna o nome da aplicação na url.  Ex:http://localhost:28213/exemploOlaMundo/joaoemaria?tes te=12http://localhost:28213/exemploOlaMundo/joaoemaria  Retorno:/exemploOlaMundo getQueryString()  Retorna a string de consulta passada na URL.  Ex:http://localhost:28213/exemploOlaMundo/joaoemaria?tes te=12http://localhost:28213/exemploOlaMundo/joaoemaria  Retorno:teste=12

57 Interface HttpServletRequest getRequestURI()  Retorna a URI informada.  Ex:http://localhost:28213/exemploOlaMundo/joaoemaria?tes te=12http://localhost:28213/exemploOlaMundo/joaoemaria  Retorno:/exemploOlaMundo/joaoemaria/exemploOlaMundo/joaoemaria getRequestURL()  Retorna o valor da URL  Retorno:http://localhost:28213/exemploOlaMundo/joaoemariahttp://localhost:28213/exemploOlaMundo/joaoemaria getServletPath()  Retorna o caminho do servlet  Retorno:joaoemariajoaoemaria

58 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 informada addCookie(Cookie)  Adiciona o Cookie especificado na response.

59 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.

60 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.

61 Reencaminhando ou Redirecionando Redirecionamento

62 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

63 Reencaminhando ou Redirecionando Reencaminhamento

64 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.

65 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.

66 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() + " "); out.println(" Cookie Valor: " + cookies[i].getValue() +" "); } }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); }

67 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.br cookie.setMaxAge (3600); // uma hora de tempo de vida...

68 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

69 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.

70 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.

71 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.

72 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.

73 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.

74 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.

75 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.

76 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.

77 JSP – Java Server Page

78 Exemplo JSP <% String x = "Olá Mundo!"; %> Para executar o exemplo salve-o com a extensão.jsp. Por exemplo ola.jsp.

79 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.

80 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(" \r\n \r\n Exemplo JSP \r\n \r\n \r\n"); String x = "Olá Mundo!"; out.write("\r\n"); out.print(x); out.write("\r\n \r\n \r\n");... } catch (Exception ex) {... }

81 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)

82 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)

83 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:

84 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.

85 Exemplo de JSP scriptlets Conversao Celcius Fahrenheit <% String valor = request.getParameter("celcius"); if (valor != null ) { double f = Double.parseDouble(valor)*9/5 +32; out.println(" "); out.println(" Valor em Fahrenheit:" +f +" "); } %> Celcius:

86 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.

87 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: 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: 

88 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:   Tipos de diretivas  Diretiva page  Diretiva include

89 Diretiva Page

90 <%@ 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" ] %>

91 Diretiva Include Inclui um arquivo estático em uma página JSP.  Sintaxe:  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> JSP Page

92 Gerando erro e tratando com Pagina de erro <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> JSP Page Hello World! INDEX.JSP

93 Gerando erro e tratando com Pagina de erro <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> JSP Page <% String x = "as"; int a = Integer.parseInt(x); %> NOVOJSP.JSP

94 Gerando erro e tratando com Pagina de erro <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> JSP Page ERROR ERROR.JSP

95 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 Config Request Response Out Session Application PageContext Exception

96 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

97 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

98 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.


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

Apresentações semelhantes


Anúncios Google