2012-04-08 8 views
0

各ユーザーがWebサイトに何回入力したかを調べようとしていますが、ユーザー名を変更してもヒット数が再開しないという問題があります。また、Webページをリロードすると、ユーザーの名前は「null」になります。JSPユーザーヒットカウンタ

<HTML> 
<BODY> 
<FORM METHOD=POST ACTION="SaveName.jsp"> 
Who are You ? <INPUT TYPE=TEXT NAME=username SIZE=20> 
<P><INPUT TYPE=SUBMIT> 
</FORM> 
</BODY> 
</HTML> 

<%@ page import="java.io.*,java.util.*" %> 
<html> 
<head> 
<title>Applcation object in JSP</title> 
</head> 
<body> 
<% 
    String name = request.getParameter("username"); 
    session.setAttribute("theName", name); 
    Integer hitsCount = 
    (Integer)application.getAttribute("hitCounter"); 
    if(hitsCount ==null || hitsCount == 0){ 
    /* First visit */ 
    out.println("Welcome to my website! "); 

    hitsCount = 1; 
}else{ 
    /* return visit */ 
    out.println("Welcome back to my website!"); 
    hitsCount += 1; 
} 
application.setAttribute("hitCounter", hitsCount); 
%> 
<%= session.getAttribute("theName") %> 
<br>Total number of visits: <%= hitsCount%></br> 
</body> 
</html> 
+0

あなたが何をしたいのか、いくつかの混乱はありますか?各ユーザーのヒット数を求めますか? –

+0

はい私は各ユーザーのヒット数が欲しい – toky

答えて

0

ユーザーあたりのヒット数を格納しているか、ヒット数だけを格納していますか?

前者の場合、マップ内に特定のユーザーのエントリがあるかどうかを確認するマップを使用できます。エントリが見つかった場合は、エントリが見つからない場合はカウンタを1増やし、新しいエントリを作成して対応するカウンタを1に設定します。

後で行う場合は、毎回カウンタを増やすだけですウェブサイトがヒットしました。

1
あなたのJSPで

<%! 
Map<String,Integer> userCountMap = new HashMap<String,Integer>(); 
Integer hitsCount=0; 
String key; 
%> 


<% 
    String name = request.getParameter("username"); 
    if(name!=null && !"".equals(name)){ 
     key=name.toLowerCase(); 
     if(userCountMap.get(key)!=null){ 
      /* return visit */ 
      out.println("<h3>"+name+"</h3>&nbsp;Welcome back to my website!"); 
      hitsCount = userCountMap.get(key); 
      hitsCount+=1; 

     }else{ 
      out.println("<h3>"+name+"</h3>&nbsp;Welcome to my website!"); 
      hitsCount=1; 
     } 
     userCountMap.put(key, hitsCount); 
    } 
%>