JSP+Servlet实现用户登录状态的保存
2017-11-03 17:23
836 查看
题目:编写一个用户登录页面(如果是ip地址为“192”开头的客户访问,则在页面显示该用户的ip地址),输入账号和密码,让用户选择“是否保存登录状态”,如果账号密码相等,则登陆成功,进入欢迎页面。
在登录时,如果保存了登录状态,下次登录时,如果访问登录页面,则进入欢迎页面。但是,客户如果没有经过登录就访问欢迎页面,则跳转到登录页面。
以下为思路分析,其中,前端用Bootstrap框架实现,后台基于JSP+Servlet+Mysql实现。代码下载(网盘,永久有效):http://pan.baidu.com/s/1bo9qwIb,后台数据库需自己创建和修改。
页面展示及数据库设计如下:
登陆成功显示:
工程文件主目录:
数据库设计:
思路分析:
1.当访客访问登陆页面welcome.jsp,先判断是否存在保存的cookie,如果是则跳转到欢迎页面bootstrap.jsp,如果不存在cookie则输入登陆信息;以下为登陆页面代码:welcome.jsp
2.当用户输入登陆用户名及密码时,提交到后台的servlet_login,servlet此时从web.xml中读取数据库用户名及密码进入数据库,从中查询用户名及密码是否正确,如果正确则判断用户是否勾选了保存密码;
3.如果用户勾选了保存密码,则设置cookie存活时间为1天(60*60*24),如果没有勾选保存密码的话就设置cookie存活时间为19s(为了便于验证,当然也可以设置更久);以下为servlet_login代码:servlet_login.java
4.添加cookie后,重定向到bootstrap.jsp欢迎页面,在欢迎页面先判断cookie是否存在,如果符合则显示欢迎页面内容,如果不符合则跳转到登陆页面。以下为欢迎页面代码:bootstrap.jsp
5.当然,如果访客没经过登陆,直接访问欢迎页面bootstrap.jsp也会由于判断cookie不存在而跳转到登陆页面,最后,web.xml设置如下:
在登录时,如果保存了登录状态,下次登录时,如果访问登录页面,则进入欢迎页面。但是,客户如果没有经过登录就访问欢迎页面,则跳转到登录页面。
以下为思路分析,其中,前端用Bootstrap框架实现,后台基于JSP+Servlet+Mysql实现。代码下载(网盘,永久有效):http://pan.baidu.com/s/1bo9qwIb,后台数据库需自己创建和修改。
页面展示及数据库设计如下:
登陆成功显示:
工程文件主目录:
数据库设计:
思路分析:
1.当访客访问登陆页面welcome.jsp,先判断是否存在保存的cookie,如果是则跳转到欢迎页面bootstrap.jsp,如果不存在cookie则输入登陆信息;以下为登陆页面代码:welcome.jsp
<%@page language="java" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta name="viewport" content=" 4000 width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <title>欢迎登录</title> </head> <body> <% //首先进入登陆页面先判断是否存在cookie,如果是跳转到欢迎界面 Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(int i=0;i<cookies.length;i++) { if(cookies[i].getName().equals("name")){ //如果cookie与保存的相等,即找到cookie response.sendRedirect("bootstrap.jsp"); } } } %> <br><br><br><br><br> <div class="jumbotron"> <div class="container"> <form action="servlet/servlet_login" method="post" class="form-horizontal" role="form"><br><br> <div class="form-group"> <label class="col-sm-2 col-md-offset-4 control-label" ><span class="glyphicon glyphicon-user"></span>数据库账户:</label> <div class="col-sm-6"> <input type="text" class="form-control" style="width:30%" name="name" value="" placeholder="请输入账户名"><br><br> </div> </div> <div class="form-group"> <label class="col-sm-2 col-md-offset-4 control-label"><span class="glyphicon glyphicon-ok-circle"></span>数据库密码:</label> <div class="col-sm-6"> <input type="text" class="form-control" style="width:30%" name="password" value="" placeholder="请输入密码"><br><br> </div> <!--打勾--> <div class="checkbox col-sm-2 col-md-offset-6"> <label> <input type="checkbox" name="save">保存密码 </label> </div> </div> <input type="submit" class="col-sm-1 col-md-offset-5 btn btn-primary" value="登陆"> <input type="reset" class="col-sm-1 col-md-offset-1 btn btn-primary" value="重置"> </form> <%!public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if(ip.startsWith("192")){} else{ip="";} return ip; }%> <label class="col-sm-4 col-md-offset-5 control-label"> <span class="glyphicon glyphicon-ok-circle" style="color: rgb(255, 0, 28); font-size: 14px;">你的IP地址为:</span> <%=getIpAddr(request)%></label>; </div> </div> </body> </html>
2.当用户输入登陆用户名及密码时,提交到后台的servlet_login,servlet此时从web.xml中读取数据库用户名及密码进入数据库,从中查询用户名及密码是否正确,如果正确则判断用户是否勾选了保存密码;
3.如果用户勾选了保存密码,则设置cookie存活时间为1天(60*60*24),如果没有勾选保存密码的话就设置cookie存活时间为19s(为了便于验证,当然也可以设置更久);以下为servlet_login代码:servlet_login.java
package servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class servlet_login */ @WebServlet("/servlet_login") public class servlet_login extends HttpServlet { private static final long serialVersionUID = 1L; Connection conn = null; Statement stmt = null; public void init(ServletConfig config) throws ServletException { //载入连接数据库的信息 //ServletContext application=this.getServletContext(); String driverClass =config.getInitParameter("driverClass"); String url=config.getInitParameter("url"); String username = config.getInitParameter("username"); String password = config.getInitParameter("password"); System.out.println(username+"\n"+password); //连接数据库MySQL,进行验证 try { Class.forName(driverClass); conn = DriverManager.getConnection(url,username,password);//得到连接 System.out.println("数据库连接成功"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }//加载驱动 catch (SQLException e) { e.printStackTrace(); } } /** * @see HttpServlet#HttpServlet() */ public servlet_login() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); //response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //先判断cookie是否存在 Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(int i=0;i<cookies.length;i++) { if(cookies[i].getName().equals("name")){ //如果cookie与保存的相等,即找到cookie response.sendRedirect("/Test666/bootstrap.jsp");break; } } } System.out.println("即将进行数据库查询"); //比较账号及密码是否正确 try { stmt = conn.createStatement(); String name=request.getParameter("name"); String password=request.getParameter("password"); System.out.println(name+" "+password+"\n"); String sql="select * from count where name='"+name+"' and password='"+password+"'"; ResultSet rs=stmt.executeQuery(sql); if(rs.next()==true) {//存在这个账户,密码 System.out.println("账户,密码正确"); //如果用户勾选了保存密码,则保留用户登陆信息,将用户名name存入Cookie //此处判断是否勾选保存密码 //response.getWriter().append(request.getParameter("save")); if(request.getParameter("save")!=null) {//如果勾选了保存密码 response.getWriter().append(request.getParameter("save")); Cookie cookie=new Cookie("name",request.getParameter("name")); cookie.setPath("/");//保证cookie存放的根目录相同 //设置cookie存活时间为1天 cookie.setMaxAge(60*60*24); //将cookie保存在客户端 response.addCookie(cookie); } else {//如果没有勾选保存密码 Cookie cookie=new Cookie("name",request.getParameter("name")); cookie.setPath("/");//保证cookie存放的根目录相同 //设置cookie存活时间为19s cookie.setMaxAge(19); //将cookie保存在客户端 response.addCookie(cookie); } //response.getWriter().append("欢迎登陆"); response.sendRedirect("/Test666/bootstrap.jsp"); System.out.println("测试,已跳转"); return ; } else { System.out.println("账户及密码错误"); //如果账户,密码错误,则返回登陆界面 response.sendRedirect("/Test666/welcome.jsp");return ; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }//Ending } }
4.添加cookie后,重定向到bootstrap.jsp欢迎页面,在欢迎页面先判断cookie是否存在,如果符合则显示欢迎页面内容,如果不符合则跳转到登陆页面。以下为欢迎页面代码:bootstrap.jsp
<%@ page language="java" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <title>Insert title here</title> </head> <body> <% Cookie[] cookies=request.getCookies(); boolean flag=false; if(cookies!=null){ System.out.println("cookie的长度为:"+cookies.length); for(int i=0;i<cookies.length;i++) { if(cookies[i].getName().equals("name")){ //如果cookie与保存的相等,即找到cookie flag=true;break; //response.sendRedirect("bootstrap.jsp"); } } } if(flag==false){response.sendRedirect("welcome.jsp");}//如果没找到cookie,就返回登陆界面 %> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <nav class="navbar navbar-default" role="navigation"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button> <a class="navbar-brand" href="#">导航1</a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"> <a href="#">导航2</a> </li> <li> <a href="#">导航3</a> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">导航4<strong class="caret"></strong></a> <ul class="dropdown-menu"> <li> <a href="#">Action</a> </li> <li> <a href="#">Another action</a> </li> <li> <a href="#">Something else here</a> </li> <li class="divider"> </li> <li> <a href="#">Separated link</a> </li> <li class="divider"> </li> <li> <a href="#">One more separated link</a> </li> </ul> </li> </ul> <form class="navbar-form navbar-left" role="search"> <div class="form-group"> <input type="text" class="form-control" /> </div> <button type="submit" class="btn btn-default">Submit</button> </form> <ul class="nav navbar-nav navbar-right"> <li> <a href="#"></a> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown<strong class="caret"></strong></a> <ul class="dropdown-menu"> <li> <a href="#">Action</a> </li> <li> <a href="#">Another action</a> </li> <li> <a href="#">Something else here</a> </li> <li class="divider"> </li> <li> <a href="#">Separated link</a> </li> </ul> </li> </ul> </div> </nav> <div class="jumbotron"> <h1> 欢迎登录! </h1> <p> 欢迎来到登录界面! </p> <p> <a class="btn btn-primary btn-large" href="#">Learn more</a> </p> </div> </div> </div> </div> </body> </html>
5.当然,如果访客没经过登陆,直接访问欢迎页面bootstrap.jsp也会由于判断cookie不存在而跳转到登陆页面,最后,web.xml设置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Test666</display-name> <servlet> <servlet-name>servlet_login</servlet-name> <servlet-class>servlet.servlet_login</servlet-class> <init-param> <param-name>driverClass</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/count?useUnicode=true&characterEncoding=utf-8</param-value> </init-param> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>160337</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>servlet_login</servlet-name> <url-pattern>/servlet/servlet_login</url-pattern> </servlet-mapping> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>Filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>welcome.jsp</welcome-file> </welcome-file-list> </web-app>
相关文章推荐
- Servlet--保存cookie实现保存用户登录状态
- 利用JSP+JS+CSS+Servlet实现用户登录,保存用户名密码功能
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
- 服务器搭建:servlet+dao+javabean+jsp实现简单的用户登录(一)
- jsp使用servlet实现用户登录 及动态验证码
- 使用cookie保存用户的登录状态——初步实现
- 在jsp中用bean和servlet联合实现用户注册、登录
- 基于MVC 用户登录的实现(JavaBean + Servlet + JSP)
- 在jsp中用bean和servlet联合实现用户注册、登录
- 在jsp中用bean和servlet联合实现用户注册、登录
- servlet实现自动登录,并显示保存的用户信息
- jsp+servlet 实现登录状态
- JSP+JavaBean+Servlet技术实现某网站用户注册和登录功能
- 使用session保存用户登录状态(实现单点登录)
- java/jsp/servlet连接mysql实现用户登录
- 服务器搭建:servlet+dao+javabean+jsp实现简单的用户登录
- 使用cookie保存用户的登录状态——初步实现
- JSP+SERVLET实现后登陆用户挤掉之前登录用户
- 在jsp中用bean和servlet联合实现用户注册、登录
- 实现jsp页面显示用户登录信息,利用session保存。