2015-01-13 2 views
1

안녕하세요. 얼마나 많은 사용자가 사용하고 있는지 추적하는 기능을 웹 응용 프로그램에 추가하려고합니다. 나는 그것을 구현하려했지만 지금까지 결과가 없다. 인쇄기는 "1 user"로되어 있지만 "0"을 출력합니다. 나는 자바와 서블릿이 처음이다. 모든 도움을 주시면 감사하겠습니다. 여기세션 사용자 카운터가 작동하지 않습니다.

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class SessionCounterListener implements HttpSessionListener { 

private int users = 0; 

public int getTotalUsers() { 
    return (users); 
} 

@Override 
public void sessionCreated(HttpSessionEvent s) { 

    if (users <= 0) { 
     users++; 
     System.out.println("Session created"); 
    } 

    } 

@Override 
public void sessionDestroyed(HttpSessionEvent s) { 

    if (users > 0) { 
     users--; 
     System.out.println("Session destroyed."); 
    } 

    } 
    } 

브라우저에서 사용자 데이터를 표시하도록되어 내 서블릿에서 코드입니다 :

여기 내 SessionCounter 클래스 여기

public class ServletProjekt extends HttpServlet { 
private static final long serialVersionUID = 1L; 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 


    int requests = 0; 

    String firstName = request.getParameter("förnamn"); 
    String lastName = request.getParameter("efternamn"); 
    String address = request.getParameter("address"); 
    String email = request.getParameter("email"); 
    String howoften = request.getParameter("howoften"); 
    String newsabout = request.getParameter("news"); 
    String[] age = request.getParameterValues("age"); 

    requests++; 
    request.getServletContext().log("Added a new request-log//."); 

    // servern skapar objektet, inte vi. 
    HttpSession session = request.getSession(); 
    session.setAttribute("förnamn", firstName); 
    session.setAttribute("efternamn", lastName); 
    session.setAttribute("address", address); 
    session.setAttribute("email", email); 
    session.setAttribute("howoften", howoften); 
    session.setAttribute("news", newsabout); 
    session.setAttribute("age", age); 

     session.invalidate(); //sessionDestroyed() is executed 


    Cookie firstname = new Cookie ("firstname", firstName); 
    Cookie lastname = new Cookie ("lastname", lastName); 
    Cookie Address = new Cookie ("Address", address); 
    Cookie mail = new Cookie ("mail", email); 
    Cookie HowOften = new Cookie ("HowOften?", howoften); 
    Cookie news = new Cookie ("news", newsabout); 

    firstname.setMaxAge(60 * 60 * 24); 
    lastname.setMaxAge(60 * 60 * 24); 
    Address.setMaxAge(60 * 60 * 24); 
    mail.setMaxAge(60 * 60 * 24); 
    HowOften.setMaxAge(60 * 60 * 24); 
    news.setMaxAge(60 * 60 * 24); 

    response.addCookie(firstname); 
    response.addCookie(lastname); 
    response.addCookie(Address); 
    response.addCookie(mail); 
    response.addCookie(HowOften); 
    response.addCookie(news); 


    SessionCounterListener scl = new SessionCounterListener(); 


     response.setContentType("text/html"); 
     PrintWriter printWriter = response.getWriter(); 
     printWriter.write("<html>"); 
     printWriter.write("<h1> THANK YOU FOR YOUR INFORMATION</h1>"); 
     printWriter.write("<body>"); 
     printWriter.write("<p>Your name:</p>" + firstName); 
     printWriter.write("<br>"); 
     printWriter.write("<p>Your last name:</p>" +lastName + "<br>"); 
     printWriter.write("<p>Your address:</p>" +address + "<br>"); 
     printWriter.write("<p>Your choice of often:</p>" +howoften + "<br>"); 
     printWriter.write("<p>Your choice of news:</p>" +newsabout + "<br>"); 
     printWriter.write("<p>Your email:</p>" +email + "<br>"); 
     printWriter.write("<p>Request number:</p>" +requests + "<br>"); 
     printWriter.write("Active users:" + scl.getTotalUsers() + "<br>"); 
     printWriter.write("");  



     for (String ages : age) { 
      printWriter.write("<p>Hours:</p>" +ages + "<br>"); 
     } 

     printWriter.write("<a href =\"GetAllCookies\">View All Cookies</a>"); 



     printWriter.write("</body>"); 
     printWriter.write("</html>"); 
     printWriter.close(); 

} 

} 

그리고 내 웹입니다. xml :

<web-app > 
    <listener> 
    <listener-class>SessionCounterListener</listener-class> 
    </listener> 
    </web-app> 
+0

실제로 서블릿에 세션을 만드시겠습니까? – Henry

+0

@Henry 내 모든 코드를 표시하지 않는 것은 어리석은 짓이었습니다. 내 질문을 업데이트했습니다. 감사. – JMan

+0

다른 사람을 도울 수 있습니까? – JMan

답변

0

아래의 ServletProjektSessionCounterListener 클래스의 문제가 있습니다.

SessionCounterListener 클래스를 다음과 같이 변경하십시오 (). 각 사용자 요청에 대해 생성되는이 수신기 클래스의 객체를 생성하므로 각 사용자는 자신의 사용자 속성을 갖게되므로 총 사용자를 얻지 못합니다 .) 참고 user 변수와 getTotalUsers 메서드를 모두 static으로 변경했습니다.

import javax.servlet.http.HttpSessionEvent;  
    import javax.servlet.http.HttpSessionListener; 

    public class SessionCounterListener implements HttpSessionListener { 
    private static int users = 0; 
    public static int getTotalUsers() { 
     return users; 
    } 
    @Override 
    public void sessionCreated(HttpSessionEvent s) { 
      users++; 
      System.out.println("Session created"); 
    } 
    @Override 
    public void sessionDestroyed(HttpSessionEvent s) { 
      users--; 
      System.out.println("Session destroyed."); 
    } 
} 

2.I는

HttpSession session = request.getSession(); 

그래서 당신은, 당신의 ServletProjekt 클래스의 라인 아래에있는 세션을 유지 작성중인 때문에 같은 page.You에서 세션을 파괴의 목적을 이해하지 않는다 사용자에 대해 생성 된 세션이며 sessionCreated()이 호출되므로 user는 으로 증가합니다.

이 줄 뒤에 세션 범위에 몇 가지 특성을 추가하고 있습니다.

그런 다음 sessionDestroyed()0invalidate에서 호출 session.invalidate();

이제 사용자가 될 것 세션을 무효화 한().

SessionCounterListener 클래스를 사용하여 활성 사용자를 인쇄하면이 경우 이됩니다. 당신은 당신이 단지에 getTotalUsers()를 호출하여 전체 사용자를 계산할 수 있도록 SessionCounterListener 클래스의 객체를 생성해야합니까 단계 (1) 변경 후

printWriter.write("Active users:" + scl.getTotalUsers() + "<br>"); 

.

SessionCounterListener.getTotalUsers(); 
관련 문제