JSP(7):网站计数器(1)

本文介绍如何在Servlet中使用ServletContext对象进行属性管理和实现网站计数器功能,包括获取ServletContext实例、设置与获取属性、操作文件等。通过具体代码示例展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

servletContext讲解:可以把它想像成一个共用的空间可以被使用:

     使用servletContext:

    1、如何得到servletContext实例,this.getServletContext();

     2、你可以把它想像成一张表,这个和Session非常相似,每一行就是一个属性;

         添加属性:setAttrubute(String name,object ob);

         得到值:getAttribute(String  name)返回object;

         删除属性:removeAttribute(String name)

  3、生命周期

   servletContext中的属性的生命周期从创建开始,到服务器关闭面结束。

    

package com.tsinghua;    


import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class ServletContextTest1 extends HttpServlet{
    	//处理get请求
        //req:用于获得客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		try
		{
			res.setContentType("text/html;charset=gbk");//中文防止乱码
			
			PrintWriter pw = res.getWriter();
			
			//1、得到servletContext
			ServletContext sc=this.getServletContext();
			
			//2、添加属性
			sc.setAttribute("myInfo","我是顺平");
		    pw.println("给servlet context 中添加一个属性myInfo,该属性对应值是一个字符串我是顺平<br>");
		    
		    //比较session
		    HttpSession hs=req.getSession(true);
		    hs.setAttribute("test","中国人");
		    hs.setMaxInactiveInterval(60*3);
		    pw.println("向Session中添加一个test属性他的值是中国人<br>");	
			
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}


 

//演示如何在servlet中操作文件,演示如何读取文件的内容


package com.tsinghua;    


import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class ServletContextTest2 extends HttpServlet{
    	//处理get请求
        //req:用于获得客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		try
		{
			res.setContentType("text/html;charset=gbk");//中文防止乱码
			
			PrintWriter pw = res.getWriter();
			
			
			//1、得到servletContext
			ServletContext sc=this.getServletContext();
			
			//得到属性和它的值
			String info=(String)sc.getAttribute("myInfo");
			
			pw.println("从servletContext中得到属性myinfo,它的对应值为我是顺平");
			
			//比较session
			HttpSession hs=req.getSession(true);
			
			String val=(String)hs.getAttribute("test");
			pw.println("session 中的test="+val+"<br>");
			
			
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}


2、servlet中操作文件:

    因为servlet 本来就是一个java文件,因此servlet 中操作文件和普通java文件操作是一样的。

     

//演示如何在servlet中操作文件,演示如何读取文件的内容


package com.tsinghua;    


import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class ServletFileTest1 extends HttpServlet{
    	//处理get请求
        //req:用于获得客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		try
		{
			res.setContentType("text/html;charset=gbk");//中文防止乱码
			
			PrintWriter pw = res.getWriter();
			
			
		
			//创建一个FileReader
			FileReader f=new FileReader("f:\\myCounter.txt");
			
			//把FileReader 转换成BufferedReader
			BufferedReader bw=new BufferedReader(f);	
			//读出一行数据
			String numval=bw.readLine();
			bw.close();
			pw.println("从文件中读取的数据是:"+numval);
			
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}


 

//演示如何在servlet中操作文件,演示如何写入文件的内容


package com.tsinghua;    


import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class ServletFileTest2 extends HttpServlet{
    	//处理get请求
        //req:用于获得客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		try
		{
			res.setContentType("text/html;charset=gbk");//中文防止乱码
			
			PrintWriter pw = res.getWriter();
			
			//创建一个Filewriter看内存数据-->磁盘文件(写入,输出)
          //看内存数据<--磁盘文件(读入,输入)
          FileWriter f=new FileWriter("f:\\myCounter1.txt");
          //FileReader f=new FileReader("f:\\myCounter.txt");
          
          BufferedWriter bw=new BufferedWriter(f);
          //BufferedReader bw=new BufferedReader(f);
          
          //在文件中写入数据
          bw.write("123");
         
          
          //关闭文件流
          bw.close();
          
          pw.println("在文件中写入数据!");
		
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}


3、网站计数器

    在网站建设中经常会统计某个网页被点击(浏览次数)把这个功能 叫做计数器

   网站计数器是针对所有用户的,因此我们的实现方法有以下方案:

  1、当某个用户访问该网页时,就在数据库中增一次

     2、使用servletContext当服务器启动时可以通过文件计数

//登录控制文件的servlet

package com.tsinghua;

import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class LoginCl extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		this.doPost(req,res);
	}
	public void doPost(HttpServletRequest req,HttpServletResponse res){
	
		Connection ct = null;
		ResultSet rs = null;
		Statement sm = null;
		
		try{
			//服务器接收login页面发来的用户名和密码,要用到req。
			String u = req.getParameter("username");//此处填写组件名
			String p = req.getParameter("passwd");//此处填写组件名
		

		       
				//调用UserBeanCl  (1)创建一个对象
		        UserBeanCl ubc=new UserBeanCl();
		        
                 //(2)使用UserBeanCl的方法
	  			if(ubc.checkUser(u,p)){
	  				
	  				System.out.println("用户合法");
	  				//合法用户
  					String keep=req.getParameter("keep");
	  					
	  					if(keep!=null){
	  				
						
						
						//1将用户名和密码保存在客户端(cookie)
						//创建
						Cookie name=new Cookie("myname",u);
						Cookie pass=new Cookie("mypasswd",p);
						
						//设置时间
						name.setMaxAge(14*24*3600);
						pass.setMaxAge(14*24*3600);
						
						//回写到客户端
						res.addCookie(name);
						res.addCookie(pass);
						}
			 
					
					HttpSession hs = req.getSession(true);
				
					hs.setMaxInactiveInterval(20);
					hs.setAttribute("pass","ok");
					//连接登录后的欢迎界面
				 	//sendRedirect的作用是跳转界面
				 //3\==============添加网页访问次数的功能=============
				 	 //这是从文件中读取数据
				     //创建一个FileReader
		     	 FileReader f=new FileReader("f:\\myCounter.txt");
			
		    	 //把FileReader 转换成BufferedReader
			     BufferedReader br=new BufferedReader(f);	
			     //读出一行数据
			     String numval=br.readLine();
			     br.close();
			     
			     //将读取的数字转换成int型
			     int times=Integer.parseInt(numval);
			     //增加一次
			     times++;
			     
			     // 这是将新的次数写回去
					
			   //创建一个Filewriter看内存数据-->磁盘文件(写入,输出)
               //看内存数据<--磁盘文件(读入,输入)
               FileWriter fw=new FileWriter("f:\\myCounter.txt");
           
          
               BufferedWriter bw=new BufferedWriter(fw);
          
            
               //在文件中写入数据
                bw.write(times+"");
         
          
               //关闭文件流
               bw.close();
               
               
               
			     
				 	res.sendRedirect("wel?username="+u+"&passwd="+p);//该处填写域名
				 
				}
			else
				{//返回登录页面
					res.sendRedirect("login");//该处填写域名
				}
			}
		catch(Exception ex){
			ex.printStackTrace();
		}
		finally
		{
			try
			{
				if(rs!=null)
				{
					rs.close();
				}
				if(sm!=null)
				{
					sm.close();
				}
				if(ct!=null)
				{
					ct.close();
				}
				
				
			}
			catch (Exception ex)
			{
				ex.printStackTrace();
			}		
		}
	}
		
	
}


 

  //欢迎界面

//登录界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.util.*;

public class Wel extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		this.doPost(req,res);
	}
	public void doPost(HttpServletRequest req,HttpServletResponse res){
	        
	        //业务逻辑
	       	Connection ct=null;
	        PreparedStatement ps=null;
	        ResultSet rs=null;
	        
		try{
			//得到session防止非法登录
			HttpSession hs = req.getSession(true);
			String myname = (String)hs.getAttribute("pass");
		
			
			String u = req.getParameter("username");
			String p = req.getParameter("passwd");
			//1、================//读取Cookie==================
			String name="";
			String passwd="";
			if(myname == null)
			{
				//如果session中没有用户信息,再看看有没有cookie信息
				
				//从客户端得到所有的Cookie
			
			Cookie [] allCookies=req.getCookies();
			
			int i=0;
			
			//如果allCookies不为空……
			if(allCookies!=null){
			   //从中取出Cookie
			   for(i=0;i<allCookies.length;i++){
			   	//依次取出Cookie
			   	Cookie temp=allCookies[i];
			   	
			   	if(temp.getName().equals("myname")){
			   		  //得到Cookie的值
			   		  name=temp.getValue();
			   		  }
			   		  else if(temp.getName().equals("mypasswd")){
			   		  passwd=temp.getValue();	
			   		  	}
			    	}
			    	
			        if(name.equals("")&&!passwd.equals("")){
			        	
			              //到loginCl中验证
			              res.sendRedirect("logincl?username="+name+"&passwd="+passwd);
			              return;
			           }
			         }
			         //返回登录界面
			         res.sendRedirect("login?info=error1");
			         return;
		    }
			
				res.setContentType("text/html;charset=gbk");//中文防止乱码
				PrintWriter pw = res.getWriter();
				
				pw.println("<body><center>");
				//显示图片
				 pw.println("<img src=imgs/2.jpg ><br>");
				 pw.println("wellcome!  "+u+" your password="+p);
				 pw.println("你的用户名是:"+u);
				 
				//3\=========添加网页访问次数的功能============
				
				    
			     
			     //这是从文件中读取数据
				     //创建一个FileReader
		     	 FileReader f=new FileReader("f:\\myCounter.txt");
			
		    	 //把FileReader 转换成BufferedReader
			     BufferedReader br=new BufferedReader(f);	
			     //读出一行数据
			     String numval=br.readLine();
			     br.close();
               
				//=========分页功能===============
				
				int pageSize=3;//一页显示几条记录
				int pageNow=1;//希望显示第几页
				
			
				
				//动态的接收pageNow
				String sPageNow=req.getParameter("pageNowok");
				
				if(sPageNow!=null){
					pageNow=Integer.parseInt(sPageNow);
					}
				//调用userBeancl
				 UserBeanCl ubc=new UserBeanCl(); 
				 ArrayList al=ubc.getResultByPage(pageNow,pageSize);
			    
			    //设置表头
			     pw.println("<table border=1>");
			     pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th></tr>");
			    
			    //显示出来
			    for(int i=0;i<al.size();i++){
			    	
			    	UserBean ub=(UserBean)al.get(i);
			    	pw.println("<tr>");
			    	pw.println("<td>"+ub.getUserId()+"</td>");
			    	pw.println("<td>"+ub.getUsername()+"</td>");
			    	pw.println("<td>"+ub.getPasswd()+"</td>");
			    	pw.println("<td>"+ub.getMail()+"</td>");
			    	pw.println("<td>"+ub.getGrade()+"</td>");
			    	pw.println("</tr>");
			    }
			    pw.println("</table>");
			   
			   //做个超链接
			   pw.println("<br><a href=login>返回重新登陆</a></br>");
			   
			   //上一页
			   if(pageNow!=1)
			   	pw.println("<a href=wel?pageNowok="+(pageNow-1)+">上一页</a>");
			   //显示超链接
			    for(int i=pageNow;i<=pageNow+4;i++){
			    	pw.println("<a href=wel?pageNowok="+i+">"+i+"</a>");
			    	}
			    	
			    int pageCount=ubc.getPageCount();
			   //下一页
			   if(pageNow!=pageCount)
			   pw.println("<a href=wel?pageNowok="+(pageNow+1)+">下一页</a>");
			  pw.println("该网页被访问了"+numval+"次");
			   pw.println("</center></body>");
			
			
			
			}
		catch(Exception ex){
			ex.printStackTrace();
		}
		
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值