Servlet Contador com SESSAO? (Resolvido graças a -> drsmachado)

19 respostas
F

nao tenho nem nocao de como se utiliza SESSAO para isso alguem poderia me dar 1 light?

19 Respostas

K

Não tem muito segredo procure aki mesmo no forum por HttpSession.

F

certo obrigado vou dar uma olhada

F
galera criei o seguinte codigo:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Lab11
 */
public class Lab11 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Lab11() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		response.setContentType("text/html");
		session.setMaxInactiveInterval(10000);
		PrintWriter out = response.getWriter();
		int count = 0;
			session.setAttribute("User", count);
			count++;
		out.println("Numero de Acesso: "+session.getAttribute("User"));
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

so que nao incrementa alguem poderia me ajudar?

D

Isso acontece por que todas as vezes que o login for realizado, uma nova sessão se inicia.
O ideal é criar um tipo de persistência desta informação (banco de dados, gravar em txt, xml, etc) e, ao identificar que o usuário X efetuou acesso, incrementar o dado referente.

F

intao… mais nao tem como eu fazer sem nenhum documento externo?
so guardando na sessao?
como se fosse cookie?

D

Sessão não, pois ao executar o método que foi postado ali você cria uma nova, então o contador será o mesmo.
Não sei o que entende por cookie, mas é um arquivo externo, salvo na máquina do cliente.
Até pode ser feito, mas vai precisar alterar muita coisa ai.

F

tipo
se eu usar sessao e toda vez eu incrementar
session.setAttribute(“User”, 1);

fechar a pagina e colocar

session.setAttribute(“User”, 2);
ele nao salva o numero da sessao "User"1 ?

se eu quiser criar um contador que conte a qtd de vezes que um usuario acessou o site eu terei obrigatoriamente que usar cookie ou um arquivo?

D

Sim.
Pense da seguinte forma, uma sessão é algo que existe por um determinado período de tempo. (Não sei por que me veio à cabeça o Congrsso Nacional…). Normalmente ela existe a partir do login do usuário até o momento em que este efetua logoff ou mesmo fecha a página (ou conexão é perdida, etc). Sendo assim, tudo o que ele alterar (ou o sistema) durante aquela sessão, não poderá ser recuperado, exceto se (e somente se) houver um mecanismo de persistência (um atributo no cookie contAcesso = x) ou no banco de dados.

F

a sessao fica armazenada no servidor… certo?
se eu deichar uma sessao para “morrer” em sei la 30 minutos

e quiser que nesse periodo ela pegue o endereco do usuario e conte quantas vezes ele acessou a pagina
tem como eu fazer isso?
pois estou com um exercicio para fazer so que ta foda ^^
o enunciado é

Criar uma Servlet que conte o número de acessos
de um determinado usuário(exibir na tela o
número). Utilizar sessão para isso(método GET).

agradeco pela ajuda que vc esta me dando =)

D

A sessão pode durar quanto tempo ela tenha sido configurada para tal.
O problema é, a partir do momento que ela expira, os dados que nela existiam (Objetos, lixos de memória, imagens, etc, etc, etc) se perdem.
Se o usuário tentar entrar, nesse período de validade da sessão, a contagem ocorre normalmente.
Se a sessão for destruída, não há como recuperar.
É como a memória RAM… Desligou o computador, ela não tem mais nada, a não ser que você religue, mas os dados que trafegavam nela, se foram…

F

certo… intao tem como eu fazer o contador com a session

eu gostaria de saber como eu fazer para “andar” na session

por que pelo que intendi tipo cria uma session (usuario) e nela coloca algumas informacoes; usuario, 1; usuario,2 e tals

como eu faria para descobrir o tamanho desta session para chegar no ultimo numero cadastrado e inserir um novo?

D

A sessão não é um número.
Você deve manipular (colocar um if/else) e verificar se o usuário está logado. Se o acesso é o primeiro, então cria uma sessão e incrementa o contador e coloca na sessão. Senão, ignora a criação de uma nova sessão e incrementa o contador, não esquecendo que este valor deve ser salvo numa variável de sessão, através do método nomeDaSessao.setAttribute("String_de_nome_da_Variavel", variavel);.

F

este :“String_de_nome_da_Variavel”
no caso seria o nome do usuario por exemplo?
e a variavel poderia ser o contador de quantas vezes o usuario acessou a pagina?

D

Se faz sentido pra ti e você não vai perder a informação posteriormente, beleza.
Eu colocaria

nomeDaSessao.setAttribute("contador", cont);
nomeDaSessao.setAttribute("usuario", nomeDoUsuario);

Mais intuitivo

F

e como eu faco para verificar se o usuario e o mesmo?

request.getRemoteAddr();?

D

Viu o post anterior?
Viu que coloquei, além do contador, uma variável com o nome do usuário?
Pode colocar assim mesmo, quanto atribui a sessão inicial (primeira visita) ou pode colocar uma variável com id, código, cpf, etc…

F

fiz este codigo:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String a = request.getRemoteAddr(); HttpSession session = request.getSession(); HttpSession contador = null; contador.setAttribute("Contador", 0); int cont =0; session.setAttribute("Usuario", request.getRemoteAddr()); if(a == session.getAttribute("Usuario")){ contador.setAttribute("Contador", cont++); } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("O Usuario entrou: "+contador.getAttribute("Contador")); }
so que da null pointer exception
da 1 look ve se ta meio certo sei la ^^

D

Por que dois objetos HttpSession (session e contador)?
Dê uma olhada aqui http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Session-Tracking.html e aqui http://www.stardeveloper.com/articles/display.html?article=[telefone removido]&page=2 (este tem um plus, uma classe que faz a contagem de acessos).

F

hmm muito bom esse exemplo
vou verificar ele para tentar intender oque ele fez
para aprender

muito obrigado pela ajuda

Criado 2 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 19
Participantes 3