注册 登录
编程论坛 J2EE论坛

上,下线问题!!

HB515560244 发布于 2007-11-07 15:12, 709 次点击

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

我就是想在网页上设个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+"离线");
}

}

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

3 回复
#2
黄袖标2007-11-07 17:47
用session判断的话,session是有时间的,不太准确的说。
#3
hardes2007-11-07 18:20
这问题在好多论坛上都有类似的问题,当用户打开一个网页那么就开始了一段会话,服务器会自动在服务器端给该用户分配一个SessionID和相应资源,当然,是随机产生的,也可以获取该ID值
但是,却不能根据该id值来跟踪用户,通常是将用户数据用session作用域来保存以达到跟踪用户的目的!
直到会话结束服务器才会释放该用户会话时候服务器分配的资源。
会话结束的方式有两种:
1.请求超时(默认时间是18分钟还是多少,具体不记得了),服务器默认的,当请求超时的时候会话结束,服务器会自动释放该用户资源。
2.手动结束会话,调用session的Abandon()方法,手动结束会话.
jsp中可以配置Session的监听来完成,可监听session的状态变化

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

#4
黄袖标2007-11-07 18:26
timeout的时间是可以设置的。不过还是觉得不好。
1