[MÚSICA] [MÚSICA] Olá a todos. Então, estamos aqui mais Hands On. Hoje vamos falar aqui sobre os escopos das aplicações web e para mostrar isso, a gente vai fazer uma pequena aplicaçãozinha web que a gente vai estar criando variáveis, contadores, diferentes escopos e vamos abrir isso diferentes navegadores e ver como é que isso daí funciona. Certo? Então, vamos lá! Para começar, vou vir aqui, criar aqui novo projeto, uma aplicação web. Vou chamar ela aqui de contadores Escopo. Bom, é isso. Ele já criou pra mim, eu vou já sair daqui para baixo. Certo. Ele já criou aqui a página pra mim. Certo? Eu vou vir aqui, a primeira coisa que eu vou fazer, vou criar uma classe normal e vou chamar de contador. Essa classe aqui eu vou criar aqui simplesmente inteiro, que eu vou chamar aqui ao númeroAtual. Vai começar com o zero e eu vou criar aqui método que, eu vou chamar de contar, eu vou incrementar aquele número. NúmeroAtual + + e, por fim, eu vou sobrescrever o método toString para imprimir, inclusive eu vou até fazer pouquinho diferente, eu vou dar nome para esse contador. É para ficar mais fácil. Então, eu vou dar nome para ele, vou criar aqui construtor que recebe o nome está, e vou, aqui no meu método toString fazer return nome igual ao númeroAtual. Assim, eu posso imprimir o meu contador ali direto. É que ele já tem o toString. Agora, então, eu vou criar o meu servlet que vai contar nos contadores diferentes escopos. Então, se não existir ele vai criar senão, ele vai e conta, manda que o contador conte. Então, eu vou criar aqui novo servlet, vou chamar aqui de contador, contar. Servlet. Vou dar aqui o finalizar aqui. Aqui, a gente já sabe que o netBeans ele cria monte de coisas que não tem necessidade. Então, eu vou vir aqui, vou deixar só como contar aqui a URL. Aqui errado. Pronto. Vou simplificar aqui, vou deixar somente o método doGet mesmo. Aí então, vou apagar tudo isso daqui. [SEM ÁUDIO] Vou deixar somente o método doGet sem muita frescura. Pronto. É isso aí. Então, o que eu vou fazer? Eu vou verificar se existe o contador cada dos escopos e, depois, eu vou mandar contar. Então, eu vou fazer aqui, vou começar no request Então, se o request é getAttribute, vou chamar aqui de contador, se isto for diferente de nulo, ou melhor, se isso for igual a nulo, eu vou criar. Então, eu vou chamar aqui request.setAttribute contador, dou o nome ao objeto. Vou criar aqui new contador e vou passar o nome ali, request. Certo? Então, eu vou vir aqui e vou dar o, vou pegar request ponto getAttribute contador, agora eu tenho a certeza que ele existe. Certo? Vou fazer cast aqui para a classe contador e vou mandar ele contar. Certo? Eu vou fazer isso daqui para cada dos escopos, então, eu vou fazer aqui request, eu vou vir aqui, vou fazer a mesma coisa para a sessão e a mesma coisa para o contexto de aplicação. Então, eu vou colocar aqui request session então, aqui, vez de só o request vai ser request getSession getAttribute contador, que é assim que eu pego o atributo, então, eu vou cada colocar aqui o getSession. Vou a princípio usar o mesmo nome de variável para todos os escopos. Aqui, eu vou fazer o application. Então, vou pegar também toda essa essa mesma estrutura, e aqui, ao invés de request getSession é o getServlet context. Certo? Então, eu vou pegar isto daqui, eu vou substituir aqui baixo também. Cuidado aí, você está replicando Control+C Control+V para você não esquecer de fazer isso algum ponto. Então, eu estou verificando se existe, caso não exista a variável naquele escopo, ele cria e aí ele está, ele está incrementando, depois de criar ele pega e incrementa. Então, agora eu vou imprimir. Certo? Então, eu vou pegar ali o response ponto get Writer Então, vou colocar aqui Print Writer, o chamado pw. Ele vai pegar o Writer e aí ele vai vir aqui pw ponto append e aí ele vai, vou começar a colocar aqui. Então, primeiro eu vou botar aqui: html Vou, falta ponto e vírgula ali, vou finalizar aqui com /html e aí eu vou simplesmente imprimir aqui, como h1 já vou até colocar aqui o /h1. Então, eu vou adicionar cada desses aqui. É request getAttribute contador [SEM ÁUDIO] [SEM ÁUDIO] Vou fazer aqui o request getSession, getAttribute contador. Faltou aqui o get. Attribute ("contador"), e, por fim, o getServletContext da aplicação. Faltou aqui pequeno detalhe, que era configurar aqui o nome de cada. Então vai funcionar mas todos vão se chamar request. Então esse aqui vai se chamar "session" e esse aqui vai se chamar "application", certo? Então é isso: ele incrementa e exibe. Então vou salvar aqui, vou executar a minha aplicação. Estou executando aqui a minha aplicação web. Ele está inicializando o servidor. Daqui a pouquinho ele abre o navegador pra gente. A gente pode ver aqui o GlassFish que ele está executando, e tal. E olha lá, está carregando a aplicação Contadores, ele está abrindo no Internet Explorer. Ele está abrindo o JSP e eu vou chamar aqui o contar. Opa, ficou pouquinho errado. Deixa eu só, faltou fechar aqui o h1. Só pra ficar bonito. Eu vou salvar aqui, dá pra ver que o NetBeans já recarrega aqui pra mim, então vou recarregar. Note que na minha primeira requisição era esperado realmente que o request fosse 1, que a sessão fosse 1 e que o application fosse 1. Eu continuo recarregando essa página e a gente vê que ele só incrementa o session e o application, e com o request não acontece nada, ele vai ser sempre 1. Por quê? Porque o escopo daquela variável é a própria requisição, então realmente não era esperado que ele mantivesse isso daí. Vamos abrir aqui o Google Chrome e vamos tentar acessar a aplicação do Google Chrome. Então eu vou deixar aqui o Internet Explorer aqui no cantinho e vou acessar aqui do Google Chrome. Então note que aqui ele zerou a sessão e o request começa do zero, e o application ele continua incrementando. Por que? É como se fosse outro usuário. Ele vem aqui e a partir desse momento ele começa a incrementar a sessão. Se eu voltar aqui no Internet Explorer eu vejo que o application que eu altero aqui no Chrome vai alterar o application do outro usuário, mas a minha sessão é independente. Da mesma forma, se eu acessar aqui o Firefox né. [ÁUDIO_EM_BRANCO] Vamos esperar ele abrir, e fizer a mesma coisa, é esperado que ele também tenha a sua sessão de uma forma independente- então temos aí o Firefox, que acabou abrindo duas vezes aí tá. Vou também deixar ele pequenininho pra gente poder visualizar todos os navegadores. Então a gente nota que o application afeta sempre todos, a sessão é independente e o request vai ser sempre 1 porque aquela variável só dura durante a própria requisição. Tá certo? Então esse foi o nosso hands-on pra gente exercitar essa parte dos escopos das aplicações web, espero que vendo, colocando uma variável cada escopo e vendo como cada uma é incrementada, você tenha entendido melhor esses conceitos. Certo? Muito obrigado. Até o próximo vídeo. [MÚSICA]