Java实战之实现用户登录

一、前言


二、案例需求

1.编写login.html登录页面,username&password两个输入框

2.使用Druid数据库连接池技术,操作mysql,day14数据库中的user表

3.使用jdbcTemplate技术封装JDBC

4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎你

5.登录失败跳转到FailServlet展示:登录失败密码错误

三、开始第一步

首先创建项目,写html页面,配置文件,jar包

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

druid.properties配置文件:

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///day14
username=root
password=root
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

导入jar包:

四、第二步

创建user类:

package com.wzc.domain;
//用户的实体类
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 + '\'' +
                '}';
    }
}

五、第三步

创建jdbcUtils工具类

package com.wzc.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

//JDBC工具类 使用Druid连接池
public class JDBCUtils {
    private static DataSource ds ;
    static {
        try {
//            加载配置文件
            Properties pro = new Properties();
//        使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
//            初始化连接池对象
             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();
    }

}

创建UserDao类,提供login方法:

package com.wzc.dao;

import com.wzc.domain.User;
import com.wzc.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

//操作数据库中user表的类
public class UserDao {
//    声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

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

}

编写loginServlet类:

package com.wzc.web.servlet;

import com.wzc.dao.UserDao;
import com.wzc.domain.User;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//       设置编码
        req.setCharacterEncoding("utf-8");
/*//       获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
//        封装user对象
        User loginUser = new User();
        loginUser.setUsername(username);
        loginUser.setPassword(password);*/
//        获取所有请求参数
        Map<String,String[]> map = req.getParameterMap();
//        创建User对象
        User loginUser = new User();
//        使用BeanUtils封装
        try {
            BeanUtils.populate(loginUser,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
//        调用UserDao的login方法
        UserDao dao = new UserDao();
        User user = dao.login(loginUser);
//        判断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);
    }
}

六、第四步

编写SuccessServlet类:

package com.wzc.web.servlet;

import com.wzc.domain.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "/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()+",欢迎你");
        }
    }

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

编写FailServelt类

package com.wzc.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@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);
    }
}

输入错误的账号和密码

登录失败提示:

七、总结

login.html中form表单的action路径写法:虚拟路径+Servlet的资源路径

**BeanUtils工具类,简化数据封装:**用于封装javaBean

javaBean:标准的java类 功能:封装数据

有一下四点要求:

1.类必须被public修饰

2.必须提供空参的构造器

3.成员变量必须使用private修饰

4.提供公共setter和getter方法

属性:setter和getter方法截取后的产物
例如:getUsername()–>Username–>username
可见username就是属性
方法有三种:

1.setProperty()
2.getProperty()
3.populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中(最常用)

package com.wzc.test;

import com.wzc.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import java.lang.reflect.InvocationTargetException;

public class BeanUtilsTest {
    @Test
    public void test(){
        User user = new User();
        try {
            BeanUtils.setProperty(user,"hehe","male");
            System.out.println(user);
            String gender = BeanUtils.getProperty(user, "hehe");
            System.out.println(gender);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

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

(0)

相关推荐

  • Java 实现模拟用户登录的示例代码

    创建一个用户类类型的集合,手动输入用户库 主要是判定输入的用户名和密码是否与库中的匹配 做好区别是用户名输入错误还是密码输入错误的提示. 定义用户类 public class User{ String username; String keyword; public User(String username, String keyword) { this.username = username; this.keyword = keyword; } } 主程序 import java.util.A

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

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

  • JavaWeb使用Cookie模拟实现自动登录功能(不需用户名和密码)

    其中包含两个jsp文件,分别为login.jsp和index.jsp 代码如下: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

  • Java struts2 validate用户登录校验功能实现

    首先贴一下搭配的环境: 配置: Eclipse4.3.2 jdk1.7_45 Mysql 5.0+ 然后切入正题: 1.login.jsp 主要是使用OGNL 标签 也可使用html form表单,调用LoginAction.action,以post 方式传输. 在LoginaAction 经过判断,然后会有提示信息,需要用到 <s:fielderror/>来显示. <%@ taglib uri="/struts-tags" prefix="s"%

  • Java实现用户不可重复登录功能

     总述 前些天,无意之间想到这个问题,感觉挺实用,有必要整理一下.随手写了一个简单的mode,感觉并不算难.思路理顺其实挺简单的. 为实现用户不可同时登陆,只要想想现实中新浪,百度等,只要一处登陆就将另一处的给"挤"下去,就可以知道实现结果为何.然后再逆推之,即可形成较为清晰的思路.我们一起来探讨一下. 首先,我们得明白用户登录使用什么登陆的,即用户在线的原理.这只是将用户的对象存放在了session中而已,然后再frame中进行调用,其他特定页面也进行直接引用就行.那么实现"

  • Java+mysql用户注册登录功能

    最近刚刚开始学习mysql,所以就写了这个很基本的用户注册登录的功能来练练手.虽然这个很简单,但是我还是看到了自己学习的进步,很开心.哈哈哈. 这里要注意数据表的建立: 直接上代码吧,里面注释很详细了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以实现用户的注册和登录 */ private static String username;//用户登录注册的姓名 privat

  • Java实现多用户注册登录的幸运抽奖

    本文实例为大家分享了Java实现简单幸运抽奖的具体代码,供大家参考,具体内容如下 代码模块: User类: package test1; public class User { private String userName; private String password; private int vipID; public User(String userName,String password,int vipID) { this.userName = userName; this.pass

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

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

  • JavaWeb实战之用Servlet+JDBC实现用户登录与注册

    一.前言 使用到的技术栈: (1)JDBC (2)Servlet (3)MySQL 二.准备工作 (1)书城用户数据库与表创建 (2)编写用户类对象JavaBean (3)编写JdbcUtils对数据库进行交互(使用德鲁伊数据库连接池) (4)编写web层 最终编写好的第二阶段登陆注册文件结构为 dao中定义了基础的操作数据库代码,具体功能有 1.Insert.update.delete(修改) 2.查询一个对象(返回一个对象) 3.查询一个数组对象(数组返回多个对象) 4.返回某一个特定值对象

  • Java实战之实现用户登录

    一.前言 二.案例需求 1.编写login.html登录页面,username&password两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14数据库中的user表 3.使用jdbcTemplate技术封装JDBC 4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎你 5.登录失败跳转到FailServlet展示:登录失败密码错误 三.开始第一步 首先创建项目,写html页面,配置文件,jar包 <!DOCTYPE html> <

  • java使用Cookie判断用户登录情况的方法

    本文实例为大家分享了java使用Cookie判断用户登录情况的方法,供大家参考,具体内容如下 1.判断是否登录 public boolean isLogin() { Set<Cookie> cookies = this.browser.getCookies(); String JSESSIONIDID = "JSESSIONID"; String sessionIdID = "sessionId"; String loginID = "logi

  • Python文件操作实战案例之用户登录

    目录 一.前言 二.案例:用户登录 1.案例分析 2.程序设计 2.1 main() 2.2 c_flag() 2.3 init() 2.4 print_login_menu() 2.5 user_select() 2.6 root_login() 2.7 user_register() 2.8 user_login() 3.功能演示 总结 一.前言 在上一小节,我们介绍了文件的基本操作以及数据交换的格式,为了巩固我们上一节文件操作的知识. 在这里我们做一个最基本的案例:用户登录 二.案例:用户

  • java中使用Filter控制用户登录权限具体实例

    学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

  • 基于IO版的用户登录注册实例(Java)

    今天学的是用户登录注册功能. 4个包: itcast.cn.user包 User.java 用户类,描述用户基本信息,包括成员变量,无参构造函数,带参构造(可有可无).get和set方法 package itcast.cn.day22; /* * 用户基本描述包类 */ public class User { private int userName; private int passWord; public User(){ super(); } public User(int userName

  • java编程基础之模仿用户登录代码分享

    上一篇文章我们了解了Java背包问题求解实例代码,接下来我们看看Java中模仿用户登录的相关代码,下面是具体内容. 基于用户从控制台输入模拟的简陋用户登录验证Demo原理: 利用 Scanner 类中 nextLine() 提取用户从控制台输入的字符串信息 利用 String 类的 equals 方法进行用户输入验证 import java.util.Scanner; public class Login { public static void main(String[] args) { //

  • Java用户登录验证代码

    废话不多说了,关键代码如下所示: import java.util.*; public class Demo04 { public static void main(String[] args){ //声明变量 String root="jim";//用户名 int passwd=123456;//密码 int time=0;//循环次数 int sum=0;//总计次数 Scanner input=new Scanner(System.in);//获取键盘输入 //for循环内 fo

  • Java Web用户登录实例代码

    实现功能: 1.用户登陆.注销 2.利用session记录用户登陆信息 3.在JSP中展示已登陆用户信息 实现原理: 登陆后通过判断用户名和密码是否和存储的一致,如果一致,就把用户信息放到session中储存:如果不一致就提示信息,并且返回登陆页面. 显示信息页面上固定从session中找用户登陆信息,找到就显示用户信息,没找到就显示登陆框. 注销很简单,就是清空session信息. 主要文件: 1.LoginAction:struts2的Action类,用于处理JAVA端的主要登陆和登出逻辑.

  • Java组件javabean用户登录实例详解

    本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等. 1.关于javabean JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取.众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性. 2.系统架构 2.1登录用例图 2.2页面流程图 2.3系统架构图

随机推荐