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.
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:
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).
Figura 02 – JSP session2.jsp com o os links para executar o código da listagem 03 que recupera o valor do atributo valueSession1.
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:
Figura 04 – Formulário para adicionar o nome do atributo e o valor do mesmo.(session.jsp)
Figura 05 – Adicionando o nome do atributo sendo “JOB” e o valor sendo “Development”. (session.jsp)
Figura 06 – Adicionando o nome do atributo que se deseja recuperar o valor. (session2.jsp)
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
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo