web开发 使用 servletContext 添加登录次数统计功能

在登录数据库界面基础上修改:web项目 maven下 使用servlet调用 mysql数据库

添加代码如下:

 

package com.busymonkey;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
/** 
 * Servlet implementation class ServletDemo 
 */  
public class Login extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
         
    public Login() {  
        super();  
    }  
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        try {  
            PrintWriter pw = response.getWriter();  
            pw.println("<html>");  
            pw.println("<body>");  
            pw.println("<center>");
            pw.println("<h1>Login</h1>");  
            pw.println("<form action=verify method=post>");  
            pw.println("UserName:<input type=text name=username><br>");  
            pw.println("PassWord:<input type=password name=passwd><br>"); 
            pw.println("<input type=checkbox name=keep value=2>No more login in two weeks<br>");
            pw.println("<input type=submit value=loging><br>");  
            pw.println("</form>");
            pw.println("</center>");
            pw.println("</body>");  
            pw.println("</html>");  
        }  
        catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        this.doGet(request, response);  
    }  
}

 

package com.busymonkey;

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

public class Verify extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
	//重写init函数 只会被调用一次
	public void init () {
		try {
			FileReader fs = new FileReader(this.getServletContext().getRealPath("/")+"/WEB-INF/logs/count.txt");
			BufferedReader br = new BufferedReader(fs);//读出一行数据		
			String numVal = br.readLine();//一定要关闭文件流		
			br.close();
			//将numVal值放到servletContext中
			this.getServletContext().setAttribute("visitTimes", numVal);
			System.out.println("init was loading");
		}
		catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	//重写destroy函数
	public void destroy () {
		try {
			FileWriter fs = new FileWriter(this.getServletContext().getRealPath("/")+"/WEB-INF/logs/count.txt");
			BufferedWriter bw = new BufferedWriter(fs);
			bw.write(this.getServletContext().getAttribute("visitTimes").toString());//回写文件 登陆次数
			bw.close();
			System.out.println("destroy was loading");
		}
		catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	
    public Verify() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	Connection ct = null;
    	Statement sm = null;
    	ResultSet rs = null;
    	try {
        	String u=request.getParameter("username");
        	String p=request.getParameter("passwd");
        	
        	//数据库连接
        	Class.forName("com.mysql.jdbc.Driver");
        	//得到连接
        	ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_hou", "root", "123456");
        	//创建Statement
        	sm = ct.createStatement();
        	rs = sm.executeQuery("select * from users where username='"+u+"' and passwd='"+p+"'");
        	
        	if (rs.next()) {//next能进来说明用户是存在的
        		String dbPasswd = rs.getString("passwd");
        		if (dbPasswd.equals(p)) {       			
	        		HttpSession hs = request.getSession(true);
	        		hs.setMaxInactiveInterval(20);
	        		hs.setAttribute("pass", "ok");
	        		
        			String keep = request.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);
	        			//回写到客户端
	        			response.addCookie(name);
	        			response.addCookie(pass);      				
        			} 
        			//将servletContext中的 visitTimes 所对应的值 ++
        			String times = this.getServletContext().getAttribute("visitTimes").toString();
        			//对 times的值 ++ 再重新放回
        			this.getServletContext().setAttribute("visitTimes", Integer.parseInt(times)+1+"");
	        		response.sendRedirect("welcome?uname=" + u + "&upass=" + p); 			
        		}
        		else
        		{
        			response.sendRedirect("login");
        		}
        	}
        	else {
        		response.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();
        	}
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

}

 

package com.busymonkey;

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

public class WelCome extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public WelCome() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Connection ct = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        
    	HttpSession hs = request.getSession(true);
        String val = (String) hs.getAttribute("pass");//非法登陆返回空
        if ( val == null )
        {
        	//如果session中没有用户信息,再看看cookie中有没有信息
        	Cookie [] allCookies = request.getCookies();
        	String name = null;
        	String passwd = null;
        	int i = 0;
        	if (allCookies != null) {
        		//取出cookie
        		for (i = 0; i < allCookies.length; i++) {
        			//依次取出
        			Cookie temp = allCookies[i];
        			if (temp.getName().equals("myname")) {
        				name = temp.getValue();
        			}
        			else if (temp.getName().equals("mypasswd")) {
        				passwd = temp.getValue();
        			}
        		}
        		if (!name.equals("") && !passwd.equals("")) {
        			//到Verify里去验证
        			response.sendRedirect("verify?username="+name+"&passwd="+passwd);
        			return;
        		}
        	}
        	
        	try {
        		response.sendRedirect("login");
        	}
        	catch (Exception ex) {
        		ex.printStackTrace();
        	}
        }
    	String u = request.getParameter("uname");
        String p = request.getParameter("upass");
    	try {
    		//分页技术
    		int pageSize = 3;//每页条数
    		int pageCurrent = 1;//当前页数
    		int rowCount = 0;//总条数
    		int pageCount = 0;//总页数
    		PrintWriter pw = response.getWriter();
    		//动态接收pageCurrent
    		String sPageCurrent = request.getParameter("pageCurrent");
    		if (sPageCurrent != null) {
    			pageCurrent = Integer.parseInt(sPageCurrent);
    		}

    		//得到rowCount
        	Class.forName("com.mysql.jdbc.Driver");
        	ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_hou", "root", "123456");
        	ps = ct.prepareStatement("select count(*) from users");
        	rs = ps.executeQuery();
        	if (rs.next()) {
        		rowCount = rs.getInt(1);	
        	}
        	//计算pageCount
        	if (rowCount%pageSize == 0) {
        		pageCount = rowCount/pageSize;
        	}
        	else {
        		pageCount = rowCount/pageSize + 1;
        	}
        	
        	ps = ct.prepareStatement("select * from users limit ?,?");
        	//给?赋值
        	ps.setInt(1, pageSize*(pageCurrent-1));
        	ps.setInt(2, pageSize);
        	rs = ps.executeQuery();
        	
        	pw.println("<body><center>");
        	pw.println("<img src=./imgs/1.GIF ><br>");
        	pw.println("Welcome!!!! " + u + " pass=" + p);
        	//表数据显示
        	pw.println("<table border=1>");
        	pw.println("<tr><th>ID</th><th>NAME</th><th>PASSWD</th><th>GRADE</th></tr>");
        	while (rs.next()) {
        		pw.println("<tr>");
        		pw.println("<td>"+rs.getInt("userId")+"</td>");
        		pw.println("<td>"+rs.getString("username")+"</td>");
        		pw.println("<td>"+rs.getString("passwd")+"</td>");
        		pw.println("<td>"+rs.getInt("grade")+"</td>");
        		pw.println("</tr>");
        	}
        	pw.println("</table>");
        	
        	//上一页 超连接
        	if (pageCurrent != 1)
        		pw.println("<a href=welcome?pageCurrent="+(pageCurrent-1)+">Prepage</a>");
        	//显示超链接
        	for (int i = pageCurrent; i <= pageCurrent+5; i ++) {
        		pw.println("<a href=welcome?pageCurrent="+i+">"+i+"</a>");
        	}
        	//下一页 超链接
        	if (pageCurrent != pageCount)
        		pw.println("<a href=welcome?pageCurrent="+(pageCurrent+1)+">Nextpage</a>");
        	
        	//返回登陆页面 超连结
        	pw.println("<br><a href=login>Return Loading Page</a>");
        	pw.println("<br>Was visited "+this.getServletContext().getAttribute("visitTimes").toString()+" times");
        	pw.println("</center></body>");
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

}

 

 

 

 

 

关于 servletContext :

1、与cookie和session做对比,servletContext 是保存在服务器端的,这点与session类似,但是session是每个客户端都分别在服务器端有一个session空间,且每个session空间之间不能相互通用,而servletContext是服务器端一个公共空间可以被所有的客户端访问。且servletContext的存储结构也与session类似,每个属性都有一个名字和一个值。有以下调用方法:

     添加属性:setAttribute(String name, Object ob)

     得到值:getAttribute(String name)   返回 Object

     删除属性:removeAttribute(String name)

     同时,servletContext 的生命周期从创建开始,到服务器关闭而结束

2、在  web应用中使用servletContext来获取当前路径

 

this.getServletContext().getRealPath("/")  

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值