0

jspに次のコードがあります

<table>
    <c:forEach var="link" items="${weblinks}">
        <c:if test="${link.featured}">
            <tr>
                <td>
                    <span>${link.title} (Hits : ${link.numOfHits})
                        </span>

                    <span>
                        <a href="<c:url value='${link.url}'/>">${link.url}  </a></span><br></td>
            </tr>
        </c:if>
    </c:forEach>
</table>

ユーザーがリンクをクリックするとリンクが開き、リンクのURLもサーブレットに移動するようになりました。私は最初の機能を達成しましたが、ヒット数を更新できるようにサーブレットで URL を取得するにはどうすればよいですか? データベースでウェブサイトのリンクが受信されましたか?

私を助けてください。私はグーグルでそれを持っていますが、答えが得られません。JavaScript を使用している場合は、Java スクリプト コードについても説明してください。

4

3 に答える 3

1

アップデート

<a href="<c:url value='${link.url}'>
<c:param name="hits" value="${link.numOfHits}"/></c:url>">${link.url}  </a>

これにより、ヒット数の値を持つヒット数のパラメーターを持つクエリ文字列が追加されます

サーブレットではrequest.getParameter("hits")、サーブレットのヒット数を取得します

http://www.roseindia.net/jsp/simple-jsp-example/JSTLConstructingURLs.shtmlを参照してください。

お役に立てれば

于 2013-02-13T05:47:49.450 に答える
0

リンクがどのように作成されているかはわかりませんが、サーブレットに対して GET リクエストを行うようです。これを認識して、各サーブレットはページのカウンター ヒットを管理する必要があります。この値はすべてのユーザーに知られている必要があるため、要求やセッションではなくアプリケーション スコープに保存するのが最善です。詳細はこちらおよびサーブレットはどのように機能しますか? インスタンス化、セッション、共有変数、マルチスレッド

単一リンクのカウンターを処理する jsp とサーブレットのサンプルを投稿します。リンクの処理にも使用できるはずです。

index.jsp (<head>やのような他の要素<html>は、この例では価値がありません)

<body>
    Hit the button to add a value to the application counter
    <br />
    <form action="HitCounterServlet" method="GET">
        <input type="submit" value="Add counter hit" />
    </form>
    <br />
    Total hits: ${applicationScope['counter']}
</body>

HitCounterサーブレット

@WebServlet(name = "HitCounterServlet", urlPatterns = {"/HitCounterServlet"})
public class HitCounterServlet extends HttpServlet {

    private static final Object counterLock = new Object();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext context = request.getServletContext();
        updateHitCounter(context);
        String originalURL = "index.jsp";
        //in case you want to use forwarding
        //request.getRequestDispatcher(originalURL).forward(request, response);
        //in case you want to use redirect
        response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/" + originalURL));
    }

    private void updateHitCounter(ServletContext context) {
        //since more than a request can try to update the counter
        //you should protect the update using a synchronized block code
        synchronized(counterLock) {
            Integer counter = (Integer)context.getAttribute("counter");
            if (counter == null) {
                counter = 0;
            }
            counter++;
            context.setAttribute("counter", counter);
        }
    }
}

さまざまなブラウザーでこれを試してみると、カウンターがどのように同じ状態を維持しているかがわかります。


カウンター ヒットをデータベースに保存するには、データベースにupdateHitCounter接続するコードの関数内のコードを変更し、データベース フィールドに対して update ステートメントを実行するだけです。

于 2013-02-13T06:28:15.790 に答える
-1

Cookieを使用して、ページヒット数を記録できます。

コード:

<%@ page import="java.io.*,java.util.*" %>
<%
   // Get session creation time.
   Date createTime = new Date(session.getCreationTime());
   // Get last access time of this web page.
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "Welcome Back to my website";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // Check if this is new comer on your web page.
   if (session.isNew()){
      title = "Welcome Guest";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } 
   visitCount = (Integer)session.getAttribute(visitCountKey;
   visitCount = visitCount + 1;
   userID = (String)session.getAttribute(userIDKey);
   session.setAttribute(visitCountKey,  visitCount);
%>
<html>
<head>
<title>Session Tracking</title>
</head>
<body>
<center>
<h1>Session Tracking</h1>
</center>
<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session info</th>
   <th>Value</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>Creation Time</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>Time of Last Access</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>User ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>Number of visits</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

または、Application Implicitオブジェクトと関連するメソッドgetAttribute()およびsetAttribute()を使用するヒットカウンターを実装できます。

<%
    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);
%>
<center>
<p>Total number of visits: <%= hitsCount%></p>

お役に立てれば..

于 2013-02-13T03:41:40.840 に答える