📄 pointratechannel.java
字号:
/*
*
*/
import java.io.*;
import java.text.*;
import java.util.*;
import java.sql.*;
import javax.servlet .http .HttpServletRequest ;
import javax.servlet .http .Cookie ;
import javax.servlet .http .HttpServletResponse;
/**
* PointRateChannel 点击率统计
*
* @author Zhu Jian Min
2000.8.22
*/
public class PointRateChannel
{
public void makePointRate(Person p,HtmlOut desHtml, String time,String type,String keyword){
//此函数用于将access.log分析成多个数组,然后将数组放到PointClass.java中
String sFile = "c:"+File.separatorChar +"access.log"; //文件
String IPAddress;//IP地址
String VisterDate;//访问时间
String VisterMethod;//访问方法
String WebPage;//所访问的页面
String EveryPage[];// 每次访问某个页面为一个大的数组
String IPAddressB[];//粗略的IP地址
String VisterDateB[];//粗略的访问时间
String WebPageB[];//粗略的所访问的页面
int Nsum=100000;
EveryPage=new String[Nsum];
IPAddressB=new String[Nsum];
VisterDateB=new String[Nsum];
WebPageB=new String[Nsum];
File file;
file=new File(sFile);
long length=file.length();//读出文件的长度
FileReader freader;//读取文件
// 将模板文件读到 templateContents 中
try
{
freader = new FileReader(sFile);
}catch(FileNotFoundException e)
{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","不能读取文件","Login");
return ;
}
char[] contents = new char[2000000];
int nSize = 0;
try
{
nSize = freader.read(contents,0,2000000);
freader.close ();
}catch(Exception e)
{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","不能读取文件","Login");
return ;
}
String templateContents = new String(contents,0,nSize); //将文件读到字串中
//下面是用拆分法将templateContents分析成想要的数组
int nBegin=0 ,nEnd=1 ,i=0;
PointClass pointClass;
pointClass=new PointClass();
while(nBegin<length){//读取文件分为数组
nEnd = templateContents.indexOf("\n",nBegin);//回车
if(nEnd == -1)//文件是否结束,如果结束则跳出
break;
EveryPage[i] = templateContents.substring (nBegin,nEnd);
pointClass.SetEveryPage(i,EveryPage[i]);
//desHtml.addString(EveryPage[i]);
//desHtml.addString("<p></p>");
int SubBegin=0,SubEnd;
SubEnd=EveryPage[i].indexOf("-",SubBegin);//取得IP地址
IPAddressB[i]=EveryPage[i].substring(SubBegin,SubEnd);
pointClass.SetIPAddressB(i,IPAddressB[i]);
SubBegin=SubEnd+1;
MakeRealIP(pointClass,i,IPAddressB[i]);
SubEnd=EveryPage[i].indexOf("[",SubBegin);//取得所访问的页面的时间
SubBegin=SubEnd+1;
SubEnd=EveryPage[i].indexOf("+",SubBegin);
VisterDateB[i]=EveryPage[i].substring(SubBegin,SubEnd);
pointClass.SetVisterDateB(i,VisterDateB[i]);
SubBegin=SubEnd+1;
MakeRealIP(pointClass,i,VisterDateB[i]);
SubEnd=EveryPage[i].indexOf("/",SubBegin);//取得所访问的页面
SubBegin=SubEnd+1;
SubEnd=EveryPage[i].indexOf("HTTP",SubBegin);
WebPageB[i]=EveryPage[i].substring(SubBegin-1,SubEnd);
pointClass.SetWebPageB(i,WebPageB[i]);
SubBegin=SubEnd+1;
MakeRealIP(pointClass,i,WebPageB[i]);
i++;
nBegin=nEnd+1;
}
pointClass.SetCount(i);
if(type!=null)
MakeStat(pointClass,desHtml,type);//得到某种类型的访问次数
}
public void MakeStat(PointClass pointClass,HtmlOut desHtml,String type){
int SumViste=0;
if(type!=null)
type=type.trim();
ResultSet rs;
DBOperater DB = new DBOperater ("pointrate");
if(type.compareTo("全部")==0){
try
{
ResultSet rs1 = DB.executeQuery("select webpage from pointrate ");
if(rs1!=null){
if(!rs1.next())
{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","没有要查询的页面类型","PointRateTemplate");
DB.close();
return ;
}
//将数据库中的数据逐条的取得放到相应的数组中
do
{
int count=pointClass.GetCount();
String webpage=rs1.getString(1);
if(webpage!=null)
webpage=webpage.trim();
for(int i=1;i<count-1;i++){
if(webpage!=null)if(pointClass.GetWebPageB(i).indexOf(webpage)!=-1)//数组中含有此页面
SumViste++;
}
}while(rs1.next());
desHtml.addString(type+"访问的次数是"+SumViste);
desHtml.addString("<a href=PointRateTemplate>返回</a>");
DB.close();
}else{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","调用DB时出错了","PointRateTemplate");
DB.close();
}
}catch(Exception ex) {
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","统计表出错","PointRateTemplate");
DB.close();
return ;
}
}
else{
try
{
rs = DB.executeQuery("select webpage from pointrate where type='"+type+"'");
if(rs!=null){
if(!rs.next())
{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","没有要查询的页面类型","PointRateTemplate");
DB.close();
return ;
}
//将数据库中的数据逐条的取得放到相应的数组中
do
{
int count=pointClass.GetCount();
String webpage=rs.getString(1);
if(webpage!=null)
webpage=webpage.trim();
for(int i=1;i<count;i++){
if(pointClass.GetWebPageB(i).indexOf(webpage)!=-1)//数组中含有此页面
SumViste++;
}
}while(rs.next());
desHtml.addString(type+"访问的次数是"+SumViste);
desHtml.addString("<a href=PointRateTemplate>返回</a>");
DB.close();
}else{
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","调用DB时出错ff","PointRateTemplate");
DB.close();
}
}catch(Exception ex) {
desHtml.setErrorID(desHtml.USER_ANSWER_IS_INCORRECT,
"","统计表出错","PointRateTemplate");
DB.close();
return ;
}
}
return;
}
public void MakeRealIP(PointClass pointClass,int i,String Str){
if(Str!=null)
Str=Str.trim();
pointClass.SetIPAddress(i,Str);//IP地址
return ;
}
public void MakeRealDate(PointClass pointClass,int i ,String Str){
if(Str!=null)
Str=Str.trim();
pointClass.SetVisterDate(i,Str);//访问时间
return ;
}
public void MakeRealPage(PointClass pointClass,int i,String Str){
if(Str!=null)
Str=Str.trim();
pointClass.SetWebPage(i,Str);
return ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -