1.概念
xml:可扩展的标记语言,用来标记数据的
2.语法
注意:声明的时候必须写在第一行
一个xml文档且有只有一个根标签
标签:起始和结束标签
3. XML约束
3.1 dtd约束
3.2 Schema约束
3.2 约束的好处
提示我们不要写错标签。会有相应的提示
4.Dom4J使用
1.新键一个lib文件夹
2.复制别人写好的dom4j-1.6.1.jar 到lib文件夹
3.右键dom4j-1.6.1.jar-----builder path–小奶瓶
5.DOM模型
5.1. 文档对象模型
将一个xml文档的每一个元素,解析成一个一个的对象
5.2. dom4j解析
2.1.获取到Document对象
2.2.拿到节点的文本
2.3.获取对象的name子节点
5.3. 对元素操作
①添加元素
②修改元素
③删除元素
1.数据库的概念
统一管理数据相关数据的集合。Mysql是一种关系型数据库 ORM关系型映射
O R
类 表
对象 行
属性 列
数据库分为:系统数据库(不能修改) 用户数据库(一个项目有一个数据库就可以)
2.数据库的安装与配置
1.下载所需的mysql的安装文件,双击运行,继续选择“next”
2.询问是否接受协议,选择接受,继续下一步,”next”
3.第三步会有三个安装类型, typical典型安装,custom 自定义安装,complete 完整安装,选择typical典型安装
4.第四步选择browser,输入我们mysql要安装的路径,选择完成finish,选择next,选择Install就开始安装
5.第五步选择配置的方式,选择第一个Developer Machine开发者模式, 点击“next”选择多功能数据库Multifunctional Database,继续点击“next”点击连接数据库的人数Decision Support(Dss)/OLAP
6.设置mysql的端口号,默认位3306,下一步设置字符编码集为utf-8
7.设置数据库的密码,单机执行excute安装完成后选择finish
3.启动和连接数据库
1.点击运行,在输入框里面输入“cmd”,点击确定
2.命令行输入“net start mysql”,接着按回车键,开启mysql服务
3.连接mysql:在运行doc窗口或者命令提示符窗口输入mysql -uroot -p弹出界面再输入密码就是*****
4.数据库操作
4.1.1创建数据库
create database 数据库名;
4.1.2使用数据库
show databases; //查看数据库
use 数据库名; //使用数据库
4.1.3删除数据库
drop database 数据库名;
4.1.4数据库存储引擎
MyISAM:拥有较高的插入,查询速度,但不支持事务,不支持外键。
InnoDB:支持事务,支持外键,支持行级锁定,性能较低
4.2表的操作
4.2.1创建表
1.进入一个数据库:use database_name;
CREATE TABLE 表名(
列名1 列的类型 [约束],
列名2 列的类型 [约束],
…
列名N 列的类型 约束
);
4.2.2查询使用和删除表
SHOW TABLES; 查看数据库中存在哪些表:
DESC table_name; 查看表结构:
SHOW CREATE TABLE table_name; 查看表的详细定义(定义表的SQL语句)
DROP TABLE table_name; 删除表:
4.2.3表的约束
1.非空约束(NK):NOT NULL,不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束(UK):UNIQUE,在该表中,该列的内容必须唯一。
4.主键约束:PRIMARY KEY, 非空且唯一。
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。
6.外键约束:FOREIGN KEY,A表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)。
5单表查询
5.1简单查询
1.语法
SELECT {*, column [alias],…}
FROM table_name;
5.1.2查询所有货物的信息
5.1.3消除结果中重复的数据
语法: SELECT DISTINCT 列名,…
5.1.4实现数学运算查询
对NUMBER型数据可以使用算数操作符创建表达式(+ - * /)
对DATE型数据可以使用部分算数操作符创建表达式 (+ -)
查询所有货品的id,名称和批发价(批发价=卖价*折扣)
查询所有货品的id,名称,和各进50个的成本价(成本=costPrice)
查询所有货品的id,名称,各进50个,并且每个运费1元的成本
5.1.5设置列名的别名
查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
5.1.6设置显示格式
查询商品的名字和零售价
5.2过滤查询
5.2.1比较运算
语法
SELECT
FROM table_name
WHERE 条件1 AND/OR 条件2;
查询货品零售价为119的所有货品信息.
查询货品名为罗技G9X的所有货品信息
查询货品名不为罗技G9X的所有货品信息
.
查询分类编号不等于2的货品信息
查询货品名称,零售价小于等于200的货品
查询id,货品名称,批发价大于350的货品
5.2.2 逻辑运算
选择id,货品名称,批发价在300-400之间的货品
选择id,货品名称,分类编号为2,4的所有货品
选择id,货品名词,分类编号不为2的所有商品
选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
5.2.3 范围查询-BETWEEN AND
语法:
SELECT
FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。
选择id,货品名称,批发价在300-400之间的货品
选择id,货品名称,批发价不在300-400之间的货品
5.2.4集合查询- IN
语法:
SELECT
FROM table_name
WHERE 列名 IN (值1,值2…);
选择id,货品名称,分类编号为2,4的所有货品
选择id,货品名称,分类编号不为2,4的所有货品
5.2.5 空值查询 IS NULL
语法:WHERE 列名 IS NULL;
查询商品名为NULL的所有商品信息
注意列的值是 null 和空字符串不一样,如果是空字符串 应该 = “” ‘’
5.2.6 模糊查询 LIKE
%:通配符可表示零或多个任意的字符。
_:通配符可表示任意的一个字符。
通配符用来实现匹配部分值得特殊字符。
查询id,货品名称,货品名称匹配’%罗技M9_’
查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配’%罗技M1__’
5.2.7 正则表达式
查找productName字段中包含字母的所有数据
5.3结果排序
ASC : 升序
DESC: 降序。
ORDER BY 语句出现在SELECT语句的最后。
语法:
SELECT
FROM table_name
WHERE 条件
ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]…;
选择id,货品名称,分类编号,零售价并且按零售价降序排序
选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
查询M系列并按照批发价排序(加上别名)
查询分类为2并按照批发价排序(加上别名)
5.4分页查询
语法:
SELECT * FROM table_name LIMIT ?,?;
SELECT * FROM table_name LIMIT beginIndex,pageSize;
beginIndex = (currentPage-1) * pageSize;
规定:每页显示3条数据. pageSize = 3
第一页: SELECT * FROM product
LIMIT 0, 3
第二页: SELECT * FROM product
LIMIT 3, 3
第三页: SELECT * FROM product
LIMIT 6, 3
5.5聚集函数
定义:聚集函数作用于一组数据,并对一组数据返回一个值。
COUNT:统计结果记录数 如果列的值为null 不会计算在内的
MAX:统计计算最大值
MIN:统计计算最小值
SUM:统计计算求和
AVG:统计计算平均值 如果列的值为null 不会计算在内的
查询所有商品平均零售价
查询商品总记录数(注意在Java中必须使用long接收
查询分类为2的商品总数
查询商品的最小零售价,最高零售价,以及所有商品零售价总和
5.6分组查询
语法格式:
SELECT 聚集函数或者分组的列
FROM table_name
WHERE 【条件】
GROUP BY 列名
HAVING 分组之后的【条件】;
查询每个商品分类编号和每个商品分类各自的平均零售价
查询每个商品分类编号和每个商品分类各自的商品总数。
查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
1.分类编号
2.总数:条件where salePrice>100
3.按照分类分组
查询零售价总和大于1500的商品分类编号以及总零售价和:
1.分类编号,
2.总零售价
3.条件
4.分类编号分组
1.多表查询
多表查询:不同信息存储在多张表中,多表信息存储分类,更直观清楚。
1.1笛卡尔积
多表查询会产生笛卡尔积
1.2内连接查询
内连接的概念:内连接是从结果表中删除与其他被连接表中没有匹配行的所有行
内连接分类:内连接分为显示连接和隐式连接
隐式内连接解决笛卡尔积出现的问题:内连接条件查询 使用 where 中的条件再对连接结果进行过滤
语法:SELECT
FROM A ,B WHERE A.列 = B.列
显示内连接:在on后使用了连接条件
语法:SELECT
FROM A [INNER] JOIN B ON A.列 = B.列
1.3外连接查询
外连接分为:左外连接和右外连接
语法格式
SELECT
FROM A LEFT/RIGHT OUTER JOIN B
ON (A.column_name = B.column_name)];
左外连接:查询出JOIN左边表的全部数据查询出来,JOIN右边的表不匹配的数据使用NULL来填充数据.
右外连接:查询出JOIN右边表的全部数据查询出来,JOIN左边的表不匹配的数据使用NULL来填充数据.
案例:如下图
Employee员工表 department部门表
需要:查询所有的员工
select * from Employee emp inner join department dep on emp.dept_id=dep.id
左外连接查询:以员工表为主 select * from Employee emp left join department dep on emp.dept_id=dep.id
右外连接查询: 以部门表为主 select * from Employee emp right join department dep on emp.dept_id=dep.id
1.4自连接
概念:把一张表看成两张来做查询.一定要取别名
City c1 City c2
查询出所省旗下的市
1.5子查询
概念:一个查询语句嵌套在另一个查询语句中,内层查询的结果可以作为外层查询条件。
一般的,嵌套在WHERE或者FROM字句中
为什么使用子查询:
多表连接查询过程:
1.两张表做笛卡尔积。
2.筛选匹配条件的数据记录。(使用等等值连接筛选)
若,笛卡尔积记录数比较大,可能造成服务器崩溃。
案例:
单行单列子查询:
需求: 查询零售价比罗技MX1100更高的所有商品信息
需求: 查询分类编号和折扣与罗技M100相同的所有商品信息。
2.数据操作
2.1添加
2.1.1添加一行完整的语句 常用
INSERT INTO table_name (column1,column2,column3…)
VALUES (value1,value2,value3…);
2.1.2按照表字段顺序一次对饮填入值 不常用
INSERT INTO tableName value(value1,value2,value3…)
2.1.3添加多条数据记录
INSERT INTO table_name (column1,column2,column3…)
VALUES (value1,value2,value3…),
(value1,value2,value3…),
2.1.4添加查询结果
INSERT INTO tableName (filedName1,filedName2,filedName3…)
SELECT (filed1,filed2,filed3…) FROM tableName2;
2.2修改
语法:
UPDATE table_name
SET columnName = value [, columnName = value,columnName = value] …
[WHERE condition];
注意:如果省略了whrere,则全表的数据都会被修改
将零售价大于300的货品零售价上调0.2倍
将零售价大于300的有线鼠标的货品零售价上调0.1倍
2.3删除
语法:DELETE FROM tablename
[WHERE condition];
注意:如果省略where则全表会数据都会被删除
删除指定一条语句
删除多行指定语句
清空表中的数据,表还存在
2.4数据备份
导出:
mysqldump -u账户 -p密码 数据库名称>脚本文件存储地
mysqldump -uroot -padmin jdbcdemo> C:/shop_bak.sql
导入:
mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
mysql -uroot -padmin jdbcdemo< C:/shop_bak.sql
使用可视化导入导出
Navicat工具的导入和导出/Navicat工具的备份和还原
3.函数
3.1聚集函数
概念:聚集就是汇总一批细节数据,形成一个粗略的数据
count记录总数 sum总和 avg算术平均值 max最大值 min最小值
3.2 cast函数
Cast函数的参数是一个表达式,CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作
语法:
cast(值 as 类型)
cast(‘123’ as SIGNED) 将123转换为int类型,返回值为整型类型
select cast(salePrice as decimal)---->数据类型 ----Java中的数据类型
字符串转整数
小数转换成整数
3.3decimal类型
DECIMAL(P,D)表示列可以存储D位小数的P位数
语法:column decimal(P,D)
P是表示有效数字数的精度P范围为1〜65。
D是表示小数点后的位数D的范围是0~30
字符串转小数,保留两个小数
3.4convert()函数
CONVERT()函数和CAST()函数的功能相同,只是语法不同
语法:select convert(expr ,type)
select convert(‘123’,signed)
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
3.5ifnull函数
概念:IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数(可以是表表达式或文字值)。
语法:IFNULL(expression_1,expression_2);
1.JDBC的概念
JBDBC就是实现java代码与数据库之间的连接,拥有持久化技术。
持久化技术:Java代码种的数据在内存中运行的,关闭电源,数据就会丢失
将最近的知识点连接起来
1.1持久化
将内存中的数据永久的保存起来,不会丢失。存入数据库中
持久化数据的最好方式就是把数据保存到数据库中,实现过程大多是通过数据库来完的。
1.2JDBC规范
是由sun公司提出的,只专注于语言开发。
1.规范:interface Connection{
Connection getConnection();
}
写Java代码去操作数据库
2.mysql数据库,mysql公司会写一套java代码用来操作数据库(类,接口,方法…)API
3.Oracle数据库,也同样写一套java代码用来操作数据库(类,接口,方法…)API
4.使用mysql:mysql自己有写一套代码(jar),在项目中导入jar包,用来操作数据库
2.JDBC的使用
2.1数据库的连接
1.新建一个普通的Java项目:创建lib装入mysql-connector-java-5.1.26-bin.jar,右键build path点击小奶瓶,与项目产生联系
2.注册驱动
3.加载驱动,拿连接
2.2使用JDBC执行DDL
贾:加载驱动
链:获取连接对象
欲:得到语句对象
执:执行sql语句
事:释放资源
2.3添加数据
2.4修改数据
2.5删除数据
2.6查询数据
查询一条语句
查询多条语句
3.Dao层的实现
3.1Dao层的概念
把JDBC写好的代码已经实现的代码用来实现数据库,Dao层就相当于管理员直接管理仓库。
3.2Dao层的实现
Dao层实现增删改查
3.2.1创建一个domain包,里面装实体类 Student
3.2.2在doo包里面写接口,建一个impl包并实现接口
3.2.3写一个测试类,来测试增删改查
添加
修改
删除
查询
3.3抽取JDBCUtil工具类
提取公共的代码
实现:在项目中右键一个工具类,工具类里面定义一个方法用来连接对象,用静态代码块来加载驱动,获取连接对象的方法,关闭资源的方法
3.4解决硬编码问题
3.4.1在项目中右键一个资源文件夹,名为resources,里面新键一个db.properties文件
文件编译后会放在编译后的bin根目录下面
3.4.2 需要一个公共加载获取流资源
3.4.3配置对象加载流资源,线程的方式
3.4.4在取之前会获取流,加载流 然后执行连接对象的方法
1.preparedStatement的概念及优点
Statement: 表示静态SQL语句对象
PreparedStatement:Statement的子接口,表示预编译SQL语句对象
①使用JDBC,定义sql语句的时候字符串拼接不好拼接,容易看糊,使用用preparedStatement清晰,
②Statement效率低原因:
Statement静态Sql对象,等到执行的时候才发送Sql到数据库,,
发送Sql到数据库,数据库,验证你的语法,编译成二进制,之后才会执行Sql
③效率高。
conn.prepareStatement(sql);已经把Sql发送到了数据库验证语法,编译成二进制等待你的运行
④preparedStatement线程安全
怎么解决安全性问题的:
String sql = “insert into user (username,password,age,intro,sex) values (?,?,?,?,?)”;
会提前把sql传入到数据库编译:该条语句的sql关键字,已经被完全确认
ps = conn.prepareStatement(sql);
填充的位置:给的值如果存在Sql语句的特殊符号,转义\u0046
2.使用preparedStatement
2.1
3.登录功能的实现
第一种方式:只输入用户名查询一个对象
第二种登录方式:用户名和密码查询对象
4.事物理论
事务的ACID属性:
Atomic原子性、Consistency一致性、Isolation隔离性和Durability持久性。
4.1转账案例:一组(属于一个连接就是一组)操作,只能同时成功或同时失败(同生共死)
一组事物自动提交:当执行sql语句金钱消费之后会自动提交
一组事物手动提交:conn.setAutoCommit(false);改成手动提交后,执行sql语句运行只是在内存中操作不会修改数据库,当运行没有出现异常的时候,conn.commit();//提交事务,若出错conn.rollback();//将还原那一组的操作
4.2拿到主键:为何要拿主键 当我们插入一条数据的时候,主键自动生成id[数据库自动增长决定的],当编程的时候可能用到找个id别的表分类表:需要用到商品刚才生成的id
5.连接池
5.1连接池的思想
①链接对象:每次运用都要去获得一次对象,对象用完了,就被丢弃,浪费资源
②链接对象每次的获取,都要验证数据的的账户,密码,需要花时间的
连接池:有很多连接对象,需要用的时候就去取对象,大家都需要取找对象,用完之后不要消灭它,将它放入池中(共享)
5.2 JDBC实现连接池
使用:拷贝jar包到项目中,并于项目建立关联
static BasicDataSource ds = new BasicDataSource();//创建连接池
ds.setDriverClassName( p.getProperty(“driverClass”) );//设置驱动名称
ds.setUsername(p.getProperty(“username”));//设置名字
ds.setPassword(p.getProperty(“password”));//设置密码
ds.setUrl( p.getProperty(“url”) );//设置url地址
conn = ds.getConnection();//获取连接池对象
5.3抽取工具类实现增修删
写一个公共的方法实现增删改
1.javaweb概述
javaweb就是用java来开发网站
访问原理:
1.1cs与bs的区别
C/S架构:客户端和服务器端架构,比如:QQ
优点:更安全,速度快,但需单独安装
B/S架构:浏览器和服务器结构,比如我们使用淘宝、京东、百度等
优点:安全性比cs低,不用安装软件,只需要一个浏览器
1.2静态网页与动态网页
静态网页:写好的页面就不会被更改
动态页面:写好的页面,即使我们不更改,代码会随着时间,以及数据库的操作被修改
2.HTML
概念:HTML超文本标记语言,标记符号来标记要显示的网页中的各个部分,是一种编写网页的技术,用浏览器来解析HTML文件
2.1HTML注释和标签
HTML中的注释:
HTML中的标签:单标签、双标签
<标签名 属性名=“值” />
<标签名 属性名=“值”>内容标签名>
<标签名 属性名1=“值” 属性名2=“值”>内容标签名>
2.2表格标签
border指定表格的边框像素 width:表格的宽度 height:表格的高度 align="center":表格居中 cellspacing="0":单元格的边距表头1 | 表头2 |
---|---|
数据1 | 数据2 |
table:定义一个表格,简单的 HTML 表格由 table 元素以及一个或多个 tr、th 、td 组成;
tr:定义表格中的行,表格行中包含一个或多个th或td元素;
th:定义表格内的单元格;
单元格合并:
colspan=“2” 表格单元横跨两列的表格
rowspan=“2” 表格单元横跨两行的表格
2.3图片标签(路径)
语法:
绝对路劲:D:/xxx/bbb/ccc/aa.html
绝对路劲: 1.本地文件协议:访问磁盘文件
file:///C:/Users/%E6%82%A0%E6%82%A0/Documents/HBuilderProjects/day31-HTML_CSS/_02%E8%A1%A8%E6%A0%BC.html
2.Http协议:访问网络中,计算机中的资源文件 http://127.0.0.1:8020/Day31_HTML&CSS/_04%E5%9B%BE%E7%89%87%E6%A0%87%E7%AD%BEimg.html
相对路劲:
./ : 表示本目录
…/ : 表示上一级目录
2.4超链接标签
语法:百度一下,你就知道
href属性:指示超链接需要链接的位置
target属性:指示该超链接以什么样的方式进行跳转
_blank:在新的标签页打开;
self:在当前标签页中打开,默认取值
2.5表单标签
语法:
表单元素
2.5.1表单的元素:
Submit:点击按钮 把数据提走,写在表单的内部
Button:普通按钮与js代码一起使用
Image:图片按钮
Hidden:隐藏提交的值
2.5.2input标签:
语法: 每个表单元素必须取一个名字,才会被提交
type属性:决定input标签的展现效果
text:文本框(默认值,可以不写)
password:密码框
radio:单选框
checkbox:多选框/复选框
file:文件上传
hidden:隐藏域
submit:提交按钮
button:普通按钮
reset:重置按钮
image:图片按钮
2.5.3textarea标签:定义多行文本域
语法:
rows属性:规定 textarea 的可见高度,以行数计算
cols属性:规定 textarea 的可见宽度,以平均字符数计算
2.5.4select标签:定义下拉框
语法:
显示的值
2.6span和div
sapan:行内标签,只占据被包裹的长度
div:块级标签,独占一行,用于页面布局
span和div作为一个内容容器与css配合展示效果
3…CSS
Css是层叠式样表,让美化页面
3.1css语法
单个样式写法:
<标签名 style=“样式属性:样式属性值;”>内容标签名>
多个样式写法:
<标签名 style=“样式属性1:属性值;样式属性2:属性值;”>源代码教育标签名>
CSS代码中的注释:
/* 注释内容 */
CSS对大小写敏感
3.2css写法
行内样式:<标签名 style=“样式属性:样式属性值;” >内容标签名>
内部样式:
外部引入:
3.3选择器
3.3.1标签选择器
标签名{
样式
}
根据标签的名字来选择
3.3.2类选择器
.class属性值{
样式
}
3.3.3id选择器
#id值{
样式
}
所有标签都有id属性,给标签定义id属性,id选择器再使用id属性值
1.网络编程
①需要有一个唯一的标识:也就是IP地址,用来表示所处的身份和位置
②要有共同的语言:协议(TCP/IP)
③需要有相应的端口号:port
1.1IP
概念:网络中不同计算机之间的通信,每台计算器都必须有一个唯一的标识,那就是IP地址(公网IP)
IP分类:IPv4:32位,分4段,(每段的范围0-255)0255之间的十进制表示4个8位的二进制数据表示,每8位之间使用圆点隔开,每个8位整数可以转换成一个0255的十进制整数
IPv6:128位,分8段,0000~FFFF的十六进制数值,冒号分割
static InetAddress getLocalHost() 返回本地主机IP
static InetAddress getByName(String host) 根据主机名或域名获取IP
static InetAddress getByAddress(byte[] addr) 根据一个ip地址获得一个IP地址对象
boolean isReachable(int timeout) 测试是否能在指定时间内连通该地址 (类似ping)
1.2prot_Url端口
1.2.1URL概念:统一资源定位符,由协议名,资源所在主机,端口,资源名等部分组成,统一资源定位就是一类事物: 具体的一个资源定位,就是一个URL对象
1.2.2URL类中的常用方法:
URL(String protocol, String host, int port, String file)
URL(String url)
InputStream openStream() :打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream;
1.3TCP&UDP协议及区别
概念及区别:TCP和UDP都是传输层的协议, TCP 协议可靠,UDP 协议不可靠, TCP 是面向连接的,UDP 是无连接的TCP 服务是基于流的,而UDP是基于数据报的TCP 协议为应用层提供可靠的、面向连接的、基于流的服务 UDP为应用层提供不可靠、无连接和基于数据报的服务
TCP: ①协议是传输控制协议,面向连接的可靠的,基于字节流传输层通信协议
②当客户和服务器彼此交互数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据,TCP 协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,故而效率低,速度慢
③TCP可靠传输协议,不丢包,经常用来传输文件(回值内部处理),缺点是效率低,慢,而且占用资源,相当于打电话;
UDP: ①是一种无连接、不可靠、基于数据报的用户数据协议。
②UDP在传输数据报前不用在客户和服务器之间建立一个连接。它只是把数据报发送出去,但是并不能保证他们能到达目的,并且没有超时重发机制,故而传输速度很快;
③UDP不可靠传输协议,容易丢包。但是效率高,快,占用资源少
2.Http协议
概念:HTTP超文本传输协议 http是一种短连接,无状态连接,浏览器给服务器发送数据是一次请求(request)。服务器给浏览器反馈数据是一次响应(response);客户端准备发送消息,server提供一个类的服务类来接收信息
2.1请求报文
概念:协议是用来定义数据传输的格式,按照一定格式形成的数据包即报文,也可以叫数据报
HTTP 报文分三个部分:起始行(请求行 – 响应行/状态行),头部(请求头/消息头 – 响应头/消息头),主体(请求体/实体内容 – 响应体/实体内容);
HTTP 报文分为请求报文和响应报文;
2.1.1请求分为get和set方法
URL是统一资源定位符,俗称请求网址
URI: 是统一资源标识符,俗称请求资源路径
2.2响应报文
①报文协议及版本②状态码及状态描述③响应头④响应体
3.Tomcat模拟
概念:用来接收客户端的请求,处理请求, 把动态资源转换成了静态资源 最终给客户端响应
4. URLEncoder与URLDecoder
URLEncoder.encode(String s, String enc)
使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式
URLDecoder.decode(String s, String enc)
使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。
2.发送的时候使用URLEncoder.encode编码,接收的时候使用URLDecoder.decode解码,都按指定的编码格式进行编码解码可以不会出现乱码
1.Tomact服务器
概念:Tomcat是一个开源免费的Web服务器,占用内存小的javaWeb服务器1.1tomact安装
1.1tomact安装
①安装tomact之前,先看JDK是否安装
②拷贝tomact安装包解压
目录介绍:
bin:存放的是一些常用工具
conf:配置文件
lib:一些架包
logs:日志文件
webapps:存放的是一些项目
work:工作文件
temp:临时文件
1.2tomact常见错误
①未启动端口被占用
②已启动,又一次启动,端口被占用
④404访问路径不存在
⑤Server.xml:另存为urf-8
2.Javaweb项目
2.1手动搭建web项目
①新键一个项目
②在项目里面新键一个folder普通文件夹名为:webapp
③在webapp文件夹下新键一个名为WEB-INF文件夹
④在WEB-INF文件夹下行键名为clsses文件夹和lib文件夹, 将tomact里面的web.xml文件拷贝到WEB-INF文件夹下
⑤Classes 设置项目的Java代码,编译路劲:选中项目-builder path
2.2发布项目
/xx 项目的上下文路劲:相当于给项目取了一个名字为xx
Localhost/xx/abc.html
2.3简化路径访问web资源
①将server.xml文件的端口号8080修改为80,默认找的就是tomact
②将path=””改为空
③D:\mgtv\apache-tomcat-8.5.50\conf\web.xml
3.Servlect
3.1servlect入门
1.Servlet是Java提供的规范
2.Tomcat就是一个Servlet容器
3.Servlet编写的步骤
(1)导入包:servlet-api.jar 放入lib 与项目建立关联
(2)新建一个类HelloServlet implements Servlet service方法写了一个句话
(3)配置Servlet到web.xml
①项目与Tomcat之间通过项目的web.xml
②通过web.xml 告诉tomcat 我的项目有这么一个Servelt
③tomcat就会根据你提供的信息,创建对象,并使用对象
3.2servlect执行流程
①用户在浏览器端输入地址
②请求访问的是本地端口为80的程序
③反射技术根据配置信息创建对象
④Tomcat自己就会使用对象并且调用service方法
⑤只有第一次会创建对象,以后访问都是使用该对象
3.3servletconfig对象
3.4处理请求的方式
处理请求的方式分为:get和post
3.5请求和响应对象
3.5.1解决中文出现乱码问题
3.5.2 HttpServletRequest对象HttpServletResponse对象
HttpServletRequest:请求对象
常用的方法:
HttpServletResponse:响应对象
常用的方法:
OutputStream getOutputStream(); 获取字节输出流
resp.getWriter(); 获取字符输出流
获取请求头:
1.servlet交互
1.1servlect三大职责
①接收请求
②调用业务方法去处理业务,(去调用业务层)
③响应请求(跳转到其他页面或到servlet)
1.2请求转发forword
概念:一个Web资源收到客户端的请求后,通知服务器去调用另一个Web资源进行处理,称之为请求转发,转发请求的Servlet和目标的Servlet共享同一个request对象(就相当于一个人咬了一口苹果,就给了另一个人吃)
①导入包:servlet-api.jar 放入lib 与项目建立关联
②新键一个servlet包,里面新键AServlect和BServlect类,当访问AServlect的时候就会跳转到BServlect,实现跳转(AServlect->forword/b->BServlect)
③@WebServlet("/forword/a")//提供一个映射路径
④转发的方式:req.getRequestDispatcher("/forword/b").forward(req, resp);
细节:当在自己站点内转发: req.getRequestDispatcher("/forword/b").forward(req, resp);
跨越访问:req.getRequestDispatcher(“http://www.baidu.com”).forward(req, resp);
通过转发访问到WEB-INF里面的内容:req.getRequestDispatcher("/WEB-INF/abc.html").forward(req, resp);
1.3重定向Redirect
概念:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,称之为请求重定向(相当于我给A一个苹果,B也想要,然后我又重新拿了一个苹果给B)
实现过程:当浏览器去请求进如ARedriect的时候,就会重新出发一次resp.sendRedirect("/xx/redriect/b");给BRedriect
细节:当从重定向出来的,要继续访问的时候resp.sendRedirect("/xx/redriect/b");要加/xx,跨域访问的时候要写完全路径 resp.sendRedirect(“http://www.baidu.com”);
2.JSP
概念:是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。jsp里面的标签被tomact翻译成一个servlet,jsp就相当于一个servlet
用到的架包:并与项目建立关联
①语法:
JSP[java注释]注释:<%–这是注释–%> 在jsp翻译成Servlet的时候这个注释就没有了,源代码看不到;
HTML注释:我们还可以用html的注释( ),在页面上看源代码可以看到
②原理分析:原理分析D:\opensource\apache-tomcat-8.0.41\work\Catalina\localhost\xx\org\apache\js查看翻译之后的jsp
③Java中的jsp:
语法:<%=表达式%> 作用:将数据输入到页面上
④js小脚本:
语法:<%
Java语句1;
Java语句2;
%>
作用:编写Java逻辑代码
2.1jsp三大指令
2.1.1page指令:
格式:<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8” import=“java.util.Date” errorPage=“error.jsp”%>当前页面发送错误之后跳转到error.jsp
jsp:本质就是一个Servelt
Servelt : 写Java代码【三大职责】—处理数据
jsp-Servlet :写标签【展示数据】—展示数据
2.1.2 include指令
include 指令用于通知 JSP 引擎在翻译当前 JSP 页面时,将其他文件中的内容合并进当前 JSP 页面转换成的 Servlet 源文件中
<%@ include file=“common.jsp” %>
2.2jsp九大内置对象
概念:内置对象:系统创建好的对象就叫做内置对象
2.3jsp四大作用域
概念:
request域: 只能在同一个请求中使用
session域: 只能在同一个会话(session对象)中使用
context域: 只能在同一个web应用中使用
拿到相对的作用域对象:
案例:
1.JavaBean
概念:javaBean 是一种JAVA语言写成的可重用组件。
规范:JavaBean,类必须是具体的和公共的,提供getter/setter方法并且具有无参数的构造器
1.1Javabean属性与对象
①bean属性JavaBean属性
②对象属性字段,即实例变量
③get或者set后面首字母小写,叫做bean(对象)属性
1.2javabeanb内省机制
作用:用于操作和查看javabean中的属性
操作属性:通过 getter 方法获取属性值,通过 setter 方法给属性设置值
1.3BeanUtil的使用
①使用之前要拷贝对应的jar包
commons-beanutils-1.9.2.jar
commons-logging-1.2.jar
commons-collections-3.1.jar 并与项目建立关联,在使用别的类之前要导入相应的包
②相同之间的拷贝
③不同类型之间的拷贝
④高级
1.4自定义Bean工具类
①导入相应的jar包并与项目关联
commons-beanutils-1.9.2.jar
commons-logging-1.2.jar
commons-collections-3.1.jar
servlet-api.jar
②新键一个index.html文件,用于提交数据
③将接收到提交的数据封装成user对象
工具类:
2.El表达式
概念:el就是一种表达式语言,让jsp的代码更加简洁
注意:el表达式获取作用域中的属性要依靠JavaBean的可读属性即需要有getter方法,否则无法获取;
语法:${el 表达式}
2.1el表达式访问四大作用域的绑定值
EL表达式就是取作用域对象的Bean属性值,而在作用域对象中从小的作用域开始取
顺序是:pageContext --> request --> session --> application
2.2el表达式访问Javabean中的属性
语法:
方式一: 对 象 名 . 属 性 名 ( 常 用 ) 方 式 二 : {对象名.属性名} (常用) 方式二: 对象名.属性名(常用)方式二:{对象名[“属性名”]} 一般在属性名有特殊字符时才使用
①提供一个animal类
3.JSTL
jstl概念:JSTL是用来消除java代码的,它是由jsp标签和EL表达式组成
3.1Jstl的使用
①使用jstl之前要导入相应的jar包,并于项目建立关联
②在jsp标签中导入<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
3.2jstl常用标签
Foreach标签
For标签
4.MVC
4.1mvc概念
MVC是程序设计的一种思想,与三层架构并没有直接的联系。全名是Model View Controller
1.Model(业务模型):User类 ---- 后台Java代码,包括业务代码、持久化层代码、实体Model/domain等
2、view(视图): 展示的jsp -----应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
3、controller(控制器):servlet控制器-----控制器即要与前端界面交互,也要与后台Java代码(Model)。
4.2mvc三层架构
1.Servlet细节
在写代码之前,首先创建一个动态的项目
1.1多种路径匹配方式 (路径匹配)
1.1.1精准匹配(配置多个请求)
①配置什么就写什么一个servlet-mapping中配置多个
②配置多个servlet-mapping
注解形式:@WebServlet(urlPatterns={"/de1","/de2","/de3"})//提供映射路径
1.1.2通配符匹配
通配符发起的任何请求,都是匹配的,一般用于过滤的时候
注意:/不要忘记写了
1.1.3后缀匹配
注意:后缀匹配前面不能加/
注意:后缀匹配中不要配置*.html和*.jsp后缀,后缀请求匹配会先匹配web.xml或注解直接找到Servlet,而不会请求你的html和jsp页面
1.2初始化页面配置
在web.xml文件中添加
1//数字代表Servlet创建的先后顺序
1.3默认页面
在web.xml中配置默认页面,直接输入localhost访问默认页面
1.5合并Servlet
①新键一个名为HeBing.html文件
②新键一个EmployeeServlet去继承HttpServlet
系统环境搭建:
①在数据库里面创建一个名为employee表
②写实体类
③Dao层
④servlet
⑤controller控制层
⑥修改页面数据(请求转发)
⑦页面展示数据
⑧测试类