登录 案例的 需求描述 :
!!!!! 有三层 概念 : 现实中 控制层 服务层 持久层 之后会有 SSM 的 Spring的框架的;解决

  1:  编写的 login.html 登录案例  : username  与password   的 input  输入 框 2:  使用 D瑞典 数据库 连接技术    操 mysql  ,day14   数据库       user表     3:  你JDBCTempalte  技术封装的 JDBC  4:  登录成功跳转 SuccessServlet  页面   提示success 成功语句  : 5:   登录失败   跳转到  FailServlet 页面   Fail 的信息

思维导图 =========================


实施分析 : login.html ----- loginServlet ------ UserDao

 前端  --- login.html|
java 后端: Servlet ----- 操作数据库的 类|
MySQL  数据库 1:客户端 在填写 html  里的  form表单  action =请求Servlet的路径   后input里  输入用户名 与密码   点击 submit  实现 提交到servlet  里 2:提交数据到 servlet里   :  ------ 逻辑代码还会在servlet  写  的 -----------设置编码   :    在请求与 转发 的时候 会涉及  ServletDispatcher   forward(requ,resp)获取  username  与  password   ==== 在 HttpServlet  里的 service 方法里的  ---- 其中参数 里request 就可以获取  用户输入参数 : parameter 系列getParameter (String  name) :获取用户输入的 字符串 : 根据参数名 获取参数值3:将 用户名和密码 username   password  , 封装带user对象 : 一以类 的方式 封装数据  ---- 这也对应了   java类来 与 数据库 表 的  操作 4: 调用 UserDao的 login 方法 查询 ,  获取  返回值 对象获取:数据库 里  是否有 储存 的 , 用户信息   ---- 先要判断 5:逻辑 判断  user是否为null   : null登录  失败  转发到 失败的页面  ---  一个request域 里的 转发

IDEA 里 创建 module : 选择不创建 web.xml ???为什么不创建web.xml 这里用作jar包的放置

创建项目   -----  导入  html 页面    配置文件    jar  包========jar 包的 使用  ============  :
------- 要用的jar  包--------mysql-connector-java 5.1.37

数据库连接池 用 的 Druid-1.0.9 jar
springTemplate 技术 : spring5 : beans , core ,jdbc ,tx 。
------- jar包在IDEA 里的 位置 :创建libs

src : 下的配置文件
web :静态资源   发布程序后要首先访问的 界面html :-- jar包:  创建WEB-INF  里 创建lib ---- 放 jar 包   ====  注意lib  不要写成 libs
library :  使用idea加载这些资源



创建数据库 :

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


搭建 ================== 后端
==== 创建 com.fhw.domian.User类 :==============

package com.fhw.domian;/* 用户 实体类*/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 + '\'' +'}';
}   }


DAO === connection 连接 数据库 : 操作数据库的类

com.fhw.dao.UserDao-----------》
package com.fhw.dao;
import com.fhw.domian.User;/* 操作数据库的 类*/public class UserDao {
/*
* 定义login 的方法* 入参 的是 User  出参的 是 User */
public User login(){return null;
}}

=== 连接数据库 ===== 用的是Durid 德鲁伊 技术 用 JDBCTemplate 连接

— 创建工具类 ----- 所有的 变量与方法 都是 静态修饰

直接就可以用 的 工具类的风格

所用有异常 的 都会顾及 的 编写的时候都要 注意的 异常 的

有2步
— 1:获取连接池对象 ---- 2:获取连接Connection 对象

###1: 定义 静态共享的 静态变量 DataSource :用的是 sql ==== import javax.sql.DataSource;

2:获取connection 对象 throws SqlException { ===== import java.sql.Connection;
return ds,getConnection();
}
3: 获取连接池 对象 DataSource getDataSource(){

}

/* JDBC 工具类用的Durid============ 搭架 ====

  • */

  • public class JDBCUtils {
    private static DataSource ds;private static DataSource getDs(){return ds;
    }
    private static Connection getConnecion () throws SQLException {return ds.getConnection();}} ====================================
    

    2个方法都 return到 DataSource 里
    ------ 需要资源 了 =============》 静态代码块 :
    --------- 都需要try catch 里 -----------
    1:获取连接池 : 需要加载 配置文件 初始化连接池对象 =====
    需要加载 配置文件 :文件 要在 properties 就 面对像 调用.Load()方法
    获取配置文件 用的 是 反射 来进行

2: 创建连接池对象 ; 使用jar包的Druid 对象 调用 数据资源工厂 来 传入 , 初始化给静态变量
com.alibaba.druid.pool.DruidDataSourceFactory;

-------- 完整的 代码 真呈现 ---------

        package com.fhw.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 工具类用的Durid

  • */‘’
  • public class JDBCUtils {private static DataSource ds;
    static {  //1:加载配置文件  2 初始化连接处对象//文件在 哪里  properties  的配置文件里 类加载器 调用字节输入流try {InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("");Properties pro = new Properties();pro.load(is);//  2 初始化连接处对象ds = DruidDataSourceFactory.createDataSource(pro);}catch (IOException e){e.printStackTrace();
    } catch (Exception e) {
    }
    }
    private static DataSource getDs(){return ds;
    }
    private static Connection getConnecion () throws SQLException {return ds.getConnection();
    }   }
    


=========== UserDao 类里 用 JDBCTemplate 入参 JDBCUtils()对象共享
1:编写 sql 语句 : String sel =“select*from user where username=? and password=?”
2 调用template 的query 方法 使用 beanpropertyRowMapper 泛型是还是User
参数字节码 来获取查询到user对象return 即可

  package com.fhw.dao;import com.fhw.domian.User;import com.fhw.util.JDBCUtils;import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;/* 操作数据库的 类*/
public class UserDao {//用 JDBCTemplate  入参 JDBCUtils()对象共享private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDs());/*
* 定义login 的方法* 入参 的是 User  出参的 是 User */
public User login(User loginUser){try {//1: 定义sql 语句String sql = "select * from user where username = ? and password = ?";// 2: 获取 user  对象 : 使用 Template 里Druid 里的 query 方法User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;}catch (DataAccessException e){e.printStackTrace();//记录日志return null;}
}}

====== test 测试类 =============

   package com.fhw.test;import com.fhw.dao.UserDao;
import com.fhw.domian.User;
import org.junit.Test;

public class UserDaoTest {
@Test
/*  测试 数据库里 是否能够 查询到信息
*  数据库的类 UserDao  参数里要用到User 类
* */
public void testLogin(){
User loginuser = new User();
loginuser.setUsername("fhw");
loginuser.setPassword("123");UserDao userDao = new UserDao();
User user = userDao.login(loginuser);
System.out.println(user);
}}


====== servlet、 的 逻辑 ===== 编写
创建 LoginServlet
在doget 方法里 是指编码 :

==========优化 :在注册多次输入框 验证的 工具类的 BeanUtils
*********** commons-beanutils-1.8.0.jar 的工具类 免费与开源的 *********
原理 : 获取 的request.getparameterMap()简化操做
使用jar 包 Apache的工具而立里为我们 提供的

用 jar 包的方式 : 加 入 lib : 在loginServlet 里 使用 :

request.setCharacterEncoding("utf-8") :

//获取所有请求的参数 :

   Map<String,String[]> map=request.getParameterMap();

// 创建user对象

User  LoginUser= nwe User();

//使用 BeanUtils.populate 来封装 try catch:

 BeanUtils.populate(loginUser.map)

loginServlet的额 里要做 的是 :
request 的一系列的操作 :

  设置编码  : request.setCharacterEnCoding(utf-8);

获取请求的参数 :String username= request.getPrameter(“username”);

                String password= request.getParameter("password");

封装 到 实体类 ;里 User loginUser= new User();

          loginUser.setUsername(username);loginuser.setPasword(paasword);new UserDao().login(loginUser);入参到实体 类 里

优化 :

Map<String, String[]> map = request.getParameterMap();User loginUser = new User();//使用beanUtils 工具类 来加载  自动加载 与 解析 :try {BeanUtils.populate(loginUser,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}


=SuccessServlet --------------------------------
daPost方法里
获取域 中的对象
User user = (User) request.getAttribute(“user”);//字符串 强转为 实体类对象
判断对象不为空
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().write(" 登录成功 ,用户名 或密码错误!");

、= FailServlet --------------------------------
daPost方法里
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().write(" 登录失败 用户名 或密码错误!");

=========================== 登录案例实现 详细 实现

数据库创建  -------------------------------------create database 库名create table 表名()id int primary  key Auto_incrementusername varchar(32)not nullpassword varchar(32)unique not nullinsert into 表名values(‘fhw’,‘123’)  插入数据
后端编写 --------------------------------------WEB-INF  ---------------lib  -----------------------连接数据库  所用的技术jar包spring  -----------spring-beans-5.0.0.RELEASE.jarspring-core-5.0.0.RELEASE.jarspring-jdbc-5.0.0.RELEASE.jarspring-tx-5.0.0.RELEASE.jarconnection ------------JDBC  ------Alibaba ------druid-1.0.9.jarmysql -------mysql-connector-java-5.1.37-bin.jar数据库 表 与 javabean的加载解析  ----commons-beanutils-1.8.0.jar---------------------mchange-commons-java-0.2.12.jarcommons-logging-1.2.jarsrc  ---------------------------------druid.properties 配置文件 ------------------driverClassName连接库的类型uri: 连接库 所在的地址: http port 路径username用户名password密码initialSize初始 连接数maxActive:最大连接数maxWait等待3000毫秒包的路径  -------------------------com.fhwdao  -------------------UserDao类java Template()加载JDBCutil 类连接数据库login方法里try   catch sql语句Template 里Druid 里的 query 方法user 用户domain -----------------User类与数据库table  对应的Javabeanweb  ---------------------------------------------servlet  -------------------LoginServlet   ---------------------获取请求request.getParameterMap() 或者 BeanUtils工具类加载调用UserDao的login()判断   与  转发if(user==null){ }转发  到  登录失败request.getDispatcher("/转发路径").forward( requ,resp)else储存到request 域 里setAttribute()转发  到  登录成功request.getDispatcher("/转发路径").forward( requ,resp)SuccessServlet   --------------------------------daPost方法里获取域 中的对象User user = (User) request.getAttribute("user");//字符串 强转为 实体类对象判断对象不为空response.setContentType("text/html;charset=utf-8");response.getWriter().write(" 登录成功 ,用户名 或密码错误!");FailServlet    --------------------------------daPost方法里response.setContentType("text/html;charset=utf-8");response.getWriter().write(" 登录失败 用户名 或密码错误!");util  -------------------------------------------JDBCtils ------------------------------private  static DataSourcestatic{代码块 加载}反射 获取配置文件 的pathnew  Properties().load( 加载)初始化Drui连接池getDataSource()getConnection()前端编写  -----------------------------------------------------------------------------创建login.html  ------------------------------form表单   ---------------------------actioninput用户名  type  text , name   username密码    type  password , name password提交    type  submit  value  "登录"测试  --------------------------------------------------Junit   test  ---------------------------testLogin方测试法new  User类 -----  setUsername    setPasswordnew  DaoUser类 ----  调用login方法  传参   System out.println()浏览器 输入 路径测试 ------  访问login.html-------输入input 框 :用户名 与  密码点击提交  -------

登录案例的演示 涉及request的转发相关推荐

  1. 【Java13】cookiesession(登陆案例(2)),jsp(登录案例(3))

    文章目录 1.cookie:再次时请求头携带cookie到服务端 2.登陆案例_记住我:js访问浏览器数据用document 3.session:根据sessionid,服务器才能找到session( ...

  2. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Request和Response-学习笔记01[Request_原理和继承体系.Request_获取请求数据][day01] Request和Resp ...

  3. http、request和登录案例讲解

    一.HTTP 1. 概念 1.1 超文本传输协议 Hyper Text Transfer Protocol 1.2 传输协议 定义了客户端和服务器端通信时,发送数据的格式 1.3 特点: 基于TCP/ ...

  4. 【Web基础】用户注册登录案例

    4,用户注册登录案例 接下来我们通过两个比较常见的案例,一个是 注册,一个是 登录 来对今天学习的内容进行一个实战演练,首先来实现用户登录. 4.1 用户登录 4.1.1 需求分析 用户在登录页面输入 ...

  5. java代码实现登录跳转_java实现登录案例

    本文实例为大家分享了java实现登录案例的具体代码,供大家参考,具体内容如下 一.环境搭建 JDK1.8  + Tomcat1.8 二.目录结构 三.代码示例 3.1.fail.html页面 fail ...

  6. Spring Security Oauth2 单点登录案例实现和执行流程剖析

    我已经试过了 教程很完美 Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在"客户端" ...

  7. 我爱Java系列---【登录案例】

    一.登录案例分析 二.实施流程 1.创建数据库web01,用户表user 代码: CREATE DATABASE web01; USE web01; CREATE TABLE USER( uid IN ...

  8. javaweb 常用jar包_使用javaweb写一个登录案例

    下载地址:https://gitee.com/dl_shrimp/java_web_login_case.git https://www.zhihu.com/video/124178088859969 ...

  9. 用HTML做一个简单的web登录页面,简单的JavaWeb注册登录案例

    简单的JavaWeb注册登录案例 1.注册页面register.html register 姓名: 电话: 邮箱: qq: 2.注册案例实现程序register.java /** * 注册案例实现程序 ...

  10. Servlet相关(request域转发、重定向、刷新头)(session域)

    >请求域的转发(request.getRequestDispatcher(/转发路径).forward(req,resp)) 转给静态的资源: 转给动态的servlet: >请求域设置属性 ...

最新文章

  1. 安利一个超好用的 Pandas 数据挖掘分析神器
  2. 华为交换机SSH登录失败原因
  3. pythonpackage详解_Python详解之包管理:__init__.py
  4. jdbc.properties文件
  5. REVERSE-PRACTICE-CTFSHOW-5
  6. 朱邦芬院士:我所熟悉的几位中国物理学大师的为人之本
  7. filter动态参数 maven_使用Profile和Resources Filter隔离测试环境
  8. PostgreSQL 并行查询概述
  9. nhibernate mysql配置_NHibernate各种数据库连接参数文件配置方法说明
  10. FW: How to use Hibernate Lazy Fetch and Eager Fetch Type – Spring Boot + MySQL
  11. java读取csv文件_使用扫描仪读取Java中的CSV文件
  12. 对话清华NLP实验室刘知远:NLP搞事情少不了知识库与图神经网络
  13. 2015年,我们一起经历的IT安全事件
  14. ElasticSearch - 聚合 aggs
  15. (7)数据结构-基本队列实现
  16. To use CUDA with multiprocessing, you must use the ‘spawn‘ start method
  17. vector函数里的pair用法
  18. 关于Vivado Simulator-ERROR: Cannot find design unit work. in library work located at xsim.dir /work
  19. mx350显卡天梯图_显卡天梯图2020年终整理发布
  20. RuntimeError: Exporting the operator prim_DictConstruct to ONNX opset version 11 is not supported.

热门文章

  1. 深度解析C/C++中的宏是什么?有什么作用呢?
  2. security update 补丁更新失败
  3. 火山PC隐藏任务栏程序图标教程
  4. 服务器运行一天死机,服务器死机怎么办?教你排除故障
  5. iOS关于subView和superview的关系
  6. Win10有哪些方便快捷的操作小技巧?
  7. 如何制作一个U盘启动盘
  8. win7系统中如何以管理员身份修改hosts文件
  9. Java file.encoding
  10. 基于Paddlehub与Wechaty的微信小助手--懂懂