标题:上,下线问题!!
只看楼主
HB515560244
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-10-9
 问题点数:0 回复次数:3 
上,下线问题!!

呵呵,最近好象问了好多的问题哦,那我就再问问哈,别嫌我麻烦哈,呵呵

我就是想在网页上设个session监听器,当用户登陆时,就把该用户信息表中的一个字段"userStatus"设为"在线"
当session过期时就把userStatus"设为"离线",不知道我这样做可不可以,我的代码如下:
登陆的代码:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<base href="<%=basePath%>">

<title>登陆页面</title>

</head>

<body>

<div style="z-index:0;position:absolute;left:420px;top:200px";>
<form action="UserLog_Servlet" method=post name=form id=form onsubmit="return check()">
<table border=1 height="35" width="320" align="center" style="size:12">
<tr>
<td colspan="2" align=center><font color=red>
用户登陆
</font></td>
</tr>
<tr>
<td align=right>
名称:
</td>
<td align=center>
<input type=text name=loginName size=20>
</td>
</tr>
<tr>
<td align=right>密码:</td>
<td align=center><input type=password name=passWord size=20> </td>
</tr>
<tr>
<td colspan="2" align=center>&nbsp;&nbsp;<input type=submit value="登陆">&nbsp;&nbsp;<input type=reset value="重置"></td>
</tr>
</table>
</form>
</div>
</body>
</html>



Servlet如下:
package myServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import myJavaBean.UserInfo_Bean;
import myListener.onLine_Listener;
public class UserLog_Servlet extends HttpServlet {//主要对登陆做处理

/**
*
*/
private static final long serialVersionUID = 4842855968990446843L;

public UserLog_Servlet(){
super();
}

public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=gb2312");
MD5_Encoding md5=new MD5_Encoding();
String LoginName=request.getParameter("loginName");
String PassWord= request.getParameter("passWord");
UserInfo_Bean userBean=new UserInfo_Bean();
UserReg_Form user=userBean.getuser(LoginName,PassWord);//要定义
if (user!=null){
request.getSession(true).setAttribute("loginName", LoginName);
onLine_Listener listener=new onLine_Listener();
listener.setUser(LoginName);
request.getSession(true).setAttribute("list",listener);
request.getSession().setMaxInactiveInterval(10);
try{
request.getRequestDispatcher("index.jsp").forward(request, response);
}catch(Throwable T){
//要写日记
}

}else{
request.setAttribute("errorMsg","名称或是密码错了,请重新输入!");
request.getRequestDispatcher("user/Login.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
doGet( request, response);
}
}



我的UserInfo_Bean 如下:////里面定义了一些数据库操作方法,
package myJavaBean;

import DBHandle.DBConn;

import java.io.UnsupportedEncodingException;
import java.sql.*;
import java.util.*;
import myForm.UserReg_Form;
public class UserInfo_Bean {

Connection conn;
Statement stmt;
ResultSet rs;
String sql=null;

public void statusOnline(String loginName){
try{
conn=DBConn.getconn();//连接数据库的,
stmt=conn.createStatement();
sql="update UserInfo_table set userStatus='在线' where loginName='"+loginName+"'";
stmt.executeUpdate(sql);
}catch(SQLException e){
e.printStackTrace();
}
}
public void statusLeave(String loginName){
try{
conn=DBConn.getconn();
stmt=conn.createStatement();
sql="update UserInfo_table set userStatus='离线' where loginName='"+loginName+"'";
stmt.executeUpdate(sql);
}catch(SQLException e){
e.printStackTrace();
}
}
}

我的Listener如下:////监听器
package myListener;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import DBHandle.DBConn;
import myJavaBean.UserInfo_Bean;
public class onLine_Listener implements HttpSessionListener {

private String user;
private HttpServletRequest request;
UserInfo_Bean userbean=new UserInfo_Bean();
public onLine_Listener(){
user="";
}
public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}

public void sessionCreated(HttpSessionEvent arg0) {
// TODO 自动生成方法存根
user=request.getParameter("loginName");
userbean.statusOnline(user);
System.out.print(user+"上线");
}

public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO 自动生成方法存根
userbean.statusLeave(user);
System.out.print(user+"离线");
}

}

不知道我的这个方法能不能行哦,
哪为大哥我改改啊,先谢谢了,

搜索更多相关主题的帖子: import title 在线 
2007-11-07 15:12
黄袖标
Rank: 4
等 级:贵宾
威 望:13
帖 子:676
专家分:0
注 册:2007-3-22
得分:0 
用session判断的话,session是有时间的,不太准确的说。

我胡汉三又回来啦!物是人非啊,只有静夜思大大还在。
2007-11-07 17:47
hardes
Rank: 1
等 级:新手上路
帖 子:322
专家分:0
注 册:2006-6-3
得分:0 
这问题在好多论坛上都有类似的问题,当用户打开一个网页那么就开始了一段会话,服务器会自动在服务器端给该用户分配一个SessionID和相应资源,当然,是随机产生的,也可以获取该ID值
但是,却不能根据该id值来跟踪用户,通常是将用户数据用session作用域来保存以达到跟踪用户的目的!
直到会话结束服务器才会释放该用户会话时候服务器分配的资源。
会话结束的方式有两种:
1.请求超时(默认时间是18分钟还是多少,具体不记得了),服务器默认的,当请求超时的时候会话结束,服务器会自动释放该用户资源。
2.手动结束会话,调用session的Abandon()方法,手动结束会话.
jsp中可以配置Session的监听来完成,可监听session的状态变化

lz所说完全可以实现,监听写好之后在web.xml中配置下就ok了,相关资料自己查找!!很简单的...


当神已无能为力,就让爷来普度众生吧!
2007-11-07 18:20
黄袖标
Rank: 4
等 级:贵宾
威 望:13
帖 子:676
专家分:0
注 册:2007-3-22
得分:0 
timeout的时间是可以设置的。不过还是觉得不好。

我胡汉三又回来啦!物是人非啊,只有静夜思大大还在。
2007-11-07 18:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184246-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101262 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved