Skip to content

因为原先的-java-出现了错误,所以新开了javaweblearn。day13和logindemo在-java-

Notifications You must be signed in to change notification settings

sogeisetsu/javaweblearn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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"。
      • 备注
        • 记得使用\\来表示不是转义字符
        • \小写字母 字母大写后算非
    • 反射
      • Class类
        • 实例化方法有三个
          • 实例化对象.getClass()
          • 类.Class
          • Class.forName(包.类)
            • 此方法最常用,可以不用import类就能实例化一个Class类对象 Class= Class.forName("java.until.Date");
        • 通过Class的实例化对象来实现一些操作(Class类的使用)
          • 通过Class类来实例化对象
            • 代替new
            • 有参构造
            • 无参构造
              • class类的实例化对象.newInstance()
          • 调用普通方法
            • Method类
          • 调用属性
            • Field类
          • 应用
            • 工厂设计模式降低耦合
            • 设置setter和getter
            • 访问并修改私有属性
    • 国际化程序
      • 总结
        • 1.资源文件必须每个单词首字母大写,结尾“.properties”
        • ResourceBundle读取资源文件
        • Locale类表示国家或地区
        • MessageFormat.format用于动态文本
    • DAO
      • 分层设计思想
        • 显示层
        • 控制层
        • 业务层
        • 数据层
        • 数据库
      • 准备阶段
        • VO类
          • 负责数据的传输与包装
          • 是简单java类
          • 简单java类的开发原则
            • 类名要和表名保持一致
            • 所有的简单java类都必须要实现java.io.Serializable接口
            • 不允许出现基本数据类型,只能使用包装类,原因是让默认值变为NULL
            • 所有的属性必须封装,必须编写setter、getter
            • 类之中一定要有无参构造
          • 放在VO包里面
        • DatabaseConnection类
          • 负责数据库连接
          • 负责取得和关闭数据库连接
          • 放在dbc包中
      • 开发数据层
        • 数据层操作标准
        • 数据层操作标准接口的实现类
        • 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
    • 类集框架
      • Collection
        • Collection是很多接口的父类,不直接使用它
      • Set
        • TreeSet
          • 排序
          • 排序靠Compareable接口实现,所以对重复元素的识别也是靠Compareable接口的CompareTo方法
        • HsahSet
          • 无序
        • 没有重复元素
        • 该接口的抽象方法和Collection基本一致,甚至更少
      • List
        • 两个子类
          • ArrayList
          • Vector(基本不用)
      • 集合的输出
        • Iterator
        • Enumeration
          • 链表必须是Vector
        • ListIterator
        • foreach
        • 重要
      • 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()
      • 数据流
        • count
      • 注意这些都是接口(List,Set,Collection,ListIterator,Iterator,Map)
    • 数据库 #数据库
      • 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()
            • 开始处理
      • 连接池
        • 接口由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(); 获取数据库连接
      • Spring JDBC
    • 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对象(不重要)
            • Element
              • 元素对象
              • 通过doucument来获取
              • 方法
                • 1. removeAttribute() 删除属性
                • 2. setAttribute():设置属性
                • code
          • XML DOM
            • node
              •  特点:所有dom对象都可以被认为是一个节点
              • 方法
                • appendChild():向节点的子节点列表的结尾添加新的子节点。参数是id
                • removeChild() :删除(并返回)当前节点的指定子节点。参数是id
                • 删除和增加子节点的代码
                  • 删除和增加子节点的代码
                • replaceChild():用新节点替换一个子节点。参数是id
              • 属性
                •  parentNode 返回节点的父节点。
              • 实例 动态表格
          • HTML DOM
            • 针对 HTML 文档的标准模型
            • innerHTML
              • 使用html元素对象的属性
              •  控制元素样式
                • 1. 使用元素的style属性来设置
                  • 使用元素的style属性来设置
                • 2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
        • 事件监听机制 (单独拿出来,不要强记,用时再查)
          • 概念:某些组件被执行了某些操作后,触发某些代码的执行。
            • 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
            • 事件源:组件。如: 按钮 文本输入框...
            • 监听器:代码。
            • 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
          • 常见的事件:@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 重置按钮被点击。
  • 前端进阶
    • 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. 如果真实设备宽度小于了设置栅格类属性的设备代码的最小值,会一个元素沾满一整行。
  • 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:(会读即可
    • 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查询方式
  • Web相关
    • Web相关知识
      • 网络通信简图
      • 网络通信三要素
        • 1. IP:电子设备(计算机)在网络中的唯一标识。
        • 2. 端口:应用程序在计算机中的唯一标识。 0~65536
        • 3. 传输协议:规定了数据传输的规则
          • 1. 基础协议:
            • 1. tcp:安全协议,三次握手。 速度稍慢
            • 2. udp:不安全协议。 速度快
      • 服务器:安装了服务器软件的计算机
      • 服务器软件:接收用户的请求,处理请求,做出响应
      • 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方法
      • 关系图
    • Tomcat #重点
      • 请查看此链接,这是传智播客的笔记 https://blog.csdn.net/suyues/article/details/104554548
      • -- 项目的根目录
        • -- WEB-INF目录:
          • -- web.xml:web项目的核心配置文件
          • -- classes目录:放置字节码文件的目录
          • -- lib目录:放置依赖的jar包
    • 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 启动
    • 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:扩展名匹配(这个前面不要加/ 会报错的)
      • 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()
            • 2. 获取请求头数据
              • * 方法:
                • * (*)String getHeader(String name):通过请求头的名称获取请求头的值
                • * Enumeration<String> getHeaderNames():获取所有的请求头名称
            • 3. 获取请求体数据:
              • * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
              • * 步骤:
                • 1. 获取流对象
                  • *  BufferedReader getReader():获取字符输入流,只能操作字符数据
                  • *  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
                • 2. 再从流对象中拿数据
          • 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. 转发是一次请求
              • #重定向和转发的区别
        • 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如果是数组的话就以数组第一个为准
      • 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对象来共享数据
            • 路径写法:
              • 路径分类
                • 1. 相对路径:通过相对路径不可以确定唯一资源
                  • * 如:./index.html
                  • * 不以/开头,以.开头路径
                  • 或者省略掉'./' index.html
                  • * 规则:找到当前资源和目标资源之间的相对位置关系
                    • * ./:当前目录
                    • * ../:后退一级目录
                • 2. 绝对路径:通过绝对路径可以确定唯一资源
                  • * 如:http://localhost/day15/responseDemo2 /day15/responseDemo2
                  • * 以/开头的路径
                  • * 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
                    • * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
                    • * 建议虚拟目录动态获取:request.getContextPath()
                    • * <a> , <form> 重定向...
                    • * 给服务器使用:不需要加虚拟目录
                    • * 转发路径
          • 2.服务器输出字符数据
            • 输出字符数据或者字节数据
              • getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一个方法。
            • 编码问题
        • 3.ServletContext对象:
          • 1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
          • 2. 获取:
            • 1. 通过request对象获取
              • request.getServletContext();
            • 2. 通过HttpServlet获取
              • this.getServletContext();
          • 3. 功能:
            • 1. 获取MIME类型:
              • * MIME类型:在互联网通信过程中定义的一种文件数据类型
                • * 格式: 大类型/小类型   text/html image/jpeg
              • * 获取:String getMimeType(String file)
            • 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. 会话:一次会话中包含多次请求和响应。
          • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
        • 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信息
            • * 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)
          • 3. 原理
            • * Session的实现是依赖于Cookie的。
          • 4.细节:
            • 1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
              • 默认情况下。不是。
                • 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
                  • Cookie c = new Cookie("JSESSIONID",session.getId());
                  • c.setMaxAge(60*60);
                  • response.addCookie(c);
            • 2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
              • * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
                • * session的钝化:
                  • * 在服务器正常关闭之前,将session对象系列化到硬盘上
                • * session的活化:
                  • * 在服务器启动后,将session文件转化为内存中的session对象即可。
            • 3. session什么时候被销毁?
              • 1. 服务器关闭
              • 2. session对象调用invalidate() 。
              • 3. session默认失效时间 30分钟
              • 选择性配置修改
                • <session-config>
                • <session-timeout>30</session-timeout>
                • </session-config>
          • 5. session的特点
            • 1. session用于存储一次会话的多次请求的数据,存在服务器端
            • 2. session可以存储任意类型,任意大小的数据
        • session与Cookie的区别:
          • 1. session存储数据在服务器端,Cookie在客户端
          • 2. session没有数据大小限制,Cookie有
          • 3. session数据安全,Cookie相对于不安全
        • cookie session 转发 ServletContext 的区别

About

因为原先的-java-出现了错误,所以新开了javaweblearn。day13和logindemo在-java-

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published