RDBMS关系型数据库管理系统
基于关系模型提出来的数据库
关系模型是用一个二维表,行和列的方式来保存数据的模型
MySQL,Oracle,SQLite
数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
对用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。
基本可用(Basically Available)
软状态/柔性事务(Soft state)
最终一致性 (Eventual consistency)
Redis
兼具Memcached和Tokyo Tyrant优势的键值存储
擅长处理数组类型的数据
具有非常快的处理速度
可以高速处理时间序列的数据,易于处理集合运算
拥有很多可以进行原子操作的方法
使用一致性散列(Consistent Hashing)算法来分散数据
MongoDB
面向无需定义表结构的文档数据
具有非常快的处理速度
通过BSON的形式可以保存和查询任何类型的数据
无法进行JOIN处理,但是可以通过嵌入(embed)来实现同样的功能
使用sharding(范围分割)算法来分散数据
关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库。
RDBMS
NoSQL
分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。
分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
分布式系统可以应用在不同的平台上如:Pc、工作站、局域网和广域网上等。
Load Balance 负载均衡 每个机器均衡负载 减轻服务器压力
Fail Over失败迁移 事务在某个机器中断,可转移到集群中其他正常机器上执行
ORM就是利用描述对象和关系型数据库之间的映射信息,自动将Java应用程序中的对象持久化到关系数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。
Hibernate和MyBatis就是基于关系型数据库的ORM框架
redis是一种高级的key-value的存储系统
控制反转:将我们创建对象的方式反转了,将对象的创建权交给Spring,对象的创建以及依赖关系的注入和维护都可以由Spring完成。
反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序
依赖注入:传统模式通过new的代码方式创建对象,调用者和别调用者耦合性增强,不利于项目后期的维护。通过控制反转由Spring创建对象的实例,从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这就是依赖注入
依赖注入两种方法实现:属性setter方法注入,构造方法注入(基于构造方法的依赖注入通过调用含参的构造方法来实现)
面向切面编程,是OOP(面向对象编程)的一种补充
AOP采取纵向重复,横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或执行时,再将这些提取出来的代码应用到需要执行的地方。
体现在Struts2,Spring
体现在Filter,Interceptors
过滤器技术:架构上来讲,Filter能覆盖到所有的Servlet
拦截器技术:架构上来讲,Interceptors能覆盖到所有的Action,将接受参数功能放到拦截器
将纵向重复代码横向抽取
前处理->放行->后处理
事务管理中,事务的开启和提交放入代理类InvocationHandler,使用代理技术动态加载到所有的service层(被代理对象)中,形成代理对象
一件事情有n个组成单元,这n个组成单元要不同时成功,要不就同时失败,就是将n个组成单元放入一个事务中。
所谓事务就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
例如在数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
事务和程序是两个概念。一般来讲,一个程序包含多个事务。
1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作 要么都发生,要么都不发生。
2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。
3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的 事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变
Java DataBase Connectivity:Java数据库连接,SUN公司推出的java访问数据库的标准规范(接口)。
1.JDBC是一种执行SQL语句的JavaAPI。
2.JDBC可以为多种关系数据库提供统一访问接口。
3.JDBC由一组Java工具类和接口组成。
开发步骤:
注册驱动–>获取连接–>创建一个执行SQL语句对象–>关闭
传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序.
1. 继承的方式.
能够控制这个类的构造的时候,才可以使用继承.
2. 装饰者模式方式.
包装对象和被包装的对象都要实现相同的接口.
包装的对象中需要获得到被包装对象的引用.
缺点:如果接口的方法比较多,增强其中的某个方法.其他的功能的方法需要原有调用.
3. 三种方式:动态代理的方式.
* 被增强的对象实现接口就可以.
1、增强类与被增强的类要实现统一接口
2、在增强类中传入被增强的类
3、需要增强的方法重写 不需要增强的方法调用被增强对象的
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目 标资源访问前后进行逻辑处理
编写一个过滤器的类实现Filter接口
实现接口中尚未实现的方法(着重实现doFilter方法)
在web.xml中进行配置(主要是配置要对哪些资源进行过滤)
Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法
init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行
doFilter(ServletRequest,ServletResponse,FilterCha):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
destory():代表是filter销毁方法 当filter对象销毁时执行该方法
Filter对象的生命周期:
Filter何时创建:服务器启动时就创建该filter对象
Filter何时销毁:服务器关闭时filter销毁
监听器就是监听某个对象的的状态变化的组件
监听器的相关概念:
事件源:被监听的对象 ----- 三个域对象 ServletRequest HttpSession servletContext
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器 ---- 6+2
注册监听器:将监听器与事件源进行绑定
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代 码
监听器的编写步骤(重点):
a、编写一个监听器类去实现监听器接口
b、覆盖监听器的方法
c、需要在web.xml中进行配置—注册
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。
servlet规范:包含三个技术点
1)servlet技术
2)filter技术—过滤器
3)listener技术—监听器
1)init(ServletConfig config)
何时执行:servlet对象创建的时候执行
ServletConfig : 代表的是该servlet对象的配置信息
2)service(ServletRequest request,ServletResponse response)
何时执行:每次请求都会执行
ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息
3)destroy()
何时执行:servlet销毁的时候执行
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
1)Servlet何时创建
默认第一次访问servlet时创建该对象
2)Servlet何时销毁
服务器关闭servlet就销毁了
3)每次访问必然执行的方法
service(ServletRequest req, ServletResponse res)方法
一个Web应用只有一个
何时创建:服务器启动创建
何时销毁:服务器关闭销毁
ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)
创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))
销毁:web应用被卸载(服务器关闭,移除该web应用)
String path = context.getRealPath(相对于该web应用的相对地址);
response.setContentType(“text/html;charset=UTF-8”);
通过response重定向
response.sendRedirect(location);
1)重定向两次请求,转发一次请求
2)重定向地址栏的地址变化,转发地址不变
3)重新定向可以访问外部网站 转发只能访问内部资源
4)转发的性能要优于重定向
request域的作用范围:一次请求中
创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中
获得请求参数
String getParameter(String name)
String[] getParameterValues(String name)
Map
String getContextPath() —web应用的名称
request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
解决post提交方式的乱码:request.setCharacterEncoding(“UTF-8”);
解决get提交的方式的乱码
parameter = new String(parameter.getbytes(“iso8859-1”),“utf-8”);
HttpSession session = request.getSession();
作用范围:
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象
何时创建:第一次调用request.getSession时创建
何时销毁:服务器关闭销毁 session过期 手动销毁
绑定状态:就一个对象被放到session域中
解绑状态:就是这个对象从session域中移除了
钝化状态:是将session内存中的对象持久化(序列化)到磁盘
内存的数据写入到硬盘上的过程。
活化状态:就是将磁盘上的对象再次恢复到session内存中
对服务器进行优化
作用范围:整个JSP页面,是四大作用域中最小的一个。
就是设置的属性只能在当前页面有效
当对JSP的请求开始,当相应结束时销毁。
jsp页面被执行,声明周期开始;
jsp页面执行完毕,声明周期结束;
作用:
(1)获取其它八大隐式对象,可以认为是一个入口对象。
(2)获取其所有域中的数据
有可以获得其他8大隐式对象的方法
findAttribute()
page域、request域、session域、application域,从小域到大域开始搜索
response.getWriter().write();
服务器配置,可以取得初始化参数
指当前页面转换后的Servlet类的实例
错误页起作用
在Web应用中,客户端与服务端进行交互会产生一些数据,而Web服务器需要对这些数据进行保存
简单的数据访问语言,表达式语言。
JSP页面的隐式对象可以用EL表达式中的pageContext.request.contextPath
只有pageContext对象是El和JSP隐式对象共有的,其他隐式对象毫不相干
EL表达式中,为了获取指定域中的数据,提供了pageScope,requestScope,sessionScope和applicationScope四个隐式对象
JSP中,为了获得客户端传递的请求参数,提供了param和paramValues两个隐式对象
param是Map类型,与request。getParameter()方法相同,再使用EL获取参数时,如果不存在返回的是空字符串,而不是null。
如果一个请求参数有多个值,则可以使用paramValues对象获取请求参数的所有值,用于返回请求参数所有值组成的数组
JSP是建立在Servlet规范之上的动态网页开发技术,其实质就是一个简化的Servlet
使用JavaBean编写业务组件
1)页面包含(动态包含):< jsp:include page=“被包含的页面”/>
2)请求转发:< jsp:forward page=“要转发的资源” />
<%@ include file=” ”%>是指令元素。
最终编译成java文件的数目不同。
静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
动态包含是各个jsp文件分别转换,分别编译。最终编程成多个java文件。
执行时间不同
静态包含发生在:JSP---->java文件阶段。
动态包含发生在:执行class文件阶段。动态加入。
静态包含在两个文件中不能有相同的变量,动态包含允许。
由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。而动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象。
无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。
静态包含最终编译成一个java文件,有一个request对象很好理解。而动态包含最终编译成多个jsp文件,为何会使用一个request对象呢?其实这些jsp组合的过程是一个请求转发的过程,自然也使用同一个request对象了。
静态包含和动态包含的使用
简单总结一下,就一句话:被包含的页面是静态页面就用静态包含,是动态页面就用动态包含。(当然,不是很绝对,但是这样用没有错。)
ECMAScript
1.语法
2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个全局的。弱类型!
3.数据类型:原始数据类型(undefined/null/string/number/boolean)
4.语句:
5.运算符:==
与===
的区别 ===如果类型不同,其结果就是不等
6.函数:两种写法(有命名称,匿名的)
BOM对象
window:alert(),prompt(),confirm(),setInterval(),clearInterval(),setTimeout(),clearTimeout()
history:go(参数),back(),forward()
location: href属性
事件:
onsubmit()此事件写在form标签中,必须有返回值。
onload()此事件只能写一次并且放到body标签中
其它事件放到需要操作的元素位置。(onclick、onfocus、onblur)
获取元素:
document.getElementById(“id”)
获取元素里面的值:
document.getElementById(“id”).value
向页面输出
弹窗:alert();……
向浏览器中写入内容:document.write(内容);
向页面指定位置写入内容,innerHTML
JavaScript框架,封装了JavaScript,DOM,Ajax等操作功能,语法简单,跨浏览器
JQuery它是javascript的一个轻量级框架,对javascript进行封装,它提供了很多方便的选择器。供你快速定位到需要操作的元素上面去。还提供了很多便捷的方法。
所有的jquery代码写在页面加载函数内
$(function(){
Jquery代码
});
获取元素方法
JS: document.getElementById();
JQ: $(“#id”);
注意 JQ对象只能操作JQ里面的属性和方法 JS对象只能操作JS里面的属性和方法。
层级选择器
ancestor descendant: 在给定的祖先元素下匹配所有的后代元素(儿子、孙子、重孙子)
parent > child : 在给定的父元素下匹配所有的子元素(儿子)
prev + next: 匹配所有紧接在 prev 元素后的 next 元素(紧挨着的,同桌)
prev ~ siblings: 匹配 prev 元素之后的所有 siblings 元素(兄弟)
层级选择器
111
222
333
444
555
666
异步JavaScript和XML的缩写,是JavaScript,XML,CSSDOM等多种技术的组合
它可以实现客户端的异步请求操作,从而使页面可以在不刷新的情况下与服务器进行通信
异步请求技术 异步加载 局部刷新
是基于HTML,CSS,JvaScript的前端框架,其预定义了一套CSS样式与样式对应的Jquery代码。BootStrap就是JQuery的一个插件