Cookie的应用---十天免登陆设计

首先要创建一个数据库的表,表内含有用户名和密码,其代码如下:

      

drop table if exists t_user;
create table t_user(
    id int(10) primary key auto_increment,
    username varchar(32) not null unique,
    password varchar(32) not null unique,
    realname varchar(18) 
);
insert into t_user(username,password,realname) values('admin','123','管理员');
insert into t_user(username,password,realname) values('xiaoming','123','小明');
commit;
select * from t_user;
然后新建一个Web project,先进行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">
	<welcome-file-list>
	 <welcome-file>isLogin</welcome-file>
	</welcome-file-list>
	<servlet>
	 <servlet-name>login</servlet-name>
	 <servlet-class>com.bjpowernode.javaweb.servlet.LoginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
	 <servlet-name>login</servlet-name>
	 <url-pattern>/login</url-pattern>
	</servlet-mapping>
	<servlet>
	 <servlet-name>isLogin</servlet-name>
	 <servlet-class>com.bjpowernode.javaweb.servlet.CheckLoginStatusServlet</servlet-class>
	</servlet>
	<servlet-mapping>
	 <servlet-name>isLogin</servlet-name>
	 <url-pattern>/isLogin</url-pattern>
	</servlet-mapping>
</web-app>

 下一步在Web-Root文件新建两个html页面文件,其中一个名为login.html,用于登陆的界面。其代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>login.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
      <form action="/prj.servlet-19/login" method="post">
               用户名 
               <input type="text" name="username"><br>
               密码   
               <input type="password" name="password"><br>
               
               <input type="checkbox" name="tenDayAutoLoginFlag" value="ok">十天内免登陆<br>
               
               
               <input type="submit" value="登陆">
      </form>
    
  </body>
</html>

  另外一个html文件用于用户登陆错误的界面。名为login_error.html,其代码如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title>登陆失败</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
     登录失败,用户名不存在或者密码错误。请<a href="/prj.servlet-19/login.html">重新登陆</a>
    
  </body>
</html>

在src下新建一个名为:com.bjpowernode.javaweb.servlet的包,包内新建一个名为:LoginServlet.java的类来继承HttpServlet接口。这个类用来处理用户登陆,其代码如下:

package com.bjpowernode.javaweb.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.corba.se.spi.ior.ObjectKey;
import com.sun.jndi.url.corbaname.corbanameURLContextFactory;

public class LoginServlet extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获取用户名和密码
		request.setCharacterEncoding("UTF-8");
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		//JDBC连接数据库验证用户名和密码
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		boolean flag=false;
		String realname=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123");
			String sql="select id,username,password,realname from t_user where username=? and password=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1,username);
			ps.setString(2,password);
			rs=ps.executeQuery();
			if(rs.next()){
				flag=true;
				realname=rs.getString("realname");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
		}
		
		
		if(flag==true){
			//登陆成功之后,获取用户是否选择了十天内免登陆
			String tenDayAutoLoginFlag=request.getParameter("tenDayAutoLoginFlag");
			if("ok".equals(tenDayAutoLoginFlag)){
				//创建Cookie对象
				Cookie cookie1=new Cookie("username",username);
				Cookie cookie2=new Cookie("password",password);
				//设置有效时间
				cookie1.setMaxAge(60*60*24*10);
				cookie2.setMaxAge(60*60*24*10);
				//设置关联路径
				cookie1.setPath(request.getContextPath());
				cookie2.setPath(request.getContextPath());
				//发送Cookie给浏览器
				response.addCookie(cookie1);
				response.addCookie(cookie2);
			}
			//登陆成功,跳转到成功界面
			response.setContentType("text/html;charset=UTF-8");
			PrintWriter out=response.getWriter();
			out.print("<html>                    ");
			out.print("<head>                    ");
			out.print(" <title>欢迎界面</title>      ");
			out.print("</head>                   ");
			out.print("<body>                    ");
			out.print("  欢迎访问                    ");
			out.print(realname);
			out.print("</body>                   ");
			out.print("</html>                   ");
		}else{
			//登陆失败,跳转到失败界面
			
		}
		
		
	}
       
}

再在这个包中建立一个类,用来处理用户的免登陆信息。该类名为:CheckLoginStatusServlet.java。代码如下所示:
package com.bjpowernode.javaweb.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CheckLoginStatusServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//从request中获取所有Cookie
		Cookie []cookies =request.getCookies();
		String username=null;
		String password=null;
		if(cookies!=null){
			//遍历Cookie
			for(Cookie cookie:cookies){
				 String cookieName=cookie.getName();
				 String cookieValue=cookie.getValue();
				if("username".equals(cookieName)){
					username=cookieValue;
				}else if("password".equals(cookieName)){
					password=cookieValue;
				}
			}
			
		}
		if(username!=null&&password!=null){
			 //连接数据库JDBC验证用户名和密码
			Connection conn=null;
			PreparedStatement ps=null;
			ResultSet rs=null;
			boolean flag=false;
			String realname=null;
			try {
				Class.forName("com.mysql.jdbc.Driver");
				conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123");
				String sql="select id,username,password,realname from t_user where username=? and password=?";
				ps=conn.prepareStatement(sql);
				ps.setString(1,username);
				ps.setString(2,password);
				rs=ps.executeQuery();
				if(rs.next()){
					flag=true;
					realname=rs.getString("realname");
				}
				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(rs!=null){
					try {
						rs.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				if(ps!=null){
					try {
						ps.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				
			}
			 //登录成功跳转到成功界面
			if(flag==true){
				//登陆成功之后,获取用户是否选择了十天内免登陆
				//登陆成功,跳转到成功界面
				response.setContentType("text/html;charset=UTF-8");
				PrintWriter out=response.getWriter();
				out.print("<html>                    ");
				out.print("<head>                    ");
				out.print(" <title>欢迎界面</title>      ");
				out.print("</head>                   ");
				out.print("<body>                    ");
				out.print("  欢迎访问                    ");
				out.print(realname);
				out.print("</body>                   ");
				out.print("</html>                   ");
			}else{
				//登陆失败,跳转到失败界面
				response.sendRedirect(request.getContextPath()+"/login_error.html");
			}
		}else {
			//跳转到登陆界面
			response.sendRedirect(request.getContextPath()+"/login.html");
		}
	}
    
}

最后将MySQL的驱动导入到该项目中,进行测试,运行效果图如下所示:




  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值