0

各ユーザーがWebサイトにアクセスした回数をカウントしようとしていますが、ユーザー名を変更してもヒットカウントが再開されないという問題があります。また、ウェブページをリロードすると、ユーザーの名前が「null」になります。

<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>
4

2 に答える 2

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);
    }
%>
于 2012-04-11T04:47:00.307 に答える
0

ユーザーごとのヒット数を保存していますか、それともヒット数だけを保存していますか?

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

後者の場合、Web サイトがヒットするたびにカウンターを増やすだけで済みます。

于 2012-04-09T12:00:12.670 に答える