# ums-demo
**Repository Path**: zing173/ums-demo
## Basic Information
- **Project Name**: ums-demo
- **Description**: IDEA实现用户登录(复习-反复练习)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2022-10-27
- **Last Updated**: 2025-01-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## IDEA工具实现用户登录(复习)
非常重要,反复练习
具体操作步骤:
第一:创建Web项目
第二:编写前端页面(HTML、CSS、JS、JQ)
第三:编写后端程序
1、创建数据库及相关的数据表
```mssql
create database ums ;
use ums ;
create table userinfo
(
id int identity(1,1) primary key ,
username varchar(50) ,
password char(6),
user_age int ,
user_sex char(2) default '男',
weight float
) ;
insert into userinfo(username,password,user_age,user_sex,weight)
values ('admin','123456',18,'男',60.5) ;
insert into userinfo(username,password,user_age,user_sex,weight)
values ('zhangsan','123456',28,'男',70.5) ;
insert into userinfo(username,password,user_age,user_sex,weight)
values ('lisi','123456',38,'女',20.5) ;
```
2、编写实体对象
> 作用:封装数据、数据传递
**命名规范:xxx.xxx.entity.XxxXxx**
ctrl + alt + l : 代码格式化
ctrl + alt + o : 清除多余的包
alt + insert : 生成代码
alt + enter : 万能键(代码提示)
alt + shift + 向上|向下 :移动代码
ctrl + d :复制当前选中代码
ctrl + y : 删除当前选中代码
3、编写DAO接口
> DAO(Data Access Object) : 数据访问对象 - 操作数据库(CRUD) - 服务于业务
**命名规范:xxx.xxx.dao.XxxXxxDao**
4、编写DAO接口实现类
**命名规范:xxx.xxx.dao.impl.XxxXxxDaoImpl**
5、编写业务(Service)接口
**命名规范:xxx.xxx.service.XxxXxxService**
6、编写业务(Service)接口的实现类
**命名规范:xxx.xxx.service.impl.XxxXxxServiceImpl**
7、编写Servlet(控制中心,建立前端页面和后台程序之间的联系)
**注意:在实际开发中,以上步骤不是固定不变的,而是灵活运用。**
## AJAX
### 1、概念
**异步** JavaScript 及 XML(Asynchronous JavaScript And XML)。它是一系列交互式网页应用技术的结合体,包含知识有:
1)基于XHTML和CSS标准的表示;
2)使用Document Object Model(DOM)进行动态显示和交互;
3)使用XMLHttpRequest与服务器进行异步通信;
4)使用JavaScript绑定一切
AJAX 是一种用于创建快速动态网页的技术。
异步请求的好处:页面不刷新,更新数据 - 增强用户体验
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新;而传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面
### 2、JSON
#### 1)概念
```js
// 定义 Javascript 对象 - 文本标记法
var stu = {
name:'zs',
age:18
}
// 字符串 - JavaScript对象的表示 - 实现后端与前端之间的数据转递
var json = "{'name':'zs','age':18}" ;
```
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是**轻量级**的文本数据交换格式,相对于 XML而言
JSON 独立于语言
JSON 具有自我描述性,更易理解
JSON 是存储和交换文本信息的语法。类似 XML,但JSON 比 XML 更小、更快,更易解析。
#### 2)作用
实现后端与前端之间的数据转递
#### 3)语法
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称 / 值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
```javascript
var 对象 = {
属性名称1:值 ,
...
属性名称N:值
}
```
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(使用双引号或单引号)
- 布尔值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null / undefind
JSON 文件 - JSON数据根据需求,也可以定义在一个文件中
- JSON 文件的文件类型是 ".json"
- JSON 文本的 MIME 类型是 "application/json"
- text/html
- text/css
- text/javascript
### 3、实现
#### 1)原生实现
1.1)XMLHTTPRequest对象的相关属性方法
1.2)操作步骤
第一:创建 XMLHttpRequest 对象
```javascript
var req = new XMLHttpRequest();
```
默认情况下,客户端可以通过以下两个方法发起同步请求:
- 超链接
- a标签
- JS中location.href
- 表单提交
第二:初始化HTTP请求参数
> 调用 open() 方法
```js
req.open(method,uri,async,[username],[password]))
```
- metod:请求方式,get,post,put,delete或head
- uri:请求的服务器地址
- async:设置异步或同步,true(默认) / false
- 根据需要可传username和password给服务器进行用户验证
第三:编写服务器端程序 - Servlet
- 处理同步请求的Serlvet
- 把响应的数据,设置在作用域对象中,并跳转到 JSP 页面中
- 然后,在JSP中使用 JSTL + EL 读取作用域数据
- 处理异步请求的Serlvet
- 把响应数据,使用 PrintWriter 对象,以**字符串**的方式打印输出到页面(JSP、HTML)中
- 使用 XMLHttpRequest 的responseText属性接收Servlet打印输出的**字符串**
- 使用 DOM 操作 - 节点、样式
第四:发送请求 - 调用 send 方法
```js
req.send([data])
```
- data:表示向服务器传递的参数
- 如果不传递,则使用 null 表示即可
- GET请求 + 传参:
```js
// get请求,并指定传递参数
req.open("get","hello.do?name=zs&age=18",true) ;
req.send();
```
- POST请求 + 传参
```js
// post请求
req.open("post","hello.do",true) ;
// 设置表单传输的编码格式(注意,必须在open方法之后设置)
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// 语法:send(参数名1=值&参数名2=值,...,&参数名N=值)
req.send("name=zing&age=18") ;
```
第五:设置回调函数 - 获取服务器响应的结果
```js
// 绑定 onreadystatechange 事件
req.onreadystatechange = function() {
// readyState=4 表示完成请求响应这个过程
// status=200 表示正常响应
if (req.readyState==4 && req.status==200) {
// DOM 操作
document.getElementById("result").innerHTML =
// 获取服务器应用的数据
req.responseText ;
}
}
```
#### 2)JQ实现
2.1)$.ajax
```java
// 向服务器发起异步的请求
$.ajax({
url:'服务器程序的URL地址',
method:'请求方式(get、post)',
data:'传递服务器的数据',
dataType:'设置响应数据的类型,默认是text,可以设置为json',
success:function( res ){
// 成功响应的处理,其中参数res就是服务器响应回来的数据(JSON)
},
error:function() {
// 服务器错误的响应的处理
},....
}) ;
```
说明:
- data选项有两种方式传值
- URL重写传递:参数名称1=值&参数名称2=值&...
- 对象传递:`{属性名称1:值,...,属性名称N:值}`
- 注:在JQ中,提供了一个方法`serialize()`,帮助我们把数据序列化字符串,便于提交给服务器。另外,此方法常用于表单,语法如下所示:
```js
// 表单控件必须要有name属性
$("#表单节点").serialize() ;
```
2.2)$.get
```js
// 向服务器发起一个异步的get请求
$.get(服务器程序URL地址, [传递服务器的数据], [成功响应的回调函数], [数据类型]);
```
2.3)$.post
```js
// 向服务器发起一个异步的post请求
$.post(url, [data], [callback], [type]);
```
### 4、延迟对象
1)发起多个异步请求且保证顺序执行
需求:同时向服务器发起多个异步请求,则响应的顺序是不能保证顺序执行!
如果我们希望发起的多个异步请求能顺序响应,怎么办呢?
- 方法一:使用同步请求,丢失异步请求的特性
- 方法二:回调函数的嵌套调用 - 回调地狱 - 不便于阅读,维护性差
- 方法三:使用延迟对象
- then方法
- $.when方法
2)延迟对象常用的API方法
3)自定义延迟对象
deferred对象可以应用在异步请求、同步请求,同时也可以应用在本地方法中。操作步骤如下:
```js
// 第一:定义一个返回 deferred 对象的方法
function wait() {
// 1:创建延迟对象
let dfd = $.Deferred()
// 文本标记定义法
let tasks = function(){
console.log("任务执行完毕!");
// 2:改变延迟对象的状态(三种) -- 业务逻辑进行判断
// dfd.resolve();
dfd.reject() ;
};
// 5秒后,调用 tasks 函数
setTimeout(tasks,5000);
// 3:返回延迟对象
return dfd ;
};
// 第二:通过$.when方法使用延迟对象
$.when(wait()).done(function(){
console.log("成功执行")
}).fail(function(){
console.log("失败执行")
}) ;
```
- dtd.resolve()
把deferred对象的未完成状态,改变为已完成状态,从而触发调用done方法
- dtd.reject()
把deferred对象的未完成状态,改变为已失败状态,从而触发调用fail方法
当然,根据业务逻辑进行判断调用
## 商品信息的管理
1、数据库
```mssql
create database pms ;
use pms ;
-- 产品信息表
create table product
(
product_id varchar(50) primary key not null , -- 产品编号
product_name varchar(50) not null, -- 产品名称
product_type varchar(50) not null , -- 产品分类
product_price float not null, -- 产品价格
product_count int default 1, -- 产品库存
product_image varchar(50) default 'default.jpeg', -- 产品图片
product_date datetime , -- 上货日期
product_desc varchar(200) default '暂无描述', -- 描述
product_sale int default 0, -- 销量
product_status int -- 是否上架
) ;
-- 初始化数据
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('101','米家智能插座WIFI版','家电',39.5,100,'101.png','2013-01-07','101..',100,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('102','德尔玛多功能蒸汽清洁机','家电',59.5,100,'102.png','2015-11-01','102..',200,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('103','90分框体旅行箱','家居',200,100,'103.png','2013-09-04','103..',300,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('104','米家两六冰箱160L','家电',1999.5,100,'104.png','2018-04-03','104..',400,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('105','流浪地球CN171运兵车','玩具',199.5,100,'105.png','2019-03-02','105..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('106','回力袜子男抗菌中筒袜秋冬新品情侣款','服装',42,100,'106.jpeg','2019-03-02','106..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('107','周生生水波纹手链','首饰',1629,100,'107.jpeg','2017-06-14','107..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('108','腾讯视频年卡+京东PLUS会员','硬件',148,100,'108.png','2019-06-24','108..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('109','Dyson戴森 手持无线吸尘器 V7','家电',1199,100,'109.jpeg','2013-05-22','109..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('110','京东京造 哥窑自动茶具套装','家居',519,100,'110.jpeg','2018-05-08','110..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('112','鸭鸭佟丽娅同款工装羽绒服','服装',699,100,'112.jpeg','2022-11-02','112..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('113','JBL T115TWS真无线耳机','家电',168,100,'113.jpeg','2022-01-01','113..',500,1) ;
insert into product(product_id,product_name,product_type,product_price,product_count,product_image,product_date,product_desc,product_sale,product_status)
values ('114','玖合 256GB SATA3 SSD固态硬盘','硬件',96,100,'114.jpeg','2012-12-12','114..',500,1) ;
```