利用ServletContext实现网页计数器

(1)思路分析:

使用ServletContext 和 记事本两个东西,将登陆的次数写在txt文件中,首先是在在登陆的条件下 利用Servlet的init()函数初始化打开txt计数器文件并读取然后在用户登录后的过程中访问网站不会再重复技术只计数一次,直到注销之后destroy()然后计数器文件加1;

(2)登陆界面

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;


public class Login extends HttpServlet {
	
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		//业务逻辑 
		
		try {
				
			//中文乱码
			res.setContentType("text/html;charset=gbk");
			
			PrintWriter pw=res.getWriter();
			
			//返回登录界面
			pw.println("<html>");
			pw.println("<body bgcolor=#CED3FF>");
			
			pw.println("<img src=imgs/1.GIF><hr><center>");
			//得到error信息
			String info=req.getParameter("info");
			
			if(info!=null){
				pw.println("<h1>你的用户名或是密码错误!</h1><br>");
			}
			pw.println("<h1>登录界面</h1>");
			pw.println("<form action=loginCl method=post>");
			pw.println("用户名:<input type=text name=usrename><br>");
			pw.println("密码:<input type=password name=passwd><br>");
			pw.println("<input type=checkbox name=keep value=2>两周内不再重新登录<br>");
			pw.println("<input type=submit value=login><br>");
			pw.println("</form>");
			pw.println("</center><hr><img src=imgs/mylogo.gif>");
			pw.println("</body>");
			pw.println("</html>");
			
	    }
	    catch (Exception ex) {
	    	
	    	ex.printStackTrace();
	    }
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		
		this.doGet(req,res);
		
	}
}


(2)处理登陆页面的请求

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;
import java.sql.*;

public class LoginCl extends HttpServlet {
	

	//重写init函数	
	public void init(){
				
		try {
				
			//只会被调用一次
			
			//创建一个FileReader
			FileReader  f=new FileReader("f:\\myCounter.txt");
		    	
			BufferedReader br=new BufferedReader(f);
		    	
		 
			//读出一行数据   	
			String numVal=br.readLine();
			 
			 //一定要关闭文件流   	
			br.close();
			
			
			//将times值放入到servletcontext
			this.getServletContext().setAttribute("visitTimes",numVal);
				
			System.out.println ("inti 被调用");
	    }
	    catch (Exception ex) {
	   	
	   		ex.printStackTrace();
	    }
		
	}
	
	//重写destroy函数

	public void destroy(){
		
		try {
			
			
			//在将新的次数写会去
			FileWriter  fw=new FileWriter("f:\\myCounter.txt");
    	
    		<span style="white-space:pre">	</span>BufferedWriter bw=new BufferedWriter(fw);
    	
    		<span style="white-space:pre">	</span>//在文件中写入数据	
    		<span style="white-space:pre">	</span>bw.write(this.getServletContext().getAttribute("visitTimes").toString());
    	
    		<span style="white-space:pre">	</span>//关闭文件流
    		<span style="white-space:pre">	</span>bw.close();
			
			
			System.out.println ("destroy 被调用");
	    }
	    catch (Exception ex) {
	    	
	    	ex.printStackTrace();
	    
	    }
	}
	//处理get请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		
		//业务逻辑 
		Connection ct=null;
		Statement sm=null;
		ResultSet rs=null;
		try {
			
			
			//接受用户名和密码
			String u=req.getParameter("usrename");
			String p=req.getParameter("passwd");
			
			//调用UserBeanCl,1.创建一个对象
			UserBeanCl ubc=new UserBeanCl();
			

			//2.使用UserBeanCl的方法
			if(ubc.checkUser(u,p)){
				
					
					//合法用户
					
					String keep=req.getParameter("keep");
					
					
					if(keep!=null){
					//将用户名和密码保存在客户端(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);
					
				}
					
					
					
					
				//将用户名和密码放入到session中
				HttpSession hs=req.getSession(true);
				
				hs.setMaxInactiveInterval(30);
				
				hs.setAttribute("uname",u);
				
				//将serlvetContext中的 visitTime所对应的值++
				String times=this.getServletContext().getAttribute("visitTimes").toString();
				
				//对times++再重新放回servlet
				this.getServletContext().setAttribute("visitTimes",(Integer.parseInt(times)+1)+"");
				
			
				//跳转到wel
				res.sendRedirect("Main");
				
			}else{
				
				//不合法
				
				//跳转
				res.sendRedirect("login");//写你要到的servlet的那个url
			}
			
		}
	    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();
		    }
	    	
	    	
	    }
	}
	
	//处理post请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		
		this.doGet(req,res);
		
	}
}


(3)登陆成功后提交给wel页面

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;
import java.sql.*;
import java.util.*;

public class Wel extends HttpServlet {
	

	//处理get请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doGet(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("uname");
			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 temp=allCookies[i];
				
						if(temp.getName().equals("myname")){
						
							//得到cookie的值
							name=temp.getValue();
						}
						else if(temp.getName().equals("mypasswd")){
							passwd=temp.getValue();
						}
						
					}
					
					System.out.println ("myname="+name+" pas="+passwd);
					if(!name.equals("")&&!passwd.equals("")){
					
						//到logincl去验证
						res.sendRedirect("loginCl?usrename="+name
						+"&passwd="+passwd);
						return;
					}
						
				}
				
				//返回登录界面
				res.sendRedirect("login?info=error1");
				return ;
			}
			
			//解决中文乱码
			res.setCharacterEncoding("gbk");
			
			PrintWriter pw=res.getWriter();
			pw.println("<body bgcolor=#CED3FF>");
					
			
			//添加网页访问次数的功能			
			
			pw.println("该网页被访问了"+this.getServletContext().getAttribute("visitTimes").toString()+"次<br>");			

			pw.println("</body>");
		
	    }
	    catch (Exception ex) {
	    	
	    	ex.printStackTrace();
	    }
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		
		this.doGet(req,res);
		
	}
}


这里没有写登陆成功之后要返回的页面 仅实现网站用户在登录到注销只计数一次的过程!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。