现在的位置: 首页 > 综合 > 正文

【Jsp】利用Application对象实现访问人数统计功能

2018年05月06日 ⁄ 综合 ⁄ 共 2557字 ⁄ 字号 评论关闭

利用Application对象实现访问人数的统计很常见,但是一些书籍讲解这一技术的时候,往往没有做完整。一旦服务器重启,由于Application会被销毁,重新建立,人数统计则会再一次从零开始。解决方法,个人认为,应该同时利用到数据库,这样无论服务器要重启或者遭遇到停机什么,被统计的人数还是会一直累计上去,不会丢失。下面就介绍一个例子,解决利用Application对象实现访问人数统计功能由于服务器重启或者停机而导致从零开始的问题,同时介绍如果利用Application对象把保存到web.xml的致命的数据库信息取出来,不但解决安全性问题,而且是一个全局变量,不用每次连接数据库,都写一串长长的数据。

一、基本目标

统计一个页面的访问人数,而且这个访问人数,在服务器重启之后不会丢失。

二、基本准备

在Mysql中的test数据库建立一张visitcount的表,里面没有主键,就一列,也就是说就一个属性,visitCount,不自增,默认值为0,当然不设置默认值也可以。类型是整形。

在网站的工程目录的lib文件夹下,放入数据库驱动,配置数据源,也就是放入一个mysql-connector-java-5.1.32.jar,这东西版本号不用管,网上搜一下就有。网站目录结构如下图:

在web.xml里面加入如下片段,或者直接就写出这样的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<context-param>
		<param-name>url</param-name>
		<param-value>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;useOldAliasMetadataBehavior=true</param-value>
	</context-param>
	<context-param>
		<param-name>user</param-name>
		<param-value>root</param-value>
	</context-param>
	<context-param>
		<param-name>pwd</param-name>
		<param-value>root</param-value>
	</context-param>
</web-app>

这样,以后,url,user,root就是我们连接数据库的全局变量了,至于Jsp如何连接数据库,可以参考我之前的《【Mysql】Java中对Mysql数据库的增删改查、Java的System类》(点击打开链接

整个网站工程的所有页面,利用application.getInitParameter("");方法一取就可以去到这些全局变量了。这里值得注意的是,原本的&号,必须写成转义字符&amp;否则web.xml会把&当作一个编译符号,整个网络工程无法在tomcat服务器中启动。

三、制作过程

在index.jsp写入如下的代码,则可以完成了,注意在开头引入相应的java包,同时把网站编码改成utf-8。

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>index</title>
</head>
<body>
<%
//取出web.xml中的全局变量
String url=application.getInitParameter("url");
String user=application.getInitParameter("user");
String pwd=application.getInitParameter("pwd");
//连接数据库,把访问人数+1
String sql = null;
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(url,user,pwd);
sql = "update visitcount set visitCount=visitCount+1";
con.createStatement().execute(sql);
sql = "select visitCount from visitcount";
ResultSet rs=con.prepareStatement(sql).executeQuery();
//这里由于整个数据库表只有一行,所以无需用到while循环来取
//只需要把指向第0行的游标向下移一个位置就可以了
rs.next();
//把这个变量写到application
application.setAttribute("counter",String.valueOf(rs.getInt("visitCount")));
//再把这个变量取出来,让访问网站的所有人看到
out.print("你是第"+application.getAttribute("counter")+"个访问本站的人!"); 
%>
</body>
</html>

抱歉!评论已关闭.