一.用户登录案例需求:

1.编写login.html登录页面
            username & password 两个输入框
        2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
        3.使用JdbcTemplate技术封装JDBC
        4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
        5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

二.功能分析

图1 功能分析图

三.开发步骤

3.1. 创建项目,导入html页面,配置文件,jar包

3.2. 创建数据库环境

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

3.3创建前端html和css页面

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

3.4 创建类User,封装前端传过来的参数信息

             /*** 用户的实体类*/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;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}}

3.5 创建包util,编写工具类JDBCUtils,主要建立数据库连接池对象

package util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import javax.xml.crypto.Data;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;/*** JDBC工具类 使用Durid连接池*/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();}}

3.6 创建包dao,创建类UserDao,提供login方法,主要是与mysql数据库连接,对数据库进行操作

package dao;import cn.itcast.domain.User;import cn.itcast.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 {//1.编写sqlString 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;}}}

3.7. 编写LoginServlet类,主要是进行前端参数数据和UserDao进行交互

package servlet;import cn.itcast.dao.UserDao;
import cn.itcast.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("/loginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected 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);*///2.封装成对象,可以使用BeanUtils类直接封装前端传过来的参数信息;需提前导入jar包//下面等同于上面注释的语句Users loginUsers=new Users();Map<String,String[]> pMap=req.getParameterMap();//使用BeanUtil封装对象try {BeanUtils.populate(loginUsers, pMap);} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}//4.验证用户名和密码//4.调用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判断userif(user == null){//登录失败req.getRequestDispatcher("/failServlet").forward(req,resp);}else{//登录成功//存储数据req.setAttribute("user",user);//转发req.getRequestDispatcher("/successServlet").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}}

3.8.编写FailServlet和SuccessServlet类

           @WebServlet("/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);}}

其他:

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

BeanUtils工具类,简化数据封装
            * 用于封装JavaBean的
            1. JavaBean:标准的Java类
                1. 要求:
                    1. 类必须被public修饰
                    2. 必须提供空参的构造器
                    3. 成员变量必须使用private修饰
                    4. 提供公共setter和getter方法
                2. 功能:封装数据

最后:用户登录的模块功能全部结束!!!

案例:用户登录界面最全详解(JavaWeb)相关推荐

  1. html 登录界面js代码,详解JS实现系统登录页的登录和验证

    这篇文章用JS显示表单的登录以及验证和对键盘的监听,这里有两种方法,一种是无需用户验证直接登录,一种是需要账户密码匹配才可登录. 1. html代码 登 录 2.CSS样式 .content{ pad ...

  2. asp.net 登录验证 mysql_Asp.net mvc验证用户登录之Forms实现详解

    这里我们采用asp.net mvc 自带的AuthorizeAttribute过滤器验证用户的身份,也可以使用自定义过滤器,步骤都是一样. 第一步:创建asp.net mvc项目, 在项目的App_S ...

  3. HTML登录界面的实现详解

    前言序锦 https://blog.csdn.net/HuaCode/article/details/81413387前阵子参加学校的暑期实习,我作为项目负责人,除了进行统筹规划,整体运营以及进度安排 ...

  4. Linux-shell-完全详解

    Linux-shell-完全详解(1) 一. Shell简介:什么是Shell,Shell命令的两种执行方式1 二. 几种常见的Shell1 三. Shell脚本语言与编译型语言的差异2 四.什么时候 ...

  5. hbuilder在服务器端打开网页,HBuilderX配置tomcat外部服务器查看编辑jsp界面的方法详解...

    本文关键详细介绍了HBuilderX配置tomcat外界服务器查看编辑jsp界面的方式,文中根据案例文图紧密结合给大伙儿详细介绍的十分详尽,对大伙儿的学习培训或工作中具备一定的参照效仿使用价值,必须的 ...

  6. MySQL语句最全详解

    文章目录 MySQL语句最全详解 一.常见sql语句用法与演示 前置条件 连接命令 1.常用数据库类型 2.数据约束(数据表中) 3.数据库的备份和还原 二.操作数据库(操作数据库之前要通过命令行工具 ...

  7. Bootstrap4+MySQL前后端综合实训-Day06-AM【eclipse详细配置Tomcat、开发web项目、servlet、连接MySQL8.0数据库、用户登录界面的编写与验证、分页查询】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 eclipse重置视图 MySQL数据库--建数据库.建数据库 s ...

  8. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  9. 移动用户远程接入L2TP配置详解

    移动用户远程接入L2TP-vpn配置详解 学会查找参考文档,和官方资料很重要 华为企业产品技术支持网站 - 华为 1.话不多说先上图: 图为模拟环境的基础环境配置 模拟软件:ensp 系统环境:win ...

最新文章

  1. Ubuntu输入正确的用户名密码不能进入系统的原因和解决方法
  2. 深入理解JVM—性能监控工具
  3. 给windows设置隐藏文件夹的方法
  4. 笔记本在Win7下使用wubi安装Ubuntu10.04 双系统
  5. 位掩码(BitMask)
  6. 天啊!NBA球星将举办第一届科技峰会!
  7. 模式代码 java中aes_深入浅出:Java中的代理模式
  8. centos mysql lujin_MySQL中文转换成拼音的函数[zt]
  9. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_14-MongoDb入门-文档...
  10. Java性能调优全攻略来了
  11. 5脚耳机插座原理图_拆解报告:JLab Go Air 真无线运动耳机
  12. 网络爬虫——超级鹰源码下载
  13. 数据分析——收入下降原因分析
  14. 全网最细海龟 (turtle) 画图讲解 (一):初探海龟绘图
  15. python如何写日志_python写日志
  16. leap smear是什么
  17. Ubuntu16 wine安装迅雷
  18. arm synchronization primitives
  19. matlab仿真限幅发散,simulink仿真收敛,但用m文件实现却是发散的,是怎么回事?...
  20. win10突然无法显示图片缩略图怎么办

热门文章

  1. BOOST_PREDEF_TESTED_AT宏相关的测试程序
  2. boost::mp11::mp_back相关用法的测试程序
  3. boost::hana::reverse_partial用法的测试程序
  4. boost::graph模块实现读写graphml的测试程序
  5. boost::graph模块实现资源受限最短路径算法的示例使用
  6. boost::rational用法的测试程序
  7. GDCM:gdcm::Dict的测试程序
  8. ITK:过滤图像而没有复制其数据
  9. VTK:可视化之FlatShading
  10. VTK:Math之MatrixTranspose