Contador de acessos

3 respostas
M
Estou iniciando meus estudos em jsp e servlets e, para dar uma treinada, comecei a escrever um simples contador de acessos. Tentei fazer de forma que o contador em sí funcione em um servlet, que simplesmente produz uma saída que corresponde ao número de acessos. E a apresentação ao usuário ficaria via JSP, que vai pegar o valor obtido através do servlet e jogar pro usuário. Estou indo no caminho certo? Bom.. o servlet eu já fiz, ficou assim:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ContadorServlet extends HttpServlet{
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html");
		Long contadorL = 0L;
		RandomAccessFile contador = new RandomAccessFile("contador", "rw");
		try {
			contadorL = contador.readLong();
		}
		catch(Exception ex) {} // Se não foi possivel ler, o valor antigo(0L), é mantido.
		++contadorL;
		response.getWriter().write(Long.toString(contadorL));
		contador.seek(0);
		contador.writeLong(contadorL);
		contador.close();
		
	}

}
mas a parte do JSP eu não consegui fazer.. Alguém pode me dar uma força??

3 Respostas

F
Sugiro usar a interface HttpSessionListener ela monitora qd uma sessão é

criada e destruída, e tb vc pode obter outras informações da sessão.

Será necessário colocá-la no web.xml (como listener)  toda vez que

alguém criar uma sessão será disparado evento correspondete na classe que ao qual vc implementou esta interface, neste momento vc pode gravar numa tabela, e qd ocorrer o evento de destruição de sessão vc deleta o registro, vc pode ter uma log de tempo de permanência na sessão e outras coisas mais.

No web.xml use:

<listener>

<listener-class>com.SuaClasse</listener-class>

</listener>

no web.xml sei que tb tem uma tag que diz quanto tempo de timeout uma
sessão pode ter, o que corresponde ao método getMaxInactiveInterval da HttpSession. Qd der timeout ele dispara o evento da interface HttpSessionListener.

Espero ter ajudado.
Para isso use:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Em minutos

F

Vc pode fazer algo como abaixo ou gravando num banco usando o código abaixo:

import javax.servlet.http.*;

public class SessionCount implements HttpSessionListener {

private static int numberOfSessions = 0;

public void sessionCreated (HttpSessionEvent evt) {

numberOfSesssions++; }

public void sessionDestroyed (HttpSessionEvent evt) {

numberOfSesssions; }

public static int getNumberOfSessions() {

return numberOfSessions; }

}

no seu web.xml vc coloca as tags e o .class em WEB-INF\classes

<listener>

<listener-class>SessionCount</listener-class>

</listener>

Em qq JSP vc pode usar:
<%=SessionCount.getNumberOfSessions()%>
Isto pq o contêiner web já deixou na memória esta classe assim com faz com os servlets.

Espero ter ajudado.

M

bom, segui os exemplos de vcs.
na hora de testar, eu executei o meu jsp em um navegador, e apareceu que o número de sessões é 0. Abri outro navegador junto e daí o número de sessões que apareceu na pagina foi 1.
Só que no application mannager do tomcat, aparece que o número de sessões é 2!

Criado 22 de novembro de 2004
Ultima resposta 25 de nov. de 2004
Respostas 3
Participantes 2