Trabalhando com Session no DWR - Parte 1.2

 

Vamos ver neste artigo alguns exemplos de como se trabalhar com o Objeto Session e Request do JAVA com o DWR. O Artigo será dividido em duas partes, a primeira vamos falar do Objeto Session, alguns exemplo básicos, a segunda iremos tratar de algumas implementações mais elegantes e recomendadas para o uso do DWR com Session.

\

PS1: Vamos utilizar nomes de funções, métodos, parâmetros e variáveis em inglês, pois esse artigo será também utilizado para a vídeo aula da Java Magazine e para a mesma, esse padrão em inglês tem que ser seguido.

 

Preparando o ambiente e ferramentas

Segue abaixo o nosso ambiente:

 

IDE: MyEclipse 5.1.1GA

ContainerWeb: Tomcat 5.5.17

DWR: Versão 2.0.1

JAVA: JKD5.0 ou superior.

 

Informações Iniciais

Antes de tudo vamos ver alguns conceitos básicos para começar a executar os exemplos.

 

Configuração do dwr.xml

Para se trabalhar com o DWR utilizando o objeto Session teremos que definir a sua classe FacadeAjax com o scope igual a session, veja abaixo:

 

<create creator="new" javascript="FacadeAjaxSession" scope="session">

      <param name="class" value="com.jm.dwr.FacadeAjaxSession"/>

</create>

 

Essa é a única diferença no projeto para se trabalhar com Session. O resto das configurações segue o padrão, caso você tenha alguma dúvida acesse a página do meu site onde possuo uma lista de todos os artigos do DWR.

 

http://www.handersonfrota.com.br/?page_id=12

 

Imports que serão utilizados nas páginas JSP.

 

<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/interface/FacadeAjaxSession.js'></script>

<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/engine.js'></script>

<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/util.js'></script>

<script type='text/javascript' src='js/ajax.js'></script>

<script type='text/javascript' src='js/util.js'></script>

<script type='text/javascript' src='js/session.js'></script>

 

Iniciando os Exemplos

 

Exemplo 1. Exemplo básico para recuperar um objeto na sessão.

Para este exemplo bem simples vamos setar no próprio JSP alguns valores na sessão e com o DWR recuperar esse valor em outro JSP.

 

HTML(session.jsp)

<%

     session.setAttribute("valueSession1", "Handerson Frota");

     session.setAttribute("valueSession2", "Java Magazine");

%>

<div id="msgSession"></div>

<br>

<br><strong><a href="session2.jsp">Go JSP Session 2 >>></a></strong>

<br><br>

Values Session Default:<br>

<strong><%=session.getAttribute("valueSession1") %></strong><br>

<strong><%=session.getAttribute("valueSession2") %></strong><br>

Listagem 01 – Neste exemplo criamos dois atributos na sessão: “valueSession1” e “valueSession2”, e já exibimos esses valores recuperando com session.getAttribute e criamos um link que irá acessar a página session2.jsp.

 

HTML(session2.jsp)

<br>

<br><strong><a href="session.jsp"> <<< Go JSP Session 1</a></strong>

<br><br>

Values Session Default:<br>

<strong><%=session.getAttribute("valueSession1") %></strong><br>

<strong><%=session.getAttribute("valueSession2") %></strong><br>

<br>

<hr>

<a href="javascript:getExampleSession('valueSession1');">Get Session Value 1</a><br>

<a href="javascript:getExampleSession('valueSession2');">Get Session Value 2</a><br>

<div id="msgSession"></div>

 

Listagem 02 – Neste trecho de JSP vamos ter um link que irá retornar para a página session.jsp. Vamos exibir também os valores apenas para efeito didático. Temos agora o exemplo que queremos, com a função “getExampleSession”(ver listagem 3) passamos o atributo que desejamos pegar o valor, após clicar nos links respectivos vamos exibir o retorno na div msgSession.

 

Javascript(session.js)

function getExampleSession(value){

     

      var attribute = value;

     

      FacadeAjaxSession.exampleSession1(attribute,{

            callback:function(str){

                  DWRUtil.setValue("msgSession", str);

            },

            errorHandler:function(errorString, e){

                  DWRUtil.setValue("msgSession", errorString);

            },

            timeout:50000

      });

}

Listagem 03 – Nesta função vamos receber como parâmetro o valor que será referente ao atributo que está na sessão. Ela será a responsável por imprimir o retorno do método “exampleSession1” do java.

 

Até agora é o básico, temos um JSP que seta valores no objeto Session e um JavaScript que vai acessar um método na classe Java, é nesse método que vamos utilizar a “integração” do DWR com o objeto Session do JAVA. Veremos o código a seguir e vamos comentá-lo.

 

JAVA(SessionFacade)

 

public String exampleSession1(String attribute){

    WebContext wc = WebContextFactory.get();

            

     String valueSession = "";

            

     if(wc.getHttpServletRequest().getSession().getAttribute(attribute)!= null){

 

valueSession = wc.getHttpServletRequest().getSession().getAttribute(attribute).toString();

 

     }else{

        valueSession = "Session is null";

     }

                   

     return valueSession;

}

Listagem 04 – Neste método vamos utilizar as classes WebContext e WebContextFactory ambas dos respectivos pacotes: org.directwebremoting.WebContext e org.directwebremoting.WebContextFactory do DWR. Elas são as responsáveis por acessar o objeto Session do contêiner web. Neste exemplo temos uma simples validação se o atributo existe na sessão e depois recuperamos o atributo e armazenamos em uma String, dando-a como retorno. Com esse retorno a função getExampleSession(ver listagem 03) por meio do DWRUTil.setValue() imprime o valor na página(ver listagem 02) utilizando o div “msgSession”.

 

Resultado da execução do Exemplo 1:

 

hftsdwrp12fig01.jpg 

Figura 01 – Primeira página exibindo os valores que estão na sessão: Handerson Frota e Java Magazine setados no JSP session.jsp(ver listagem 01).

 

hftsdwrp12fig02.jpg 

Figura 02 – JSP session2.jsp com o os links para executar o código da listagem 03 que recupera o valor do atributo valueSession1.

 

hftsdwrp12fig03.jpg 

Figura 03 – JSP session2.jsp com o os links para executar o código da listagem 03 que recupera o valor do atributo valueSession2.

 

Exemplo 2. Criando Atributos na sessão e recuperando-os.

Nesse exemplo vamos criar um atributo e adicionar um valor, iremos depois para o JSP session2.jsp para recuperar esse valor.

 

HTML(session.jsp)

Create Session:<br>

<form name="formCreateSession" id="formCreateSession">

    <label>Attribute:</label>

    <input type="text" id="attribute" name="attribute" value="" /><br>

    <label>Value:</label>

    <input type="text" id="value" name="value" value="" /><br>

    <input type="button" value="Save" onclick="javascript:createSession();">

</form>

Listagem 05 – Um formulário com os campos attribute e value que serão utilizados para criar a sessão.

 

HTML(session2.jsp)

<form id="form1" name="form1">

    <input type="text" value="" id="attribute"/>

</form>

<a href="javascript:getExampleSession(document.getElementById('attribute').value);">

Get Create Session Value</a><br>

Listagem 06 – Um formulário para ser digitado o nome do atributo que se deseja recuperar e o link para executar a função que recuperar o valor, getExampleSession(ver listagem 03)

 

Javascript

function createSession(){

      var bean = DWRUtil.getValues("formCreateSession");

 

      FacadeAjaxSession.createSession(bean.attribute,bean.value,{

            callback:function(){

                  DWRUtil.setValue("msgSession", "Session create !");

            },

            errorHandler:function(errorString, e){

                  DWRUtil.setValue("msgSession", errorString);

            },

            timeout:50000

      });

}

Listagem 07 – Função utilizada para criar o atributo na sessão através do método createSession(ver listagem 08)  e exibe uma mensagem de Sucesso ou Error.

 

JAVA(FacadeAjaxSession)

 

public void createSession(String attribute, String value){

    WebContext wc = WebContextFactory.get();

     wc.getHttpServletRequest().getSession().setAttribute(attribute, value);

}

Listagem 08 – Método que cria um atributo na sessão utilizando o WebContext do DWR.

 

Resultado da execução do Exemplo 2:

 

hftsdwrp12fig04.jpg 

Figura 04 – Formulário para adicionar o nome do atributo e o valor do mesmo.(session.jsp)

 

hftsdwrp12fig05.jpg 

Figura 05 – Adicionando o nome do atributo sendo “JOB” e o valor sendo “Development”. (session.jsp)

 

hftsdwrp12fig06.jpg 

Figura 06 – Adicionando o nome do atributo que se deseja recuperar o valor. (session2.jsp)

 

hftsdwrp12fig07.jpg 

Figura 07 – Exibindo o valor do atributo “JOB”. (session2.jsp)

 

 

Conclusão

Bem a primeira parte do nosso artigo esta chegando ao fim, vimos nesse artigo alguns exemplos básicos de como criar e recuperar valores da sessão utilizando o DWR. Vocês devem ter observado que não existe nenhum mistério ou mágica é bastante simples se trabalhar com session com o DWR.

 

Na segunda parte sobre sessão, veremos uma implementação mais elegante, e algumas mais recomendadas para se trabalhar com Session no DWR.

 

Espero que este artigo tenha ajudado ao entendimento e caso tenham a vir alguma dúvida entrem em contato.

 

A primeira parte desse projeto poderá ser baixada no link abaixo.

 

Baixar projeto aqui.

 

Obrigado e Boa Sorte.

 

Handerson Frota

handersonbf@gmail.com

www.handersonfrota.com.br