您的位置:首页 > 其它

在线用户和访问记录管理项目(需求部分)

2017-04-24 13:53 162 查看
涉及到的技术有:j2se,html,css,js,jq,ajax,jsp,serlvet,listener,mysql等技术

开始项目之前需要准备好的东西:

Visitor数据库

1.用户表(users)

序号(id),用户名(username),密码(pwd)

2.到访用户表(visitors)

序号(id),用户ID(userid),到访时间(visittime),离开时间(lefttime),IP地址(ip),来自的页面(comefrom)

3.访问记录表(history)

序号(ID),到访ID(visitid),访问时间(visittime),访问页面(url)

下面介绍需求:

在线用户网站监控开发项目实战开发01

下载好mysql驱动程序以及jquery的库文件

1.新建一个web项目Test4

2.将mysql的驱动程序放在Test4项目的web-inf的lib项目(因为我要使用数据库)

3.使用dw新建一个站点,目录就是Test4的webContent的根目录,在其根目录下新建一个jilib的文件夹,用来存放jquery的库文件

4.新建一个server配置,准备在这个server配置中来配置数据源

新建server配置在:windows->Preferrences->server->add->添加server即可(选择自己电脑带有的服务器版本),配置数据源就是在servers中的contex.xml中把以前经常用的连接数据库的代码写进去,类似于这样

<?xml version="1.0" encoding="UTF-8"?>

<Context>

<Resource

name = "mytest"      //取得名字,名字可以随便取,但是在在DbLib中连接数据库的时候连接池的名字要与其相同

type = "javax.sql.DataSource"

maxActive = "100"

maxIdle = "30"

maxWait = "5000"

username = "root"

password = "621366"

driveClassName = "com.mysql.jdbc.Driver"

url = "jdbc:mysql://127.0.0.1:3306"

/>

  

</Context>

5.建立一个类为DbLib,用来返回一个已经设置好的数据连接

新建一个getConnection的函数用来返回一个一级设置好的数据连接

在线用户网站监控开发项目实战开发02

/*1.创建数据库*/

drop database if exists Visitor;

create database Visitor;

/*2.创建表 users*/

use Visitor;

create table users

(

  `ID` int(4) not null  auto_increment,

  `UserName` varchar(100),

  `Pwd` varchar(50),

   primary key(ID)

);

/*3.创建编vistor*/

create table visitors

(

  `ID` int(4) not null auto_increment,

  `UserID` int(4),

  `VisitTime` datetime,

  `leftTime` datetime,

  `ip` varchar(50),

  `comefrom` varchar(100),

   primary key(ID)

);

create table history

(

   `ID` int(4) not null auto_increment,

   `VisitID`  int(4),

   `VisitTime` datetime,

   `Url` varchar(200),

   primary key(ID)

);

/*4.为users表添加3个初始用户*/

insert into users(username,pwd) values("张三","12345678");

insert into users(username,pwd) values("李四","87654321");

insert into users(username,pwd) values("王五","abcdefg");

注意:DATETIME 类型可用于需要同时包含日期和时间信息的值,DATE类型

可用于需要一个日期值而不需要时间部分时.

timestamp:意思为系统自动的更新
f99b
时间戳!

在线用户网站监控开发项目实战开发03

这次我们要做的是:

1 创建一个初始化数据库的类(InitDB),这个类中有一个初始化数据的方法即为initialize()的这个方法,这个方法会调用到之前的DbLib这个类中的getConnection()的这个方法,是来实现数据库的链接的,而类(InitDB)中的这个initialize()方法也是用来接受脚本文件init.sql来作为参数的,因为脚本文件init.sql有初始化数据库的代码!

脚本文件即为(scriptFile),在这个项目中是init.sql,到时候再servlet中把init.sql传过去即可!

2.

因为一个类中的一个方法不可能直接在页面上来调用,所以我们需要创建一个jsp或者servlet来调用数据库初始化类中的方法,在本项目中,做一个serlvet来调用。servlet和jsp最大的区别,就是servlet是没有用户界面的!

3.编写一个页面(InitIt.jsp),来调用servlet(InitIt.java)

总体的思路:在InitDB里面创建一个initialize(),用来初始化数据库,然后新建一个servlet和jsp,servlet调用InitDB中的initialize()方法,然后新建的这个jsp通过dopost的方法与servlet取得联系,通过回调函数将打印信息放到info这个id上,然后用html()的方法显示出来即可!

在这里注意:设置编码格式的时候我们打印信息就用response来设置编码格式,如果是提取信息的haunted,那就用request来提取信息!

在线用户网站监控开发项目实战开发04

这次我们要做的是:

显示在线用户的信息和访客

在线用户的信息从application(SerlvetContext)中来提取

在这个项目中即为:application.getAttribute("online");

访客的信息:包含了在线用户和不在线用户.

做一个页面online.jsp来显示在线用户

做一个页面visitor.jsp来显示历史访客

在线用户网站监控开发项目实战开发05

我们这次的主要目的是来实现online.jsp和visitor.jsp的功能

注意:url 离开时间没有的话,那么就设置为空的,不要显示null

记录用户在网站上的访问轨迹

访问记录表(history)

做一个history.java的javaBean和historyDAO   和之前的visitor.java  visitorDAO 是差不多的

序号(ID) 到访ID(visitID) 访问时间(visitime) 访问的页面(url)

下面讲解一下三大监听器:

ServletRequestListener 监听访问网页的情况(什么时候开始请求一个网页,什么时候请求结束,中间的时间间隔是服务器处理请求的时间)

HttpSessionListener  监听访客什么时候来,什么时候走

ServletContextListener 监听服务器什么时候启动,什么时候停止

 

在线用户网站监控开发项目实战开发06

记录用户在网站上的访问轨迹

访问记录表(history)

做一个history.java的javaBean和historyDAO   和之前的visitor.java  visitorDAO 是差不多的

序号(ID) 到访ID(visitID) 访问时间(visitime) 访问的页面(url)

下面讲解一下三大监听器:

ServletRequestListener 监听访问网页的情况(什么时候开始请求一个网页,什么时候请求结束,中间的时间间隔是服务器处理请求的时间)

HttpSessionListener  监听访客什么时候来,什么时候走

ServletContextListener 监听服务器什么时候启动,什么时候停止

 

在线用户网站监控开发项目实战开发07

接下来我们要做用户的登陆功能:

1.建立一个User的JavaBean,建一个UserDAO,提供验证用户名密码的方法

2.建一个login.jsp页面,提供用户输入用户名的密码,在main.jsp页面上添加用户登陆按钮,链接到login.jsp页面

3.点击登陆,调用一个servlet,serlvet判断用户名和密码是否正确

 如果不正确,返回login.jsp页面,让用户继续登录

  

 如果正确,需要修改在线用户和历史访客表,把已登录的用户的信息记录进去

注意事项:

1.启动时报空指针错误,停止服务器,重启就好了!

2.时间显示保存或显示不对的问题,需要用到timestamp相关的函数

3.将session过期的时间设置成10秒钟,切记不要操作页面,等待过期时间

4.还有一种报空指针错误,那就是服务器启动的时候没有生成request就调用了request,那么我们不用request,用arg0去获取相应的对象就可以了

5.(重点)读取数据库卡死的问题(也就是点击按钮点几下就会出现缓冲的现象,而且加载不出来)

这是因为链接自动回收的时间太长,需要手动关闭链接

我们这么来做:

if(conn.isClosed())

{

   

 conn = DbLib.getConnection(); 

}

在一个方法return 之前再写上conn.close();即可

在线用户网站监控开发项目实战开发08

这次我们要处理的是登录的serlvet

在此之前引入一个非常重要的东西:

引用:理解成地址信息,可以对程序进行优化

例如:map的一个属性变换了的话,那么不需要重新再把改变的Map写入user(例子)中,因为其实已经改变了,这样就可以来优化代码!

这个引用发常重要,可以优化代码!

下面就来处理登录的serlvet:

步骤:

1.从jsp接受用户名和密码

2.调用UserDAO中的isUserValid方法,判断用户的合法性

3.如果用户名密码不正确,转向login.jsp

4.如果用户名和密码正确

  (***)先不处理重复登录的问题,后面再来修改

  a.修改在线用户表中的当前用户,将当前用户的userid写入;

  

  b.修改历史访客表中的当前用户,将当前用户的userid写入

5.在这里特别需要注意到的是:
if (v.getLeftTime() == null) {
ps.setTimestamp(1, null);
} else {
ps.setTimestamp(1, new Timestamp(v.getLeftTime().getTime()));
}

要判断是否离开时间为空,不判断的话,那么直接用v.getLeftTime.getTime()就会报错!

在线用户网站监控开发项目实战开发09

1.处理用户的重复登录现象:

我们通过判断用户的用户名来得到是否为重复登录

细节方面:我们通过用的用户名去得到用户的id,然后通过即将输入的用户的id和当前的用户去比较,看是否相同

这里面的处理需要一个:Serlvet

2.实现用户访问记录分页处理

分页的实现方式和数据库有关

sql语句:

在mysql用limit(我们采用的就是这种,mysql隶属于oralce公司)

在sql server用top(微软开发的)

在oralce用rownum

下面讲解一些limit在mysql中语法:

select *from mytable limit 0,10;///从0开始提取10条数据

select *from mytable limit 10,10;//从10开始提取10条数据

eg:sql = "select *from history limit "+(pageNo-1)*pageSize+","+pageSize;

分页工作内容分两部分:

1.分页导航的显示

2.根据当前页码提取数据

在这里:我们也需要用到一个serlvet来处理上一页和下一页的逻辑运算

注意到:访问记录每运行一次就会访问一次,所以总的页数会随之增加

好了这些就是我做项目的笔记!下面的一篇博客将提供每一块的具体代码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: