Servlet实现简单的用户登录功能实例代码

1、创建html界面

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <form action="" method="post">
  用户名:<input type="text" name="username"> <br>
  密码:<input type="password" name="password"><br>

  <input type="submit" value="登录">

 </form>
</body>
</html>

2 、创建数据库

CREATE TABLE USER(
			id INT PRIMARY KEY AUTO_INCREMENT,
			username VARCHAR(32) UNIQUE NOT NULL,
			PASSWORD VARCHAR(32) NOT NULL
		);

3、创建用户实体类

	public class User {

		 private int id;
		 private String username;
		 private String password;
  	 public int getId() {
		  return id;
		 }

		 public void setId(int id) {
		  this.id = id;
		 }

		 public String getUsername() {
		  return username;
		 }

		 public void setUsername(String username) {
		  this.username = username;
		 }

		 public String getPassword() {
		  return password;
		 }

		 public void setPassword(String password) {
		  this.password = password;
		 }

		 @Override
		 public String toString() {
		  return "User{" +
		    "id=" + id +
		    ", username='" + username + '\'' +
		    ", password='" + password + '\'' +
		    '}';
		 }
		}

4、创建jdbc工具类

这里使用的是c3p0 / druid 两种数据库连接池技术 分别需要在项目导入相应的jar包

public class JDBCUtils {

		 private static DataSource ds ;

		 static {

		  try {
		   //1.加载配置文件
		   Properties pro = new Properties();
		   //使用ClassLoader加载配置文件,获取字节输入流
		   InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
		   pro.load(is);

		   //2.初始化连接池对象
		   ds = DruidDataSourceFactory.createDataSource(pro);

		  } catch (IOException e) {
		   e.printStackTrace();
		  } catch (Exception e) {
		   e.printStackTrace();
		  }
		 }

		 /**
		  * 获取连接池对象
		  */
		 public static DataSource getDataSource(){
		  return ds;
		 }
  /**
		  * 获取连接Connection对象
		  */
		 public static Connection getConnection() throws SQLException {
		  return ds.getConnection();
		 }

 system.out.println("=============================================================")
public class JDBCButil {
	final static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
	// 获取连接方法
	// 返回一个连接对象
	public static Connection getCon() {
		// 连接使用c3p0进行获取
		// 使用c3p0数据库连接池获取连接
		Connection connection = null;
		try {
			connection = comboPooledDataSource.getConnection();
		} catch (SQLException e) {
			System.err.println("获取连接失败");
			return null;
		}
		return connection;
	}

	// DML方法
	// 不支持事务 单条sql语句执行
	public static boolean DML(String sql, Object... o) {
		// 获取连接
		Connection con = getCon();
		// 创建预编译对象
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			for (int i = 0; i < o.length; i++) {
				ps.setObject((i + 1), o[i]);
			}
			ps.executeUpdate();
		} catch (SQLException e) {
			System.out.println("查询执行失败:" + sql);
			return false;
		}
		return true;
	}

	// DML方法
	// 支持事务 多条sql语句执行
	public static boolean DML(Connection con, String sql, Object... o) {
		// 创建预编译对象
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			for (int i = 0; i < o.length; i++) {
				ps.setObject((i + 1), o[i]);
			}
			ps.executeUpdate();
		} catch (SQLException e) {
			System.out.println("查询执行失败:" + sql);
			return false;
		}
		return true;
	}

	// 查询dql语句方法
	public static <E> ArrayList<E> DQL(String sql, Class<E> c, Object... o) {
		ArrayList<E> list = new ArrayList<>();
		try {
			// 获取连接
			Connection con = getCon();
			// 准备预编译对象
			PreparedStatement ps = con.prepareStatement(sql);
			// 获取元数据 准备存储所有列名的数组
			ResultSetMetaData metaData = ps.getMetaData();
			// 创建指定长度用于存储列名的数组
			String[] names = new String[metaData.getColumnCount()];
			// 循环为names数组进行赋值
			for (int i = 0; i < names.length; i++) {
				names[i] = metaData.getColumnLabel(i + 1);// 获取指定列名
			}

			for (int i = 0; i < o.length; i++) {
				ps.setObject(i+1, o[i]);
			}
			// 执行sql返回结果集
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {

				// 每一行数据就是一个对象
				// 使用反射创建对象
				E obj = c.newInstance();

				// 当前行所有列名 在names数组中存储
				// 循环names数组取出当前行对应数据
				for (String colname : names) {
					Object value = rs.getObject(colname);// 获取列名对应值
					// 将值存入相应对象
					// 使用反射获取类中同名的属性对象
					Field field = c.getDeclaredField(colname);
					// 私有属性使用前必须赋权
					field.setAccessible(true);
					// 调用属性对象的set方法为指定对象进行赋值
					field.set(obj, value);
				}

				// 列名循环结束后对应对象属性已经全部进行赋值
				// 将对象存储至集合中
				list.add(obj);
			}

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return list;
	}
}ublic class JDBCUtils {

		 private static DataSource ds ;

		 static {

		  try {
		   //1.加载配置文件
		   Properties pro = new Properties();
		   //使用ClassLoader加载配置文件,获取字节输入流
		   InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
		   pro.load(is);
		   //2.初始化连接池对象
		   ds = DruidDataSourceFactory.createDataSource(pro);

		  } catch (IOException e) {
		   e.printStackTrace();
		  } catch (Exception e) {
		   e.printStackTrace();
		  }
		 }

		 /**
		  * 获取连接池对象
		  */
		 public static DataSource getDataSource(){
		  return ds;
		 }

5、创建提供登录方法的userdao

	public class UserDao {

		 //声明JDBCTemplate对象共用
		 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
		 /**
		  * 登录方法
		  * @param loginUser 只有用户名和密码
		  * @return user包含用户全部数据,没有查询到,返回null
		  */
		 public User login(User loginUser){
		  try {
		   //1.编写sql
		   String sql = "select * from user where username = ? and password = ?";
		   //2.调用query方法
		   User user = template.queryForObject(sql,
		     new BeanPropertyRowMapper<User>(User.class),
		     loginUser.getUsername(), loginUser.getPassword());
		       return user;
		  } catch (DataAccessException e) {
		   e.printStackTrace();
		   return null;
		  }
		 }
		}

6、编写登录的servlet

@WebServlet("/loginServlet")
		public class LoginServlet extends HttpServlet {
		 @Override
		 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		  //1.设置编码
		  req.setCharacterEncoding("utf-8");
		  //2.获取请求参数
		  String username = req.getParameter("username");
		  String password = req.getParameter("password");
		  //3.封装user对象
		  User loginUser = new User();
		  loginUser.setUsername(username);
		  loginUser.setPassword(password);

		  //4.调用UserDao的login方法
		  UserDao dao = new UserDao();
		  User user = dao.login(loginUser);

		  //5.判断user
		  if(user == null){
		   //登录失败
		   req.getRequestDispatcher("/failServlet").forward(req,resp);
		  }else{
		   //登录成功
		   //存储数据
		   req.setAttribute("user",user);
		   //转发
		   req.getRequestDispatcher("/successServlet").forward(req,resp);
		  }

		 }
		 @Override
		 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		  this.doGet(req,resp);
		 }
		}

7、 编写FailServlet和SuccessServlet类

	public class SuccessServlet extends HttpServlet {
		 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		  //获取request域中共享的user对象
		  User user = (User) request.getAttribute("user");

		  if(user != null){
		   //给页面写一句话

		   //设置编码
		   response.setContentType("text/html;charset=utf-8");
		   //输出
		   response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您");
		  }
		  }
		 @WebServlet("/failServlet")
		public class FailServlet extends HttpServlet {
		 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		  //给页面写一句话

		  //设置编码
		  response.setContentType("text/html;charset=utf-8");
		  //输出
		  response.getWriter().write("登录失败,用户名或密码错误");

		 }

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

到此这篇关于Servlet实现简单的用户登录功能的文章就介绍到这了,更多相关Servlet实现用户登录功能内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

  • servlet实现用户登录小程序

    当时在上JAVA课的时候,老师就给我们讲过SUN公司的servlet是一个典型的JAVA语言的应用.现在在上网络编程课的时候,终于接触到了这种服务器小程序. 现在我们就用servlet来简单实现一个用户登录的小程序. 首先,servlet也是一个JAVA类,新建一个JAVA类,它直接继承了HttpServlet类: @WebServlet(name = "ServletTest") public class ServletTest extends HttpServlet { @Over

  • servlet+jsp实现过滤器 防止用户未登录访问

    我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思路: 一种是在jsp页面进行session的判断,如果不存在该用户的session,就跳转到登录页面,否则执行jsp页面代码,但是你会发现这样做逻辑也简单,但是非常麻烦,如果有很多个jsp,那么就要写多个判断. 另一种则是利用过滤器,访问页面时都进行过滤验证,如果存在该用户session,则访问该页

  • Servlet实现简单的用户登录功能实例代码

    1.创建html界面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用户名:<input type=&

  • JavaWeb简单用户登录注册实例代码(有验证码)

    需求 编写login登录界面(用户名,密码,验证码,登陆按钮,注册按钮) 设计关系数据库(编号,用户名,密码) 编写注册功能,将数据存储在数据库中.(姓名不能重复,设为主键,重复会注册失败) 编写登录功能 .首先获取验证码,先判断验证码是否正确,不正确则显示验证码错误.验证码正确后再获取用户名和密码,进行数据库的搜索比对,若正确则重定向到成功的界面,并且将用户名显示. jar包 技术选型 Servlet + JSP + Mysql + JDBCTemplate + Druid + BeanUti

  • Java CRM系统用户登录功能实现代码实例

    用户登录功能后台代码实现: UserMapper接口查询方法定义 /** * * @param userName * @param userPwd * @param roleName * 查询用户记录 * @return */ User queryUser(@Param("userName")String userName); <!-- 查询用户 --> <select id="queryUser" resultMap="BaseResu

  • JavaScript实现简单的图片切换功能(实例代码)

    代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>图片切换</title> <style> *{ margin: 0; padding: 0; } .box{ width: 200px; height: 300px; margin: 50px auto; padding: 20p

  • Python 实现12306登录功能实例代码

    下面一段代码给大家带来了python实现12306登录功能,具体代码如下所示: #!/usr/bin/env python import requests import urllib.parse import random import time req = requests.session() import sys import re import urllib3 import getpass # 密文输入 urllib3.disable_warnings() # 登陆------------

  • Vue中保存用户登录状态实例代码

    首先我们假设,这里的登录组件(register.vue)是App.vue组件的子组件,是通过路由进入登录组件的. 登录组件中用户点击登录后,后台会传过来一个用户名,我的App.vue组件中需要拿到这个用户名,并将上面的"登录注册"字样变为"用户名". 为了保证用户刷新后用户名不会消失,这里我用到了sessionStorage 代码如下: register.vue中用户点击登录触发signIn方法 signIn(){ this.formData = $(".

  • ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能

    简单来说,jQuery validation插件就是来校验表单form里面元素输入的内容是否满足业务规则,如果不满足,可以给出用户自定义的提示信息.该插件不仅默认有一些校验规则,如校验内容是否为空,内容的长度是否符合给定的值,还可以根据用户自定义业务规则,而且错误提示信息,也可以根据用户的要求自定义显示.看来这个插件的功能确实很强大,是不是迫不及待想使用了.好的,那我们就开始简介如何使用它. jQuery validation 插件下载地址:http://plugins.jquery.com/p

  • JavaWeb实现简单的自动登录功能

    本文实例为大家分享了JavaWeb实现简单的自动登录功能的具体代码,供大家参考,具体内容如下 用最近所学的知识点实现自动登录,主要有: 1.Filter过滤器 2.session & cookie 一.需求分析 二.准备工作 1. 项目目录 2. 导入相应的jar包 三.代码实现 1. 搭建环境 1.1 搭建数据库.数据库表 数据库[user],数据库表[t_user] 1.2 搭建页面 登录页面[login.jsp] <body> <form action="Logi

  • Flask框架通过Flask_login实现用户登录功能示例

    本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户登录状态来判断是否允许访问视图函数. 运行环境: python3.5 Flask 0.12.2 Flask_Login 0.4.1 Flask-WTF 0.14.2 PyMySQL 0.8.0 WTForms 2.1 DBUtils 1.2 目录结构: 直接看代码,具体功能有注释 Model/Use

随机推荐