最近在做课程设计,之前有人问我用户登录的实现,刚又有同学问到,于是我决定还把这个问题的实现写一下吧,免得要一遍一遍的去讲……原谅我的懒惰=_=

===========================================

实现原理:

前提:用户表中只有三个字段:id、username、password;

用户输入用户名、密码和验证码,然后点击登陆,会以“post”方式将该表单提交给后台验证登录的servlet,servlet会得到用户输入的用户名、密码(验证码的使用我会在其他博客中给出,今天先不讨论),然后根据用户名到数据库中查询出该用户名下对应的信息(在这里就是密码),如果该用户名不存在则直接提示错误“用户名不存在”;如果用户名存在,则将用户输入的密码与在数据库中查到的密码进行比较,不同则提示用户“密码错误”,密码相同则再进行一次比较,如果该用户是管理员则跳转到管理员相应页面,如果该用户是普通用户啊则跳转到登录成功页面;

java实现图片验证码链接如下:
http://blog.csdn.net/lmb55/article/details/46295355

===========================================

具体实现:(基于整体系统的实现)

User.java(一个存放用户信息的javaBean)

UserDao.java(对用户进行操作的接口类,其中定义了一个login(String userName)方法,功能:通过用户名来查询出用户的所有信息,返回一个User用户对象)
UserDaoImpl.java(UserDao接口的实现类)

SystemManager.java(实现系统功能的接口类,在这里是实现了系统的登录功能,其中定义了一个login(String userName, String passWord)方法,功能:调用UserDaoImpl.java中的login方法通过username获得的User对象,然后与密码进行比较,验证登陆情况)
SystemManagerImpl.java(SystemManager接口的实现类)

LoginServlet.java(验证登录的servlet,功能:获取前台数据,根据用户填写的数据进行相应的跳转)
login.jsp(登陆界面)

DBUtil.java(创建数据库连接的工具类,当需要创建数据库连接时,只需要调用该类的getConnection()方法即可)
dbconfig.properties(属性文件,数据库连接中需要用到的一些属性常量在这里给出)

在这个过程中很重要的一点是创建数据库连接,在实现一个系统的过程中,我们要用到很多次数据库连接,每用到一次就创建一次非常麻烦,所以我就把数据库连接单独分离出来,要用到的时候只需要调用相应类的getConnection()方法即可,有关数据库连接的具体实现,我会在另外一篇博客中给出,这里就直接使用了:
链接如下:
http://blog.csdn.net/lmb55/article/details/46295325

===========================================
代码如下:

User.java

package com.ymw.domain;public class User {private Integer id;private String name;private String passWord;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return passWord;}public void setPassword(String passWord) {this.passWord = passWord;}
}

UserDao.java

package com.ymw.dao;import com.ymw.domain.User;public interface UserDao {public User login(String userName);
}

UserDaoImpl.java

package com.ymw.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ymw.domain.User;
import com.ymw.exception.DataBaseException;
import com.ymw.util.DBUtil;public class UserDaoImpl implements UserDao {@Overridepublic User login(String userName) {Connection connection = DBUtil.getConnection();PreparedStatement preparedStatement = null;ResultSet resultSet = null;User user = null;try {String sql = "select * from users where name=?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, userName);resultSet = preparedStatement.executeQuery();while (resultSet.next()) {user = new User();user.setId(resultSet.getInt("id"));user.setName(userName);user.setPassword(resultSet.getString("passWord"));}} catch (SQLException e) {e.printStackTrace();throw new DataBaseException();} catch (Exception e) {e.printStackTrace();} finally {}return user;}
}

SystemManager.java

package com.ymw.service;import com.ymw.domain.User;public interface SystemManager {public User login(String userName, String passWord);}

SystemManagerImpl.java

package com.ymw.service;import com.ymw.dao.UserDao;
import com.ymw.dao.UserDaoImpl;
import com.ymw.domain.User;
import com.ymw.exception.UserNotFoundException;public class SystemManagerImpl implements SystemManager {private UserDao userDao=new UserDaoImpl();@Overridepublic User login(String userName, String passWord) {User user = userDao.login(userName);if(user != null){if(user.getPassword().equals(passWord)){// 密码正确return user;} else {// 密码错误throw new UserNotFoundException("500");}} else {//用户为空throw new UserNotFoundException("404");}}
}

LoginServlet.java

package com.ymw.web.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.ymw.domain.User;
import com.ymw.exception.DataBaseException;
import com.ymw.exception.UserNotFoundException;
import com.ymw.service.SystemManager;
import com.ymw.service.SystemManagerImpl;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//解决乱码问题String userName = request.getParameter("userName");String passWord = request.getParameter("passWord");SystemManager systemManager = new SystemManagerImpl();try {User user = systemManager.login(userName, passWord);//把用户的信息放到session中存起来HttpSession session = request.getSession();session.setAttribute("user", user);if(user.getName().equals("admin")){//如果是管理员登陆,则跳到管理员相应界面response.sendRedirect("admin.jsp");}else{//如果是普通用户则跳转到登录成功页面response.sendRedirect("login_success.jsp");}} catch (UserNotFoundException e) {             String message="";if ("500".equals(e.getMessage())) {message = "密码错误";} else {message  = "用户不存在";}//如果出现错误,则返回到登陆页面,并将用户输入的错误信息带回request.setAttribute("message", message);request.setAttribute("userName", userName);request.setAttribute("passWord", passWord);request.getRequestDispatcher("login.jsp").forward(request, response);} catch (DataBaseException e) {e.printStackTrace();request.getRequestDispatcher("dataBase.jsp").forward(request,response);} catch (Exception e) {e.printStackTrace();request.getRequestDispatcher("error.jsp").forward(request, response);}}
}

login.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用户登录</title>function checkForm(){return true;
}
</script></head><body>
<div><div><div><h1>用户登录</h1><form id="loginForm" method="post" action="login.do" onsubmit="return checkForm()"><table> ${message }<tr><td用户名:</td> <td><input class="text" type="text" name="userName" value="${userName }"  onfocus="FocusItem(this)" onblur="CheckItem(this);" /><span></span></td></tr><tr><td登录密码:</td><td><input class="text" type="password" id="passWord" name="passWord" value="${passWord }" onfocus="FocusItem(this)" onblur="CheckItem(this);" /><span></span></td></tr><tr><td>验证码:</td><td><input  type="text" name="veryCode" onfocus="FocusItem(this)" onblur="CheckItem(this);" /><img  src="" /><span></span></td></tr><tr><td></td><td><input type="submit" name="submit" value="立即登录" /></label></td></tr></table></form>     </div></div>
</body>
</html>

DBUtil.java

package com.ymw.util;import java.sql.Connection;
import java.sql.SQLException;
import java.util.ResourceBundle;
import org.apache.commons.dbcp.BasicDataSource;public class DBUtil {public static final String DRIVER_CLASS;public static final String URL;public static final String USER_NAME;public static final String PASSWORD;private static BasicDataSource bds = new BasicDataSource();static {ResourceBundle rb = ResourceBundle.getBundle("com.ymw.util.dbconfig");DRIVER_CLASS = rb.getString("DRIVER_CLASS");URL = rb.getString("URL");PASSWORD = rb.getString("PASSWORD");USER_NAME = rb.getString("USER_NAME");bds.setDriverClassName(DRIVER_CLASS);bds.setUrl(URL);bds.setUsername(USER_NAME);bds.setPassword(PASSWORD);bds.setInitialSize(100);bds.setMinIdle(20);bds.setMaxActive(150);}public static Connection getConnection() {Connection connection = null;try {connection = bds.getConnection();} catch (SQLException e) {e.printStackTrace();}return connection;}
}

dbconfig.properties

登陆界面:

servlet实现用户登录相关推荐

  1. 基于 JSP + Servlet 的用户登录验证

    综合案例--基于 JSP + Servlet 的用户登录验证 [例6-1] 实现一个简单的用户登录验证程序,如果用户名是 abc ,密码是 123,则显示欢迎用户的信息,否则显示"用户名或密 ...

  2. Servlet——简单用户登录实例+http协议解析

    编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view;import java.io.IOException; import java.io.Pri ...

  3. Servlet+jsp用户登录加上验证码

    最近公司有个项目被客户拿去进行漏洞扫描,发现用户登录太简单,容易被暴力破解.当然发现的问题很多,什么反射型XSS,存储型XSS,敏感信息泄露等等.但是我们今天不讲这么多,就说说如何修复暴力破解的问题. ...

  4. java servlet 注册登录,JSP+JavaBean+Servlet实现用户登录与注册

    数据库 create database student; use student; create table user( id int primary key auto_increment, user ...

  5. servlet html登录,Servlet实现用户登录

    1.登录过程分析: 通过表单收集用户的数据,Servlet通过request对象获得用户提交的数据,服务器还需要从数据库中通过sql语句查询有没有表单提交的数据中的用户.有则登录成功,否则,登录失败. ...

  6. 网站用户登录验证:Servlet+JSP VS Struts书剑恩仇录

    ? 什么是Struts框架 –从不同的角度看待Struts框架 –Struts框架的优点 ? 下载安装Struts框架 –下载配置Struts框架 –测试Struts框架 –安装Struts应用程序 ...

  7. jsp java 登陆_jsp+java servlet实现简单用户登录

    jsp+java servlet实现简单用户登录(使用数据库,包括注册页面) 功能介绍 本项目通过使用jsp和servlet实现简单的用户登录.主要逻辑为:如果用户不存在,则首先进行注册(注册信息同步 ...

  8. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...

  9. 利用Servlet实现用户永久登录

    在Servlet中通过Cookie技术实现,在Servlet中输入用户账号,密码和有效期,将账号信息保存在Cookie中,设置Cookie的最大保存时间,将此Cookie保存在客户端的Cookie中 ...

最新文章

  1. boost::log模块实现格式化程序流的测试程序
  2. Java学习_强制类型转换
  3. MongoDB实战指南(二):索引与查询优化
  4. 剑指offer:二叉搜索树的第k个结点(中序遍历)
  5. Git教程_2 所有操作讲解
  6. (转)Dinkelbach算法(01二分规划更优解法)
  7. python显示文字框_python如何使用文本框
  8. Kettle下载安装教程
  9. 基于STM32通过RTC唤醒低功耗模式
  10. sublime常用主题---
  11. 哥德巴赫猜想 php,哥德巴赫猜想的程序验证
  12. 配置8266连接中移物联网OneNet平台
  13. CentOS7中怎样设置静态IP
  14. 跨端融合!探索前沿科技无限可能,深圳腾讯2018TLC大会再度来袭,早鸟票半价最后4天!
  15. OpenGL(十二)——Qt OpenGL绕着坐标轴旋转多边形
  16. rust语言与go语言_用户调查显示,Rust语言很难学习和使用
  17. 图片无缝滚动BootStrap 轻松实现
  18. 将文件传到免费服务器上,将文件传到服务器上
  19. 台湾云门舞集今年将赴北京、上海等地巡演
  20. 阿里云大学安全课程-阿里云首席安全研究员吴瀚清:WannaCry事件最“细思恐极“的一个事实是?

热门文章

  1. iOS开发点击UIButton实现UIView的旋转
  2. ASA/PIX: Load balancing between two ISP - options
  3. [Asp.Net+C#]Datagrid使用技巧一(怎样灵活控制表头)
  4. redhat es4 u5 下安装ORACLE 11G.
  5. JavaScript对象及初始面向对象
  6. android setGravity()的使用
  7. DatePickerDialog 简单用法
  8. 结构型模式—享元模式
  9. 性能瓶颈分析整体思路
  10. Mybatis与Spring整合之配置文件方式