2010-04-18 5 views
0

J'écris un compteur de succès dans JSP, pour mes cours. J'ai écrit le code, et il n'y a pas d'erreur et son fonctionnement, mais le problème est que: si l'utilisateur a ouvert le site Web et essayer d'utiliser une page différente, chaque fois que l'utilisateur retourne à la page d'accueil, le compteur est toujours en ajoutant un nombre, comment puis-je restreindre cette partie? doit le restreindre avec session? ceci est mon code:Comment restreindre un compteur de hits JSP?

<jsp:useBean id="counter" scope="application" class="counter.CounterBean" /> 
The current count for the counter bean is: 
<jsp:setProperty name="counter" property="coun" value="1"></jsp:setProperty> 
<% 
counter.saveCount(); 
int _numberofvisitors=counter.getVisitorsNumber(); 
out.println(_numberofvisitors); 
%> 

Bean:

package counter; 

import java.sql.*; 
import java.sql.SQLException; 

public class CounterBean implements java.io.Serializable { 

    int coun = 0; 

    public CounterBean() { 
     database.DatabaseManager.getInstance().getDatabaseConnection(); 
    } 

    public int getCoun() { 
     return this.coun; 
    } 

    public void setCoun(int coun) { 
     this.coun += coun; 
    } 

    public boolean saveCount() { 
     boolean _save = false; 
     database.SQLUpdateStatement sqlupdate = new database.SQLUpdateStatement("counter", "hitcounter"); 
     sqlupdate.addColumn("hitcounter", getCoun()); 
     if (sqlupdate.Execute()) { 
      _save = true; 
     } 
     return _save; 
    } 

    public int getVisitorsNumber() throws SQLException { 
     int numberOfVisitors = 0; 
     if (database.DatabaseManager.getInstance().connectionOK()) { 
      database.SQLSelectStatement sqlselect = new database.SQLSelectStatement("counter", "hitcounter", "0"); 
      ResultSet _userExist = sqlselect.executeWithNoCondition(); 
      if (_userExist.next()) { 
       numberOfVisitors = _userExist.getInt("hitcounter");     
      } 
     } 
     return numberOfVisitors; 
    } 
} 
+0

On ne sait pas ce que vous voulez compter: 1 chaque visiteur unique quel que soit les pages visitées? Voulez-vous compter cela en fonction des sessions ou des IP uniques? Ou voulez-vous comptabiliser des pages vues uniques par visiteur à chaque fois? Etc. – BalusC

Répondre

2

Modifier cette partie du code:

<% 
counter.saveCount(); 
int _numberofvisitors=counter.getVisitorsNumber(); 
out.println(_numberofvisitors); 
%> 

Pour

<% 
if (session.isNew()) { 
    counter.saveCount(); 
} else { 
    counter.setCoun(-1); 
} 
int _numberofvisitors=counter.getVisitorsNumber(); 
out.println(_numberofvisitors); 
%> 

Hope this helps. A propos, il est préférable de choisir de meilleurs noms pour les méthodes de votre classe Counter. Tout d'abord, remplacez setCoun par setCount. De plus, une méthode de définition assigne généralement la valeur qui lui est transmise à son champ associé. Si vous souhaitez incrémenter la valeur coun, remplacez le nom de la méthode par addCount. incrémenter la valeur count comme:

<jsp:setProperty name="counter" property="coun" value="${1 + counter.coun}"></jsp:setProperty> 
+0

merci beaucoup de son fonctionnement – user261002

+0

merci pour votre conseil vous bénisse – user261002

+0

De rien. :) Et bonne chance avec vos devoirs. :) – Behrang

1
<%@page import="java.io.*,java.util.*" %> 

<html> 
<head> 
<title>Applcation object in JSP</title> 
</head> 
<body> 
<% 


Integer hitsCount=(Integer)application.getAttribute("hitcount"); 
int m; 
     if(hitsCount==null) 
    { 

      m=1; 

     hitsCount =Integer.valueOf(m); 
        application.setAttribute("hitcount", hitsCount); 
} 
else 
    { 

     hitsCount=(Integer)application.getAttribute("hitcount"); 
     m=hitsCount.intValue()+1; 
     hitsCount= Integer.valueOf(m); 
     application.setAttribute("hitcount", hitsCount); 

    } 



%> 


<center> 
<p>Total number of visits:<%=hitsCount.intValue()%> </p> 
</center> 
</body> 
</html> 
Questions connexes