Desenvolvimento de Soluções WEB Escopos de uma Aplicação Web Eduardo Martins Guerra Objetivo da Aula Apresentar com maiores detalhes como se trabalha com os diferentes escopos de uma aplicação web, como o request, session e context. Agenda da Apresentação • Contextos de uma Aplicação Web • Parâmetros x Atributos • Gerenciamento de Sessão • Objeto HttpServletRequest • Objeto HttpServletResponse Escopos de Aplicações Web Contém informações globais a toda a aplicação. Todos na aplicação podem acessá-las. Exemplo: Número de usuários conectados. Context Contém informações acessíveis a apenas um usuário. Mantém o estado entre vários requests. Exemplo: Nome de login de um usuário. Session Contém informações referentes a uma requisição. Perde o estado entre requisições. Exemplo: Informações de um formulário. Request Parâmetros X Atributos Parâmetros Passados externamente sem controle da aplicação para modificação. Atributos São colocados em um local onde pode-se recuperar aquela informação de outros locais. Context init parameters; Servlet init parameters; Request parameters; Context Attributes; Session Attributes; Request Attributes; Retorno: String Retorno: Object Não pode ser modificado! setAttribute(String nome, Object val) Parâmetros de Inicialização getServletContext().getInitParameter(“param”); <web-app ...> <context-param> <param-name>param</param-name> <param-value>value</param-value> </context-param> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>org.ServClass</servlet-class> <init-param> <param-name>param</param-name> <param-value>value</param-value> </init-param> </servlet> </web-app> getServletConfig().getInitParameter(“param”); O uso de parâmetros pode deixar um componente mais flexível e reutilizável. Mantendo uma Sessão O protocolo HTTP não mantém a conexão entre as requisições e para um usuário ser reconhecido é preciso enviar algum identificador para o container web a cada requisição. Cookies Pode ser utilizado o cookie JSESSIONID para armazenar no browser cliente o identificador da sessão. O Web Container faz este trabalho por você! A reescrita de URL é a melhor alternativa quando o browser não aceitar cookies. As URLs são codificadas para “URL + ;jsessionid=123456”. O método response.encodeURL(“/servlet”) faz isto para você e Reescrita elas são reescritas apenas se o cliente não aceitar cookies. de URL HttpSession session = request.getSession(); O Objeto HttpServletRequest Encapsula as informações referentes a uma requisição HTTP. Recuperação de um Header String agent = request.getHeader(“User-Agent”); Recuperação dos Cookies Cookies[] cookies = request.getCookies(); HTTP Method String method = request.getMethod(); InputStream do Request InputStream input = request.getInputStream(); O Objeto HttpServletResponse Encapsula as informações referentes a uma resposta de uma requisição HTTP. Setando Headers response.setHeader(“header-name”,”value”); response.addHeader(“header-name”,”value”); Retornando Texto PrintWriter writer = response.getWriter(); writer.println(“<html> ... </html>”); Retornando Outro tipo de Informação ServletOutputStream out = response.getOutputStream(); response.setContentType(“application/jar”); out.write(byteArray); Redirect X Request Dispatch Redirect Quando ocorre um redirect, a aplicação envia uma resposta solicitando browser para chamar uma outra página. Agora eu estou ocupado! Chame a pag.jsp que ela vai poder te ajudar! response.sendRedirect(“/pag.jsp”); Request Dispatch Quando ocorre um request dispatch, o web container chama internamente um outro recurso para processar a requisição. Ei pag.jsp, preciso de sua ajuda para processar uma requisição! RequestDispatcher view = request.getRequestDispatcher(“pag.jsp”) view.forward(request,response); Exercício – Usando os Escopos Escrever uma aplicação web que armazene contadores em diferentes escopos, que vão sendo incrementados a cada requisição. • Criar uma página que exibe o valor dos contadores • Acessar a aplicação com diversos browsers • Desabilitar os cookies do browser • Verificar a reescrita de URL