2010-04-18 3 views
0

나는 나의 과목을 위해 JSP에서 히트 카운터를 쓰고있다. 나는 코드를 작성했지만 오류 및 그 작업은 없지만 문제는 다음과 같습니다. 사용자가 웹 사이트를 열고 다른 페이지를 사용하려고하면 사용자가 홈 페이지로 돌아갈 때마다 여전히 카운터가 있습니다. 번호를 추가하면 어떻게이 부분을 제한 할 수 있습니까? 세션으로 제한해야합니까?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); 
%> 

콩 :

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

그것은 당신이 계산하고 싶은 것을 명확하지 : 다음과 같은 count 값을 증가? 세션 수 또는 고유 IP 수를 기반으로 계산 하시겠습니까? 또는 매번 방문자 당 고유 한 페이지 뷰 수를 계산 하시겠습니까? 기타 – BalusC

답변

2

변경 코드의이 부분 :

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

희망이 도움이

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

으로 이 내 코드입니다.

업데이트 : 그런데 Counter 클래스의 메서드에 대해 더 나은 이름을 선택하는 것이 좋습니다. 먼저 setCounsetCount으로 변경하십시오. 게다가, setter 메소드는 보통 전달 된 값을 연관된 필드에 할당합니다. coun의 값을 증가 시키려면 메소드 이름을 addCount으로 변경하십시오. 에 관계없이 방문한 페이지 1 순 방문자 매번 :

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

많은 도움을 주셔서 감사합니다. – user261002

+0

ur 조언을 주셔서 감사합니다. 축복합니다. – user261002

+0

당신을 환영합니다. :) 그리고 당신의 숙제에 행운을 빈다. :) – 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>