问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java如何统计session访问次数

发布网友 发布时间:2022-04-07 21:51

我来回答

8个回答

懂视网 时间:2022-04-08 02:13

Java代码

  1. package com.lm.org;  
  •   
  • import java.io.IOException;  
  • import java.io.PrintWriter;  
  • import java.sql.Connection;  
  • import java.sql.DriverManager;  
  • import java.sql.PreparedStatement;  
  • import java.sql.ResultSet;  
  • import java.sql.SQLException;  
  •   
  • import javax.servlet.ServletContext;  
  • import javax.servlet.ServletException;  
  • import javax.servlet.http.HttpServlet;  
  • import javax.servlet.http.HttpServletRequest;  
  • import javax.servlet.http.HttpServletResponse;  
  •   
  •   
  • /** 
  • * Servlet implementation class Test 
  • */  
  • public class Test extends HttpServlet {  
  •     private static final long serialVersionUID = 1L;  
  •          
  •     /** 
  •      */  
  •     public Test() {  
  •         super();  
  •     }  
  •   
  •     /** 
  •      */  
  •     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  •         this.doPost(request, response);  
  •           
  •     }  
  •   
  •     /** 
  •      */  
  •     protected void doPost(HttpServletRequest request,  
  •             HttpServletResponse response) throws ServletException, IOException {  
  •         request.setCharacterEncoding("utf-8");  
  •         response.setCharacterEncoding("utf-8");  
  •         PrintWriter out = response.getWriter();  
  •           
  •         //HttpSession session = request.getSession();// 得到session  
  •         //ServletContext application = super.getServletContext();  
  •         //Integer accessCount = (Integer) application.getAttribute("accessCount");//数据库查询出来  
  •           
  •         Integer wiewsCount=null;  
  •         Connection connection = null;  
  •         String sql="select * from t_news where id=1 ";//wiewsCount  
  •         PreparedStatement ps=null;  
  •         ResultSet rs=null;  
  •         try {  
  •               connection=getConnection();  
  •               ps = connection.prepareStatement(sql);  
  •               rs = ps.executeQuery();  
  •               if(rs.next()){  
  •                     wiewsCount = rs.getInt("wiewsCount");  
  •                   if(wiewsCount==null){  
  •                       wiewsCount = 1;  
  •                   }else{  
  •                       wiewsCount = wiewsCount + 1;  
  •                       Connection cn =getConnection();  
  •                       String sql1="update t_news set wiewsCount="+wiewsCount+" where id=1";  
  •                       PreparedStatement prepareStatement = cn.prepareStatement(sql1);  
  •                       int executeUpdate = prepareStatement.executeUpdate();  
  •                       if(executeUpdate>0){  
  •                           System.out.println("1");  
  •                       }else{  
  •                           System.out.println(2);  
  •                       }  
  •                       cn.close();  
  •                       cn=null;  
  •                       prepareStatement.close();  
  •                       prepareStatement=null;  
  •                   }  
  •               }  
  •         } catch (SQLException e) {  
  •             e.printStackTrace();  
  •         }finally{  
  •             try {  
  •                 connection.close();  
  •                 connection=null;  
  •                 ps.close();  
  •                 ps=null;  
  •                 rs.close();  
  •                 rs=null;  
  •             } catch (SQLException e) {  
  •                 e.printStackTrace();  
  •             }  
  •         }  
  •           
  •           
  •         Integer ac;  
  •         try {  
  •             ac = accessCount(request, response);  
  •             out.println("模拟值="+ac+" 数据库值="+wiewsCount);  
  •         } catch (Exception e) {  
  •             e.printStackTrace();  
  •         }  
  •       
  •         out.flush();  
  •         out.close();  
  •       
  •     }  
  •   
  •       
  •     public static Integer accessCount(HttpServletRequest request,HttpServletResponse response)throws Exception{  
  •         HttpServletRequest hs=(HttpServletRequest)request;  
  •         ServletContext application = hs.getServletContext();  
  •         Integer accessCount = (Integer) application.getAttribute("accessCount");//数据库查询出来  
  •           
  •         //if=null  
  •         if (accessCount == null) {  
  •             accessCount = 1;  
  •             application.setAttribute("accessCount", accessCount);  
  •         } else {  
  •             //else +1并修改数据库的值  
  •             accessCount = accessCount + 1;  
  •             application.setAttribute("accessCount", accessCount);  
  •             //update  
  •         }  
  •         return accessCount;  
  •           
  •     }  
  •       
  •     /** 
  •      * @return 
  •      */  
  •     public static Connection getConnection() {  
  •         Connection conn = null;  
  •         try {  
  •             Class.forName(Driver);  
  •             conn = DriverManager.getConnection(Url, UserName, PassWord);  
  •         } catch (Exception e) {  
  •             e.printStackTrace();  
  •         }  
  •         return conn;  
  •     }  
  •     private static String Driver = "com.mysql.jdbc.Driver";// ConfigUtils.getProperty("jdbc.driver");  
  •     private static String Url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";// ConfigUtils.getProperty("jdbc.url");  
  •     private static String UserName = "root";// ConfigUtils.getProperty("jdbc.userName");  
  •     private static String PassWord = "root";// ConfigUtils.getProperty("jdbc.passWord");  
  •   
  • }  
  • 【使用jdbc和servlet实现阅览文章访问次数】

    标签:

    热心网友 时间:2022-04-07 23:21

    1,Session
    在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。

    正在装载数据…… Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
    Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
    对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
    在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
    可以在web.xml文件中配置session默认的超时时间(分钟):

    <session-config>
    <session-timeout>10session-timeout>
    session-config>
    也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
    2,SessionListener
    通过SessionListenr可以监听session的创建和销毁,步骤:
    1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
    2.在web.xml中配置SessionListener:

    <listener>
    <listener-class>MySessionListener类全名listener-class>
    listener>
    当 session被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和 sessionDestroyed()方法,这两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的 getSession()方法获取session对象

    热心网友 时间:2022-04-08 00:39

    当SESSION建立时sessionCreated(),在访问总数和当前在线人数上+1

    当SESSION销毁时sessionDistroyed(),在线人数-1

    核心方法是利用Listener监听的各种接口

    package com.eaie.system;

    import java.io.FileOutputStream;

    import java.io.InputStream;

    import java.io.PrintWriter;

    import java.net.MalformedURLException;

    import java.net.URL;

    import java.util.Enumeration;

    import java.util.Set;

    import javax.servlet.RequestDispatcher;

    import javax.servlet.Servlet;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletContextEvent;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequestEvent;

    import javax.servlet.ServletRequestListener;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpSessionActivationListener;

    import javax.servlet.http.HttpSessionEvent;

    import javax.servlet.http.HttpSessionListener;

    public class SessionListener implements HttpSessionActivationListener,

    HttpSessionListener, ServletContext, ServletRequestListener {

    ServletContext context;

    int onLineUserNum = 0;

    int visitNum = 0;

    HttpServletRequest request;

    public void sessionDidActivate(HttpSessionEvent session) {

    log("seesionDidActive("+session.getSession().getId()+")");

    }

    public void sessionWillPassivate(HttpSessionEvent session) {

    log("seesionWillPassivate("+session.getSession().getId()+")");

    }

    public void sessionCreated(HttpSessionEvent event) {

    onLineUserNum++;

    visitNum ++;

    String ip = request.getRemoteAddr();

    log("sessionCreated('"+event.getSession().getId()+"'),-->IP:"+ip);

    context.setAttribute("onLineUserNum", new Integer(onLineUserNum));

    context.setAttribute("visitNum", new Integer(visitNum));

    }

    public void sessionDestroyed(HttpSessionEvent event) {

    if (onLineUserNum>0){

    onLineUserNum--;

    }

    String ip = request.getRemoteAddr();

    log("sessionDestroyed('"+event.getSession().getId()+"'),-->IP:"+ip);

    context.setAttribute("onLineUserNum", new Integer(onLineUserNum));

    }

    public void contextDestroyed(ServletContextEvent sce){

    log("contextDestroyed-->ServletContext is destroyed");

    this.context = null;

    }

    public void contextInitialized(ServletContextEvent sce){

    this.context = sce.getServletContext();

    log("contextDestroyed-->ServletContext is initialized");

    }

    public int getUserOnline(){

    return this.onLineUserNum;

    }

    public void log(String message) {

    PrintWriter out = null;

    try{

    out = new PrintWriter(new FileOutputStream("c:\\eaieLogger.txt",true));

    out.println(new java.util.Date().toLocaleString()+"::From SessionListener:"+message);

    out.println("Totle visit number:"+this.visitNum+" and current online num: "+onLineUserNum);

    out.println("=================================");

    out.close();

    }catch(Exception e){

    e.printStackTrace();

    out.close();

    }

    }

    public void requestInitialized(ServletRequestEvent event) {

    request = (HttpServletRequest)event.getServletRequest();

    }

    //省略其他方法

    }

    这个程序需要在web.xml中配置:

    <listener>

    <listener-class>com.eaie.system.SessionListener</listener-class>

    </listener>

    热心网友 时间:2022-04-08 02:13

    上面哥们的代码没看全,不过有个问题,你代码里写: visitNum ++
    你这个visitNum如何在jsp页面也就是我们访问的页面中显示出来

    统计session次数,必须要在sevlet里创建session 即request.getSession()
    这个是必须的

    另外一个哥们也说了一种方式,我们可以将visitNum存入servletContext中
    ,然后再jsp页面就可以从application域中取出这个数据
    当然细节方面的话,必须先取,即servletContext.getAttribute("visitNum")
    如果取出的是null,就证明该页面是第一次访问,那么就让次数=1
    如果不是null,就+1

    思路就是这样的

    热心网友 时间:2022-04-08 04:05

    JavaWeb中的Session、SessionListener、在线人数统计
    测试环境:Tomcat 5.0.28
    JavaWeb中的Session
    •在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。
    •Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
    •Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
    •对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
    •在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
    •可以在web.xml文件中配置session默认的超时时间(分钟):
    <session-config>
    <session-timeout>10</session-timeout>
    </session-config>
    也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
    SessionListener
    •通过SessionListenr可以监听session的创建和销毁,步骤:
    1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
    2.在web.xml中配置SessionListener:
    <listener>
    <listener-class>MySessionListener类全名</listener-class>
    </listener>
    •当session 被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法,这 两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的getSession()方法获取session对象。
    应用:在线人数统计
    import java.util.HashSet;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;

    public class MySessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
    HttpSession session = event.getSession();
    ServletContext application = session.getServletContext();

    // 在application范围由一个HashSet集保存所有的session
    HashSet sessions = (HashSet) application.getAttribute("sessions");
    if (sessions == null) {
    sessions = new HashSet();
    application.setAttribute("sessions", sessions);
    }

    // 新创建的session均添加到HashSet集中
    sessions.add(session);
    // 可以在别处从application范围中取出sessions集合
    // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
    }

    public void sessionDestroyed(HttpSessionEvent event) {
    HttpSession session = event.getSession();
    ServletContext application = session.getServletContext();
    HashSet sessions = (HashSet) application.getAttribute("sessions");

    // 销毁的session均从HashSet集中移除
    sessions.remove(session);
    }
    }

    热心网友 时间:2022-04-08 06:13

    简单写,使用session的isNew()方法判断当前连接是否是新的session,如果是的话,就增加1并通过application中保存。
    ps:先要从application中读取记录,然后判断,最后保存。

    热心网友 时间:2022-04-08 08:37

    HttpSession session=request.getSession();
    session.setAttribute(key,value);//设置session

    HttpSession session=request.getSession();
    session.getAttribute(key);//获取Session

    热心网友 时间:2022-04-08 11:19

    推荐看下http://bei-jin-520.javaeye.com/blog/332609
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    如何为职务侵占罪进行辩护 职务侵占如何辩护 职务侵占罪有效辩护点有哪些 miui11开发者选项在哪_小米miui11开发者选项在哪 查询考研成绩需要什么 考研查分前要做什么 考研查询需要什么证件 研究生什么专业好 什么专业的研究生最好 考研究生什么专业好 国庆节、中秋节的活动记录怎么写 教师是多少岁退休? 教师退休年龄最新规定 网站建设报价多少? 华为荣耀v8能只换外屏“玻璃”,不换屏幕总成吗?大概需要多少钱? 荣耀v8外屏碎了,换个外屏多少钱 求大神解急。华为荣耀v8手机玻璃屏幕爆了。可以只换玻璃外屏吗?要多少钱? 荣耀v8手机屏幕碎了怎么办?只是碎了外屏 荣耀V8可以换外屏吗 荣耀v8屏幕进水了怎么换? 华为荣耀v8玻璃外屏碎了。可以只换外屏吗?不换其他的?需要多少钱 华为荣耀v8怎么换外屏 华为V8外屏碎了,能只换外屏,不换内屏吗 增氧泵的用途 渔尔交直流两用增氧泵压力小是什么原因? IPhone8P怎么录制Siri命令? 鱼缸增氧泵,日胜rs9000,海利UAS12000那个好,忽略价格?? 迷你带充电功能的增氧泵,你见过内部结构吗。头回见拆机看看 85w的增氧泵分成8孔就相当于每条10w 格池小绵羊两用增氧泵排气量不足怎么回事 信用卡逾期了还不上该怎么办 是不是要开通看点号才能推荐到QQ看点 快看点怎么申请账号? 唱歌技巧推荐 唱歌方法和技巧有哪些? 哪家在线客服平台专业? 乐清哪里有兼职工作??? 在乐清有何兼职可做呢~要晚上的哦! 毛坦厂万人送考是怎样的场景? 哪款在线客服系统比较好用! 有在乐清的朋友吗?请问下乐清乐成哪里有晚上兼职的工作吗? 乐清虹桥哪里有兼职的晚上 企业QQ、TQ、网客宝、5107、live800这几种在线客服平台谁能客观的比较一下呀? 乐清或柳市有什么晚上5点以后兼职的工作? 乐清虹桥晚上哪里要兼职啊 qq好友删除了怎么查聊天记录 浙江乐清一小学老师做微商被立案查处,为什么老师不能做生意? 在线客服系统的作用是什么? 在乐清乐成镇晚上有没有什么兼职可以做 乐清或者柳市有没有简单的兼职工作?