Cookie的应用---十天免登陆设计
2017-05-09 15:51
369 查看
首先要创建一个数据库的表,表内含有用户名和密码,其代码如下:
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的设置,代码如下:
下一步在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接口。这个类用来处理用户登陆,其代码如下:
再在这个包中建立一个类,用来处理用户的免登陆信息。该类名为:CheckLoginStatusServlet.java。代码如下所示:
最后将MySQL的驱动导入到该项目中,进行测试,运行效果图如下所示:
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的驱动导入到该项目中,进行测试,运行效果图如下所示:
相关文章推荐
- cookie应用三天免登陆
- java web之路 jsp状态管理 cookie在登陆中的应用
- 应用篇1.3 后台登陆界面设计
- 跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例
- android 登陆验证Cookie的应用
- 面向对象的javascript目录树控件设计与应用
- UML在关系型数据库设计中的应用
- 基于构件开发的应用框架设计
- 在Java中应用设计模式 - Factory Method
- MATLAB 程式设计与应用(4)
- [引]旅游网站应用设计
- 提问:有没有办法把InfoPath里设计的报表应用到asp.net页面上?
- 面向对象的应用服务层设计
- Windows应用开发中常用的设计模式
- UML在关系型数据库设计中的应用
- MDA驱动应用设计
- 在Java中应用设计模式 - Factory Method
- 面向对象的javascript目录树控件设计与应用
- c api应用2-刷新设计
- WEB应用的缓存兼容性设计