java如何统计session访问次数
发布网友
发布时间:2022-04-07 21:51
我来回答
共8个回答
懂视网
时间:2022-04-08 02:13
Java代码
- 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