0

これは、セッションを作成し、その現在のセッションへのaccessCountを格納するサーブレットです。

@WebServlet("/ShowSession.do")
public class ShowSession extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        HttpSession session = request.getSession();

        String header;
        Integer accessCount  = (Integer)request.getAttribute("accessCount");

        if(accessCount == null){
            accessCount = new Integer(0);
            header = "Welcome New Comer";
        }else{
            header = "Welcome Back!";
            accessCount = new Integer(accessCount.intValue() + 1 );
        }

        //Integer is immutable data structure. so we cannot
        //modify the old one in-place,Instead, you have to
        //allocate a new one and redo setAttribute
        session.setAttribute("accessCount", accessCount);
        session.setAttribute("heading", header);
        RequestDispatcher view = getServletContext().getRequestDispatcher("/showsession.jsp");
        view.forward(request, response);
    }
}

そして、これはそのセッションの内容を印刷するビューです

<body>
    <%
        HttpSession clientSession = request.getSession();
        String heading = (String) clientSession.getAttribute("heading");
        Integer accessCount = (Integer) clientSession
                .getAttribute("accessCount");
    %>
    <h1>
        <center>
            <b><%=heading%></b>
        </center>
    </h1>
    <table>
        <tr>
            <th>Info type</th>
            <th>Value</th>
        <tr>
        <tr>
            <td>ID</td>
            <td><%=clientSession.getId()%></td>
        </tr>
        <tr>
            <td>Creation Time</td>
            <td><%=new Date(clientSession.getCreationTime())%></td>
        </tr>
        <tr>
            <td>Time of last Access</td>
            <td><%=new Date(clientSession.getLastAccessedTime())%></td>
        </tr>
        <tr>
            <td>Number OF Access</td>
            <td><%=accessCount%></td>
        </tr>
    </table>
</body>

問題は、すでに何度もアクセスしているにもかかわらず、accessCount==0を返すことです。

localhost:8080 / someFolderName/ShowSession.doでアクセスしています

4

1 に答える 1

1

accessCountリクエストから初期値を取得しています。セッションから確認してください。

//Bad!
Integer accessCount  = (Integer)request.getAttribute("accessCount");
//Good (maybe)
Integer accessCount  = (Integer)session.getAttribute("accessCount");
于 2012-10-02T02:01:24.777 に答える