https://mubu.com/doc/6K9GdqdLnM0
最全java笔记
- mysql #数据库
- java
- 基础数据类型
- 循环操作
- 方法
- 方法的重载
- 方法定义
- 类
- 实例化
- 构造函数
- this关键字
- public private
- 静态方法
- 代码块
- 静态代码块
- 普通代码块
- 内部代码块
- 非常规类
- 内部类
- 静态内部类
- 类的继承
- extends
- 方法的覆写
- 抽象类
- abstract
- 抽象类和普通类的区别
- 抽象类的特点
- super
- final
- final定义的类
- final定义的方法
- fianl定义常量
- 接口
- 接口的特点和组成
- implements
- 工厂设计模式
- 代理设计模式
- 引用设计模式
- 包
- 包的定义
- import
- 新特性
- jdk1.5
- jdk1.8
- 异常
- 经典的异常定义
- throw throws
- 正则表表达式
- 方法
- replaceALL
- split
- matches(最重要)
- 代码
- 语法
- [^xyz]
- 反向字符集,不包含xyz
- *
- 零次、一次、或多次
- ?
- 零次或一次
- +
- 一次或多次
- \d
- 数字[0-9]
- \w
- 字符[A-Za-z0-9]
- \s
- 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
- \b
- 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
- [^xyz]
- 备注
- 记得使用\\来表示不是转义字符
- \小写字母 字母大写后算非
- 方法
- 反射
- Class类
- 实例化方法有三个
- 实例化对象.getClass()
- 类.Class
- Class.forName(包.类)
- 此方法最常用,可以不用import类就能实例化一个Class类对象 Class= Class.forName("java.until.Date");
- 通过Class的实例化对象来实现一些操作(Class类的使用)
- 通过Class类来实例化对象
- 代替new
- 有参构造
- 无参构造
- class类的实例化对象.newInstance()
- 调用普通方法
- Method类
- 调用属性
- Field类
- 应用
- 工厂设计模式降低耦合
- 设置setter和getter
- 访问并修改私有属性
- 通过Class类来实例化对象
- 实例化方法有三个
- Class类
- 国际化程序
- 总结
- 1.资源文件必须每个单词首字母大写,结尾“.properties”
- ResourceBundle读取资源文件
- Locale类表示国家或地区
- MessageFormat.format用于动态文本
- 总结
- DAO
- 分层设计思想
- 显示层
- 控制层
- 业务层
- 数据层
- 数据库
- 准备阶段
- VO类
- 负责数据的传输与包装
- 是简单java类
- 简单java类的开发原则
- 类名要和表名保持一致
- 所有的简单java类都必须要实现java.io.Serializable接口
- 不允许出现基本数据类型,只能使用包装类,原因是让默认值变为NULL
- 所有的属性必须封装,必须编写setter、getter
- 类之中一定要有无参构造
- 放在VO包里面
- DatabaseConnection类
- 负责数据库连接
- 负责取得和关闭数据库连接
- 放在dbc包中
- VO类
- 开发数据层
- 数据层操作标准
- 数据层操作标准接口的实现类
- DAO工厂类
- 开发业务层
- 业务层标准
- 分层设计思想
- 常用类库
- Arrays
- Compareable
- Date
- BigInteger
- BigDecimal
- SimpleDateFormat
- System
- Runtime
- Process
- math
- Random
- StringBuffer
- IO
- File类
- 实例化
- 创建
- 删除
- 路径分隔符常量
- 创建目录
- 单级
- 多级
- 展示目录
- 返回 String[]
- 返回 File[]
- 判断是否存在
- 目录
- 文件
- 存在
- 文件大小
- 最后一次修改时间
- 字节流
- 一般优先使用字节流
- 字符流
- 内存流
- ByteArrayOutputStream
- ByteArrayInputStream
- 打印流
- 常规
- printStream
- printWriter
- jdk1.5之后的新功能
- 常规
- Scanner
- BufferedReader
- File类
- 类集框架
- Collection
- Collection是很多接口的父类,不直接使用它
- Set
- TreeSet
- 排序
- 排序靠Compareable接口实现,所以对重复元素的识别也是靠Compareable接口的CompareTo方法
- HsahSet
- 无序
- 没有重复元素
- 该接口的抽象方法和Collection基本一致,甚至更少
- TreeSet
- List
- 两个子类
- ArrayList
- Vector(基本不用)
- 两个子类
- 集合的输出
- Iterator
- Enumeration
- 链表必须是Vector
- ListIterator
- foreach
- 重要
- Iterator
- Map
- 子类
- HashMap(优先使用)
- Hashtable
- Hashtable 和Hashmap几乎一样,但是Hashtable不能有null在key或value里面
- 方法
- put
- get
- keySet
- 返回Set<>
- values
- 返回Collection<>
- entrySet
- remove
- size
- clear
- 数据读出
- Iterator
- Map到Set
- Set到Iterator
- Iterator的每一个对象都是Map.Entry
- setValue
- getValue()
- getKey()
- Iterator
- 子类
- 数据流
- count
- 注意这些都是接口(List,Set,Collection,ListIterator,Iterator,Map)
- Collection
- 数据库 #数据库
- MySQL
- 基础操作
- 增
- 查
- 删
- 改
- 事务管理
- 基础操作
- JDBC
- 流程
- 定义加载程序
- public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
- 加载数据库程序
- Class.forName(DBDRIVER);
- 连接数据库
- Connection con = DriverManager.getConnection(DBURL);
- 实例化对数据库操作的方法
- PreparedStatement pp = con.prepareStatement(sql);
- 操作数据库
- pp.executeUpdate();
- pp.executeQuery()
- pp.executeBatch()
- 定义加载程序
- 最常用的类PreparedStatement
- setDate方法里面接收的date类需要java.sql.Date。参数是long 。 new java.sql.Date(cc)
- 批量化操作
- addBatch()
- 加入批处理
- executeBatch()
- 开始处理
- addBatch()
- 流程
- 连接池
- 接口由javax.sql提供,实现类由厂商提供
- 优秀的开源连接池
- C3P0
- 配置文件
- c3p0-config.xml
- 流程
- DataSource dd = new ComboPooledDataSource(); 创建数据库连接对象
- Connection cdd = dd.getConnection(); 获取数据库连接
- 配置文件
- Druid
- 配置文件
- druid.properties
- 通过Properties类来读取配置文件
- InputStream ii=HelloDemo.class.getResourceAsStream("/druid.properties");
- 流程
- DataSource dd = DruidDataSourceFactory.createDataSource(pro); 通过工厂类获得数据库连接对象,参数pro是properties
- Connection cdd = dd.getConnection(); 获取数据库连接
- 配置文件
- C3P0
- Spring JDBC
- MySQL
- Jsoup 类 #Jsoup
- 前端基础
- html
- 转义字符
- css
- javascript
- BOM
- 概念:Browser Object Model 浏览器对象模型
- DOM
- Document Object Model 文档对象模型
- DOM 标准被分为 3 个不同的部分
- 核心DOM
- 核心 DOM - 针对任何结构化文档的标准模型
- Document
- 获取方式
- window.document
- document
- 方法
- 1. 获取Element对象
- 1. getElementById() : 根据id属性值获取元素对象。id属性值一般唯一
- 2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
- 3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- 4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
- 2. 创建其他DOM对象(不重要)
- 1. 获取Element对象
- 获取方式
- Element
- 元素对象
- 通过doucument来获取
- 方法
- 1. removeAttribute() 删除属性
- 2. setAttribute():设置属性
- code
- XML DOM
- node
- 特点:所有dom对象都可以被认为是一个节点
- 方法
- appendChild():向节点的子节点列表的结尾添加新的子节点。参数是id
- removeChild() :删除(并返回)当前节点的指定子节点。参数是id
- 删除和增加子节点的代码
- 删除和增加子节点的代码
- replaceChild():用新节点替换一个子节点。参数是id
- 属性
- parentNode 返回节点的父节点。
- 实例 动态表格
- node
- HTML DOM
- 针对 HTML 文档的标准模型
- innerHTML
- 使用html元素对象的属性
- 控制元素样式
- 1. 使用元素的style属性来设置
- 使用元素的style属性来设置
- 2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
- 1. 使用元素的style属性来设置
- 核心DOM
- 事件监听机制 (单独拿出来,不要强记,用时再查)
- 概念:某些组件被执行了某些操作后,触发某些代码的执行。
- 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
- 事件源:组件。如: 按钮 文本输入框...
- 监听器:代码。
- 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
- 常见的事件:@event
- 1. 点击事件:
- 1. onclick:单击事件
- 2. ondblclick:双击事件
- 2. 焦点事件
- 1. onblur:失去焦点
- 2. onfocus:元素获得焦点。
- 3. 加载事件:
- 1. onload:一张页面或一幅图像完成加载。
- 4. 鼠标事件:
- 1. onmousedown 鼠标按钮被按下。
- 2. onmouseup 鼠标按键被松开。
- 3. onmousemove 鼠标被移动。
- 4. onmouseover 鼠标移到某元素之上。
- 5. onmouseout 鼠标从某元素移开。
- event.button 鼠标按键
- 5.键盘事件:
- onkeydown 某个键盘按键被按下。
- onkeyup 某个键盘按键被松开。
- onkeypress 某个键盘按键被按下并松开。
- 6. 选择和改变
- 1. onchange 域的内容被改变。
- 2. onselect 文本被选中。
- 7. 表单事件:
- 1. onsubmit 确认按钮被点击。
此事件常用于表单的提交 - 2. onreset 重置按钮被点击。
- 1. onsubmit 确认按钮被点击。
- 1. 点击事件:
- 概念:某些组件被执行了某些操作后,触发某些代码的执行。
- BOM
- html
- 前端进阶
- Bootstrap
一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。- 框架
一个半成品软件,开发人员可以在框架基础上,在进行开发,简化编码。 - 优点 :响应式布局
同一套页面可以兼容不同分辨率的设备。- 依赖栅格系统,将一行平均分成12个格子
- 1. 定义容器。相当于之前的table、
- 容器分类:
- 1. container:两边留白
- 2. container-fluid:每一种设备都是100%宽度
- 容器分类:
- 2. 定义行。相当于之前的tr 样式:row
- 3. 定义元素。指定该元素在不同的设备上,所占的格子数目。样式:col-设备代号-格子数目
- 设备代号:
- 1. xs:超小屏幕 手机 (<768px):col-xs-12
- 2. sm:小屏幕 平板 (≥768px)
- 3. md:中等屏幕 桌面显示器 (≥992px)
- 4. lg:大屏幕 大桌面显示器 (≥1200px)
- 栅格类属性向上兼容,向下不兼容
- 设备代号:
- 注意:
- 1. 一行中如果格子数目超过12,则超出部分自动换行。
- 2. 栅格类属性可以向上兼容。栅格类适用于与屏幕宽度大于或等于分界点大小的设备。
- 3. 如果真实设备宽度小于了设置栅格类属性的设备代码的最小值,会一个元素沾满一整行。
- 框架
- Bootstrap
- XML
XML 被设计用来传输和存储数据。- 概念
- 功能
- 存储数据
- 1. 配置文件
- 2. 在网络中传输
- 存储数据
- xml与html的区别
- 1. xml标签都是自定义的,html标签是预定义。
- 2. xml的语法严格,html语法松散
- 3. xml是存储数据的,html是展示数据
- 功能
- 语法
- 基本语法:
- 1. xml文档的后缀名 .xml
- 2. xml第一行必须定义为文档声明
- 3. xml文档中有且仅有一个根标签
- 4. 属性值必须使用引号(单双都可)引起来
- 5. 标签必须正确关闭
- 6. xml标签名称区分大小写
- 组成部分:
- 1. 文档声明
- 1. 格式:<?xml 属性列表 ?>
- 2. 属性列表:
- version:版本号,必须的属性
- encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
- standalone:是否独立
- 取值:
- yes:不依赖其他文件
- no:依赖其他文件
- 取值:
- 2.XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
- 约束(不需要会写,会读,会用,会引入即可)
- dtd(会读即可)
- * 引入dtd文档到xml文档中
- * 内部dtd:将约束规则定义在xml文档中
- * 外部dtd:将约束的规则定义在外部的dtd文件中
- * 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
- * 网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
- Schema:(会读即可)
- 1.填写xml文档的根元素
- 2.引入xsi 前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //固定的
- 3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
- 4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml" // xmlns:a="http://www.itcast.cn/xml2" a这就是前缀标识,前缀标识可以没有
- dtd(会读即可)
- 1. 文档声明
- 基本语法:
- jsoup(仅是大纲,查阅API文档 https://jsoup.org/apidocs/index.html?overview-summary.html)#Jsoup类
- 快速入门
- 1. 导入jar包
- 2. 获取Document对象
- 3. 获取对应的标签Element对象
- 4. 获取数据
- Jsoup方法
- parase 返回Document(文档对象)
- parse(File in, String charsetName):解析xml或html文件的。
- parse(String html):解析xml或html字符串
- parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
- Document继承Element类。所以Element类的所有方法,Document都能使。注意 elements为element的集合,它可以使用select方法,可以get(int index)来获取Element对象。但不可使用获取子元素的方法诸如getElementById(String id)。
- document方法 #获取子元素方法
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
- Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
- Element:元素对象
- 获取子元素对象 (方法与document获取子元素方法相同 )#获取子元素方法
- 获取属性值
- String attr(String key):根据属性名称获取属性值
- 获取文本内容
- String text():获取文本内容
- String html():获取标签体的所有内容(包括字标签的字符串内容)
- 5. Node:节点对象(用于增 删 改) 用的不多
- 是Document和Element的父类
- jsoup查询方式
- selement的select方法 https://github.com/sogeisetsu/xml/blob/master/JsoupDemoOne.java
- 个人经验如果查询, 如 div.one 是div标签里面class是one的元素,再如div#123 是id属性为123的div,再如div[class=class1]span[id=id1] 查询的是div属性class是class1 id是id1的标签,再如div[href] 是指div里面有href属性的元素 ,他和div[class=class1]span[id=id1] 的不同是是否指定属性值
- 是Element和Elements和document的方法
- 参考Selector类中定义的语法
- https://github.com/sogeisetsu/ideadao/blob/master/htmlstudy/src/afterxml/JsoupDemoOne.java
- https://blog.csdn.net/wangjunjun2008/article/details/50513528
- XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言,记住xpath是管xml的
- https://github.com/sogeisetsu/xml/blob/master/XPathDemo.java
- https://www.cnblogs.com/huangyuan123/articles/9520881.html
- JxDocumnet(document)来获取xpath基本对象
- 语法看w3cschool https://www.w3school.com.cn/xpath/xpath_syntax.asp
- selement的select方法 https://github.com/sogeisetsu/xml/blob/master/JsoupDemoOne.java
- 快速入门
- 概念
- Web相关
- Web相关知识
- 网络通信简图
- 网络通信三要素
- 1. IP:电子设备(计算机)在网络中的唯一标识。
- 2. 端口:应用程序在计算机中的唯一标识。 0~65536
- 3. 传输协议:规定了数据传输的规则
- 1. 基础协议:
- 1. tcp:安全协议,三次握手。 速度稍慢
- 2. udp:不安全协议。 速度快
- 1. 基础协议:
- 服务器:安装了服务器软件的计算机
- 服务器软件:接收用户的请求,处理请求,做出响应
- web服务器软件:接收用户的请求,处理请求,做出响应。
- 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
- web容器
- Tomcat&&Servlet的逻辑关系
- 1 . 浏览器访问网页 ,url提供了ip地址和端口,通过ip地址和端口,浏览器找到了运行在服务器上的Tomcat
Tomcat? 可以理解Tomcat是一个服务器软件,计算机要实现接收用户的请求,处理请求,做出响应需要依靠服务器软件,也可以说服务器就是安装了服务器软件的计算机 - 2. url 还提供了虚拟路径和servlet项目名称 Tomcat根据这个来检索是否有这么个虚拟路径和servlet项目名称,在web.xml文件中检索到了url中的servlet名称
- 3. 根据这个servlet名称找到了规定好了的servlet类 servlet类调用service方法
- 关系图
- 1 . 浏览器访问网页 ,url提供了ip地址和端口,通过ip地址和端口,浏览器找到了运行在服务器上的Tomcat
- Tomcat #重点
- 请查看此链接,这是传智播客的笔记 https://blog.csdn.net/suyues/article/details/104554548
- -- 项目的根目录
- -- WEB-INF目录:
- -- web.xml:web项目的核心配置文件
- -- classes目录:放置字节码文件的目录
- -- lib目录:放置依赖的jar包
- -- WEB-INF目录:
- IDEA 与 Tomcat相关配置
- 1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:Using CATALINA_BASE: >--->这是tomcat的配置文件
- 2. 工作空间项目 和 tomcat部署的web项目
- * tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源
- * WEB-INF目录下的资源不能被浏览器直接访问。
- web-inf下面会有web.xml这是项目的配置文件
- 3. 断点调试:使用"小虫子"启动 dubug 启动
- 1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- Servlet
- @web.xml配值方法
- 概念:运行在服务器端的小程序
- Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
- 将来我们自定义一个类,实现Servlet接口,复写方法。
- Servlet的生命周期
- https://www.runoob.com/servlet/servlet-life-cycle.html 菜鸟教程
- init
- service
- destroy
- Servlet3.0可以用注解的方式来配置虚拟路径 load-on-startup等信息,可以不用 @web.xml
- load-on-startup大于0的话一启动这个服务器的web项目就执行init方法,小于0时需要访问这个路径才执行init方法
- Servlet体系结构
- urlpartten:Servlet访问路径
- 1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
- 2. 路径定义规则:
- 1. /xxx:路径匹配
- 2. /xxx/xxx:多层路径,目录结构
- 3. *.do:扩展名匹配(这个前面不要加/ 会报错的)
- https://www.runoob.com/servlet/servlet-life-cycle.html 菜鸟教程
- request #request
- 3. request功能:
- 1. 获取请求消息数据
- 1. 获取请求行数据
- * GET /day14/demo1?name=zhangsan HTTP/1.1
- * 方法:
- 1. 获取请求方式 :GET
- * String getMethod()
- 2. (*)获取虚拟目录:/day14
- * String getContextPath()
- 3. 获取Servlet路径: /demo1
- * String getServletPath()
- 4. 获取get方式请求参数:name=zhangsan
- * String getQueryString()
- 5. (*)获取请求URI:/day14/demo1
- * String getRequestURI(): /day14/demo1
- * StringBuffer getRequestURL() :http://localhost/day14/demo1
- * URL:统一资源定位符 : http://localhost/day14/demo1 中华人民共和国
- * URI:统一资源标识符 : /day14/demo1 共和国
- 6. 获取协议及版本:HTTP/1.1
- * String getProtocol()
- 7. 获取客户机的IP地址:
- * String getRemoteAddr()
- 1. 获取请求方式 :GET
- 2. 获取请求头数据
- * 方法:
- * (*)String getHeader(String name):通过请求头的名称获取请求头的值
- * Enumeration<String> getHeaderNames():获取所有的请求头名称
- * 方法:
- 3. 获取请求体数据:
- * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
- * 步骤:
- 1. 获取流对象
- * BufferedReader getReader():获取字符输入流,只能操作字符数据
- * ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
- 2. 再从流对象中拿数据
- 1. 获取流对象
- 1. 获取请求行数据
- 2. 其他功能:
- 1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
- 1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
- 2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
- 3. Enumeration<String> getParameterNames():获取所有请求的参数名称
- 4. Map<String,String[]> getParameterMap():获取所有参数的map集合
- * 中文乱码问题:
- * get方式:tomcat 8 已经将get方式乱码问题解决了
- * post方式:会乱码
- * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
- 2. 请求转发:一种在服务器内部的资源跳转方式
- 1. 步骤:
- 1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
- 2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
- 2. 特点:
- 1. 浏览器地址栏路径不发生变化
- 2. 只能转发到当前服务器内部资源中。
- 3. 转发是一次请求
- #重定向和转发的区别
- 1. 步骤:
- 1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
- 1. 获取请求消息数据
- BeanUntils
- 用途:简化数据封装
- 限制
- 被封装的类必须是标准的简单java类
- 具体标准
- 1. 类必须被public修饰
- 2. 必须提供空参的构造器
- 3. 成员变量必须使用private修饰
- 4. 提供公共setter和getter方法(必须标准,如属性为name,那么setter方法必须是setName())
- 方法
- 1. setProperty()
- 2. getProperty()
- 3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
- 注释:BeanUtils.populate(user, map); 的map对象的value如果是数组的话就以数组第一个为准
- 3. request功能:
- response
- 1. HTTP协议:响应消息
- 请求消息
- #request
- 响应消息
- 响应行
- HTTP/1.1 200
- 状态码 :服务器告诉客户端浏览器本次请求和响应的一个状态
- 分类
- 1xx 表示客户端数据已经上传到服务器,但没有上传完,服务器返回1xx
- 2xx 访问成功
- 3xx 访问被重定向 302(重定向) 304(访问缓存)
- 4xx 客户端请求出错
- 404 客户端访问的路径不存在
- 405 请求方式没有对应的doxxx()方法
- 5xx 服务器内部程序出错
- 分类
- 响应头
- 1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- 2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- * in-line:默认值,在当前页面内打开
- * attachment;filename=xxx:以附件形式打开响应体。文件下载
- 响应空行
- 响应体
- 就是数据,像文本图片一类的数据
- 响应行
- 请求消息
- 2. Response对象
- 1.重定向
- 第一种
- resp.setStatus(302); //设置状态码
- resp.setHeader("location","ServletDemo2"); //设置头
- 第二种
- resp.sendRedriect("ServletDemo2");
- #重定向和转发的区别
- * 重定向的特点:redirect
- 1. 地址栏发生变化
- 2. 重定向可以访问其他站点(服务器)的资源
- 3. 重定向是两次请求。不能使用request对象来共享数据
- * 转发的特点:forward
- 1. 转发地址栏路径不变
- 2. 转发只能访问当前服务器下的资源
- 3. 转发是一次请求,可以使用request对象来共享数据
- * 重定向的特点:redirect
- 路径写法:
- 路径分类
- 1. 相对路径:通过相对路径不可以确定唯一资源
- * 如:./index.html
- * 不以/开头,以.开头路径
- 或者省略掉'./' index.html
- * 规则:找到当前资源和目标资源之间的相对位置关系
- * ./:当前目录
- * ../:后退一级目录
- 2. 绝对路径:通过绝对路径可以确定唯一资源
- * 如:http://localhost/day15/responseDemo2 /day15/responseDemo2
- * 以/开头的路径
- * 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
- * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
- * 建议虚拟目录动态获取:request.getContextPath()
- * <a> , <form> 重定向...
- * 给服务器使用:不需要加虚拟目录
- * 转发路径
- 1. 相对路径:通过相对路径不可以确定唯一资源
- 路径分类
- 第一种
- 2.服务器输出字符数据
- 输出字符数据或者字节数据
- getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一个方法。
- 编码问题
- Tomcat使用IOS 8859-1编码 我们要将他改成utf-8
- https://segmentfault.com/a/1190000013126031
- resp.setContentType("text/html;charset=utf-8"); 将自己的编码和客户端的解码设置成utf-8
- 输出字符数据或者字节数据
- 1.重定向
- 3.ServletContext对象:
- 1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
- 2. 获取:
- 1. 通过request对象获取
- request.getServletContext();
- 2. 通过HttpServlet获取
- this.getServletContext();
- 1. 通过request对象获取
- 3. 功能:
- 1. 获取MIME类型:
- * MIME类型:在互联网通信过程中定义的一种文件数据类型
- * 格式: 大类型/小类型 text/html image/jpeg
- * 获取:String getMimeType(String file)
- * MIME类型:在互联网通信过程中定义的一种文件数据类型
- 2. 域对象:共享数据
- 1. setAttribute(String name,Object value)
- 2. getAttribute(String name)
- 3. removeAttribute(String name)
- * ServletContext对象范围:所有用户所有请求的数据
- 3. 获取文件的真实(服务器)路径
- 1. 方法:String getRealPath(String path)
- String realPath = context.getRealPath(""); 或者 System.out.println(context.getRealPath("/"));
- 都指向 '//D:\day13\out\artifacts\day16_war_exploded\'
- 即web目录
- String b = context.getRealPath("/b.txt");//web目录下资源访问
- System.out.println(b);
- String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
- System.out.println(c);
- String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
- System.out.println(a);
- 1. 获取MIME类型:
- 1. HTTP协议:响应消息
- 会话技术
- 1. 会话:一次会话中包含多次请求和响应。
- 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
- 2. 功能:在一次会话的范围内的多次请求间,共享数据
- 3. 方式:
- 1. 客户端会话技术:Cookie
- 2. 服务器端会话技术:Session
- cookie----客户端会话技术
- 语法
- 1. new Cookie(name,value)
- 2. 向response添加cookie response.addCookie(cookie)
- 3 . 从request获取Cookie request.getCookies 返回cookie数组
- getValue getName
- setValue
- 2. 持久化存储:
- * setMaxAge(int seconds)
- 1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
- 2. 负数:默认值
- 3. 零:删除cookie信息
- * setMaxAge(int seconds)
- * setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
- * 如果要共享,则可以将path设置为"/"
- 意义
- 在一次会话的范围内的多次请求间,共享数据 数据储存在服务器端
- 5. Cookie的特点和作用
- 1. cookie存储数据在客户端浏览器
- 2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
- * 作用:
- 1. cookie一般用于存出少量的不太敏感的数据
- 2. 在不登录的情况下,完成服务器对客户端的身份识别
- 语法
- session--服务器端会话
- 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
- 2. 快速入门:
- 1. 获取HttpSession对象:
- HttpSession session = request.getSession();
- 2. 使用HttpSession对象:
- Object getAttribute(String name)
- void setAttribute(String name, Object value)
- void removeAttribute(String name)
- 1. 获取HttpSession对象:
- 3. 原理
- * Session的实现是依赖于Cookie的。
- 4.细节:
- 1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
- 默认情况下。不是。
- 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
- Cookie c = new Cookie("JSESSIONID",session.getId());
- c.setMaxAge(60*60);
- response.addCookie(c);
- 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
- 默认情况下。不是。
- 2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
- * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
- * session的钝化:
- * 在服务器正常关闭之前,将session对象系列化到硬盘上
- * session的活化:
- * 在服务器启动后,将session文件转化为内存中的session对象即可。
- * session的钝化:
- * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
- 3. session什么时候被销毁?
- 1. 服务器关闭
- 2. session对象调用invalidate() 。
- 3. session默认失效时间 30分钟
- 选择性配置修改
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
- 1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
- 5. session的特点
- 1. session用于存储一次会话的多次请求的数据,存在服务器端
- 2. session可以存储任意类型,任意大小的数据
- session与Cookie的区别:
- 1. session存储数据在服务器端,Cookie在客户端
- 2. session没有数据大小限制,Cookie有
- 3. session数据安全,Cookie相对于不安全
- cookie session 转发 ServletContext 的区别
- https://zhuanlan.zhihu.com/p/73052614
- cookie session都是默认一次对话,ServletContext的作用域是所有Servlet都作用
- 1. 会话:一次会话中包含多次请求和响应。
- Web相关知识