登录案例的演示 涉及request的转发
登录 案例的 需求描述 :
!!!!! 有三层 概念 : 现实中 控制层 服务层 持久层 之后会有 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的转发相关推荐
- 【Java13】cookiesession(登陆案例(2)),jsp(登录案例(3))
文章目录 1.cookie:再次时请求头携带cookie到服务端 2.登陆案例_记住我:js访问浏览器数据用document 3.session:根据sessionid,服务器才能找到session( ...
- Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】
Java后端 学习路线 笔记汇总表[黑马程序员] Request和Response-学习笔记01[Request_原理和继承体系.Request_获取请求数据][day01] Request和Resp ...
- http、request和登录案例讲解
一.HTTP 1. 概念 1.1 超文本传输协议 Hyper Text Transfer Protocol 1.2 传输协议 定义了客户端和服务器端通信时,发送数据的格式 1.3 特点: 基于TCP/ ...
- 【Web基础】用户注册登录案例
4,用户注册登录案例 接下来我们通过两个比较常见的案例,一个是 注册,一个是 登录 来对今天学习的内容进行一个实战演练,首先来实现用户登录. 4.1 用户登录 4.1.1 需求分析 用户在登录页面输入 ...
- java代码实现登录跳转_java实现登录案例
本文实例为大家分享了java实现登录案例的具体代码,供大家参考,具体内容如下 一.环境搭建 JDK1.8 + Tomcat1.8 二.目录结构 三.代码示例 3.1.fail.html页面 fail ...
- Spring Security Oauth2 单点登录案例实现和执行流程剖析
我已经试过了 教程很完美 Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在"客户端" ...
- 我爱Java系列---【登录案例】
一.登录案例分析 二.实施流程 1.创建数据库web01,用户表user 代码: CREATE DATABASE web01; USE web01; CREATE TABLE USER( uid IN ...
- javaweb 常用jar包_使用javaweb写一个登录案例
下载地址:https://gitee.com/dl_shrimp/java_web_login_case.git https://www.zhihu.com/video/124178088859969 ...
- 用HTML做一个简单的web登录页面,简单的JavaWeb注册登录案例
简单的JavaWeb注册登录案例 1.注册页面register.html register 姓名: 电话: 邮箱: qq: 2.注册案例实现程序register.java /** * 注册案例实现程序 ...
- Servlet相关(request域转发、重定向、刷新头)(session域)
>请求域的转发(request.getRequestDispatcher(/转发路径).forward(req,resp)) 转给静态的资源: 转给动态的servlet: >请求域设置属性 ...
最新文章
- 安利一个超好用的 Pandas 数据挖掘分析神器
- 华为交换机SSH登录失败原因
- pythonpackage详解_Python详解之包管理:__init__.py
- jdbc.properties文件
- REVERSE-PRACTICE-CTFSHOW-5
- 朱邦芬院士:我所熟悉的几位中国物理学大师的为人之本
- filter动态参数 maven_使用Profile和Resources Filter隔离测试环境
- PostgreSQL 并行查询概述
- nhibernate mysql配置_NHibernate各种数据库连接参数文件配置方法说明
- FW: How to use Hibernate Lazy Fetch and Eager Fetch Type – Spring Boot + MySQL
- java读取csv文件_使用扫描仪读取Java中的CSV文件
- 对话清华NLP实验室刘知远:NLP搞事情少不了知识库与图神经网络
- 2015年,我们一起经历的IT安全事件
- ElasticSearch - 聚合 aggs
- (7)数据结构-基本队列实现
- To use CUDA with multiprocessing, you must use the ‘spawn‘ start method
- vector函数里的pair用法
- 关于Vivado Simulator-ERROR: Cannot find design unit work. in library work located at xsim.dir /work
- mx350显卡天梯图_显卡天梯图2020年终整理发布
- RuntimeError: Exporting the operator prim_DictConstruct to ONNX opset version 11 is not supported.