JSP + Servlet

PessoALL,

Desenvolvi as seguintes páginas e não está funcionando, alguém help-me ? Porque estava querendo fazer uma função genérica para trabalhar com Session. Tenho vários arquivos como o teste2.jsp e por isso tava querendo fazer uma função genérica. Pois dentro de alguns arquivo preciso ler valores da Session.

teste1.jsp

<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<%@include file="/teste2.jsp"%>
<%
setSessao(“Texto”, “Java”);
out.println(getSessao(“Texto”));
%>

teste2.jsp

<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<%!
public static String getSessao(String VariavelSessao) {
return session.getAttribute(VariavelSessao);
}
public static String setSessao(String VariavelSessao, String ValorVariavelSessao) {
return session.setAttribute(VariavelSessao, ValorVariavelSessao);
}
%>

a variavel Session eh uma variavel local do metodo que atende a requisição…

por isso nao da para utiliza-la em outro metodo criado.

Existe alguma maneira para que tornar ela ‘global’ ?

Você tem alguma solução melhor pra isso ?

Valeu,

[quote=“clenio”]Existe alguma maneira para que tornar ela ‘global’ ?

Você tem alguma solução melhor pra isso ?

Valeu,[/quote]

session é um objeto instancioado no método _service() do jsp gerado… é uma variável local do método, não de instancia do servlet… mas tu sempre pode chamar getSession()…

Na sua JSP onde vc vai criar ou ler a sua session tende utilizar isto:

Criar a session:

session.setAttribute&#40;&quot;nomeUsuario&quot;, &quot;Joao&quot;&#41;;

Para ler a session utilize:

session.getAttribute&#40;&quot;nomeUsuario&quot;&#41;;

Vc pode utilizar o getAttribute dentro de um out.println ou dentro de um campo de formulário, etc.

Bom, eu utilizo assim aqui no meu trabalho e sempre deu certo.

Espero ter ajudado.

:wink:

Valeu PessoALL,

Obrigado pelas dicas. Consegui resolver o problema, alterei as páginas da seguinte maneira:

teste1.jsp

<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<%@include file="/teste2.jsp"%>
<%
vRequest = request;
vResponse = response;

setSessao("Texto", "Java");
out.println(getSessao("Texto"));

%>

teste2.jsp

<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<%!
static HttpServletRequest vRequest;
static HttpServletResponse vResponse;

public static String getSessao(String VariavelSessao) {
    return vRequest.getSession().getAttribute(VariavelSessao).toString();
}
public static boolean setSessao(String VariavelSessao, String ValorVariavelSessao) {
    vRequest.getSession().setAttribute(VariavelSessao, ValorVariavelSessao);
    return true;
    //return vRequest.getSession().setAttribute(VariavelSessao, ValorVariavelSessao);
}

%>

Depois disso, foi só alegria. :lol:

cuidado com esse codigo q voce fez…

uma mesma instancia do jsp eh usada por varios usuarios que tentarem acessar a mesma pagina ao mesmo tempo

por isso nao se deve utilizar um atributo do objeto jsp com um valor que seja unico para um determinado usuario. pode acontecer de que sejam setados os valores de um usuario na seção de outro usuario :!:

bem lembrado denis, e isso se resolve com synchronized( session ) :slight_smile:

Não entendi muito bem.

Você poderia explicar de outra maneira ?

Não faço a menor idéia de synchronized( session )

Valeu,

bem, nao li o tópico todo e respondi errado, esquece o synchronized… ahm, acontece q qnd vc tem atributos no servlet, eles não são thread safe, pq servlets rodam em threads diferentes, e não instancias diferentes… pois… são threads! hueuehue… então, pode acontecer de um usuário A alterar o valor do atributo x, e o usuário B tb o fazer, e qnd A ler o atributo x, vai esperar por um valor, e esse valor vai vim errado… sacou? é a mesma instancia, a mesma pilha, mas em threads diferentes…