JavaWeb
本节概要
(1)bootstrap:框架(了解,会使用中文文档即可)
- 表格组件
- 搜索栏组件
- CSS 全局样式
- 预定义样式
- Javaweb-EE 核心基础部分
(2)web:B/S,C/S 结构
XML 解析 - DOM 解析:基于面向对象
- xpath 技术
- SAX 解析:基于事件编程
HTTP 协议以及tomcat:web 应用服务器 http 服务器:Nginx ——俄罗斯人开发——并发 5 万 负载均衡——配置——权重 高可用—— Nginx + keepalive FASTDFS / HDFS:图片服务器——文件分布式系统 会话管理(request,response) Servlet JSP 过滤器/监听器
1、服务器集群 -----> HTTP 服务器:Nginx
机制:投票容错机制 -----> ping-pang 机制 当服务器集群出现问题宕机,某一台服务器出现问题,其他服务器开始投票,保证半数以上的票才能一致通过。 PS:保证有三台服务器 为了保证 高可用: 一般情况下,一个主机对应一个备份机(vip--虚拟 ip 地址)存在:虚拟 ip 地址 B/S 结构 1)分布式 2)能处理海量数据 3)高可用 4)高并发 5)高吞吐量 C/S 结构 e.g. QQ/阿里巴巴 特点:客户端必须要升级才能使用服务器高版本功能<
XML 语言 Exteniable XML 的作用 1)作为软件的配置文件使用 Xxx.propertiwe: propertes load 2)作为小型"数据库" 描述一台服务器 XML 语言和 HTML 语言的区别: 1)结构上 XML 结构上在 xml 约束的基础上大部分都作为配置文件 HTML 结构:语法不严谨 --> 写静态的基本网页(一定是 HTML 标签),也可以是自己 2)语法上 XML 是严谨的,HTML 不严谨 XML 的语法规则 标签: 1)标签必须配对,保证结构的严谨, 2)没有定义 namespace(名称空间),就不能直接在标签使用冒号 3)一个标签不能以数字开头,不能有空格,但是可以有下划线开头 属性: 属性名称="属性值" 注意:属性值可以用单引号或双引号括起来,建议用双引号 一般情况下:xml 中如果没有指定 DTD/Schema 约束的时候,属性名称可以重复 xml 注释:同 HTML 注释 xml 文档声明 <??xml version="1.0" encoding+"utf-8"?> 在使用 idea/eclipse 开发工具:默认解析的时候即使文档是 GBK 格式,都不会出现,工具自动进行了编码转换 转义 转义字符和 HTML 的转义字符是一样的 转义字符 --> <h1>>/name 批量转义 <!CDATA[ 需要转义的标签 ]]>
<student>student</student>
字符 --> 字节 :编码
GBK :默认国标——一个中文对应两个字节
字节 --> 字符 : 解码过程
解析 xml :一定要保证编码和解码的格式一致
使用 xml 完成一个联系人通讯录 描述编号,姓名,性别,联系方式,邮箱,地址,并且联系人有多个(xml 中有且仅有一个根标签)
//使用 idea 创建 maven 项目
//com.bit.xml_01
//11:24
//<concact id="001" gender="男" phone="13000000000" email="张三@163.com">
<concact-list>
<concact id="001">
<name>张三</name>
<geader>男</gender>
<phone>13000000000</phone>
<email>zhangsan@163.com</email>
</concact>
</concact-list>
解析文件是重点,写不是关键
最终的需求:解析 cancact.xml 文件 ---> 将它封装成 Concact 联系人对象 DOM 解析 SAX 解析 重点:如何解析 xml 文件 解析 xml DOM 解析 ---> 基于面向对象的方式:便于理解 sun 公司提出,有官方的工具——jaxp 第三方的工具,比官方工具更实用——dom4j(dom for java) SAX 解析 ---> 基于事件编程——符合事件编程的三要素 dom4j_1.6.1-jar 包 关于 dom 解析的开发步骤 1)写好指定的 xml 文件:concact.xml 2)创建 xml 解析器对象 3)利用解析器对象的read(url:资源目录的地址) a.要么绝对路径 b.读取 maven 过程的 classes 下面的资源文件:获取当前类的字节码文件 4)
dom 解析:由 SAXReader解析器,内置了一个解析引擎,遇到第一个标签,将第一个 标签作为根节点:rootElement,后面解析标签的标签都开始进行排列,作为 他的子元素进行排列。
如何使用 dom4j 获取标签对象 获取属性 获取文本 1)getRootElement():获取根元素对象 2)element("标签名称"):获取第一个子节点对象 3)elements("指定标签名称"):获取所有同名的标签名称, 4)elements():获取所有子节点对象 ---> List
public class Demo2{
public static void main(String[] args)throws Exception{
//创建解析器环境
SAXReader reader = new SAXReader() ;
//加载资源文件
Document doc = reader.read(Deml2.class.getC)
//获取标签名称
System.out.println(conList.getName()) ;
}
}
集合的遍历方式 普通 for 循环 集合遍历的专有方式: 增强 for 循环(JDK 特性):for-each 1、传统的for循环遍历,基于计数器的: 顺序存储:读取性能比较高。适用于遍历顺序存储集合。 链式存储:时间复杂度太大,不适用于遍历链式存储的集合。 2、迭代器遍历,Iterator: 顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。 链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。 3、foreach循环遍历: foreach只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些 场合不使用。而且它本身就是基于Iterator实现的,但是由于类型转换的问题,所以会比直接使用Iterator慢一 点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。
获取属性 前提:获取属性所在的标签对象 两种方式 1)通过标签对象.attributeValue("id") ---> String 2)通过标签.attribute() ---> Attribute(属性)对象
注意:xml 中空格和换行会被解析