MVC设计模式css
M model 模型html
model包括service处理业务逻辑,entity实体类封装数据,dao操做数据库,utils工具类前端
service层主要用来处理业务逻辑,service层的一些公共处理可使用spring框架的AOP来完成,好比,日志信息,事物的处理java
Spring是一个框架,结合了java中多种优秀设计模式造成的一个企业级解决方案程序员
IOC :控制反转,将对象的建立与属性的赋值交给Spring框架完成,将控制权由程序员交给Spring框架这就是控制反转,IOC主要运用的是Java中的工厂设计模式,将要建立对象的类交给Spring工厂,须要时直接去工厂中取web
DI:DI和IOC本质相同说法不一样,DI依赖注入,经过属性的set方法或者类的构造方法为属性赋值ajax
AOP:面向切面编程,是对OOP面向对象编程的一种补充,主要运用的是Java中代理设计模式,代理设计模式又分为静态代理和动态代理redis
静态代理和动态代理的区别:静态代理在代码编译时代理类就产生了,动态代理是在代码运行期才会产生代理类,在运行期JDK底层会动态的生成代理类,并建立代理对象spring
Spring的事务处理:事务处理由Spring框架的声明式事务处理完成sql
Spring框架建立对象的建立次数:
Bean标签的scope属性能够设置对象的建立次数,为singleton时这个对象时单例的只会建立一次,为prototype时对象时多实例的每次使用Spring工厂都会从新建立一个新的对象。
Spring框架建立对象的生命周期
生命周期:一个对象从建立到销毁的过程,当scope属性为singleton是当Spring工厂启动时就会建立对象,若是Scope属性为prototype时,当每一次须要使用的时候都会建立一个新的对象,不会再Spring工厂启动时建立对象。再对象被建立的时候会自动调用Bean标签中的init-method属性中指定的方法,对象在被Spring工厂销毁时就会调用destroy-method属性中指定的方法,若是是多实例的对象将不禁Spring框架销毁,会由JDK的垃圾回收机制销毁不会调用destroy-method中的方法
Dao层:作数据映射,操做数据库,DataAccessObject数据库存储对象
JDBC jdbc是java提供的一套规范,一套接口,具体的实现由数据库厂商负责
开发JDBC的步骤,1.加载驱动,2.建立连接,3.写Sql语句,4.建立对象,5.执行,6.释放资源
setAutoCommit设置事务是否自动提交,commit提交事务,rollback回滚事务
Mybatis框架
MyBatis是一个持久层框架,ORM框架,是一个半自动ORM框架,能够完成对数据库的增删改查操做,封装了JDBC,MyBatis消除了几乎全部的JDBC代码,解决了JDBC操做数据库时的冗余问题
ORM框架,ORM object relation mapping,对象数据库映射,将数据库的查询结果储存给Java的实体类对象,这就是数据映射
SqlSession对象至关于JDBC的Connetcion对象,即获取一个数据库连接 ,Sqlsesion对象能够帮咱们完成整个数据库操做任务,SqlSession是Java与数据库之间的会话操做,HttpSession是浏览器与服务器之间的会话
当数据库中的字段名和实体类中的属性名不一致时,Mybatis映射数据就会产生问题,JDBC技术则会不产生这种问题
能够同过对数据库的查询结果起别名来解决,
可使用resultMap标签作数据映射
使用association标签给实体类中对象类型的属性赋值 多对一
使用collection标签来对实体类中list集合类型的属性赋值 一对多
动态Sql
where If 标签 条件判断,多条件查询
foreach标签循环拼接sql语句,用于批量删除
item 变量名 随便写
collection循环对象的数据类型,List集合 为list 数组类型为array 若是使用了@Param注解,则以注解中的名字为主open 再循环以前拼接的内容,separator 每循环一次中间拼接的内容,close 循环结束以后拼接的内容数据库 Dao层主要用来操做数据库
数据库的分类
网格型,层次性,关系型,主流的数据库都是关系型数据库:MySql,Oracle,SqlServer,sybase。Nosql 非关系型数据库:Mongodb,redis,这些都是数据库管理系统,每个数据库管理系统,能够又不少个数据库
Oracle 数据库
Oracle数据库,MySql数据库,Java计算机语言都属于Oracle公司
连接Oracle数据库
须要安装数据库客户端工具,而且保证Oracle数据库正常运行
Sql脚本
Sql不是数据库,Sql是一种结构化语言,他是操做数据库的一种语言
Oracle中使用|| 拼接字符串
dual哑表
sysdateOracle中获取当前系统时间
Oracle中的函数
相似于java中的方法,传入一些实参,运行完该函数返回一些结果
单行函数 每行数据运行完都会返回一个结果
length()返回实参这个字符串的长度
mod() 求余数
to_date()把一个字符串转换为日期类型
to_char()把其余类型的数据转换为字符串
组函数:数据被分到几个组里面,查询结果就会有几行数据,通常组函数,是和分组查询一块使用,当使用组函数时,没有对表中的数据进行分组,表示将表中的数据分到一个组里面
max最大值min最小值avg平均值sum总和count总行数
使用组函数时select后面不能跟其余字段,使用组函数时,统计时会自动排除值为null的数据
Oracle中每一个表都有伪列 Rownum 和RowId
连接查询 当你的查询结果须要多张表里的数据,这时候form后面能够跟多张表,这样的查询就时连接查询
左连接 left join 以左表为主表右连接 right join 以右表位主表完整连接 【outer】join 两张表都是主表内连接 inner join 两张表都是从表自链接 本身连接本身 ,两张表都是同一张表Oracle中字段的类型Varchar2() 可变长的字符串Char()定长字符串number(m,n)m表示数字的总长度,n表示小数点后几位integer double类型 不建议使用Date存储日期 日期类型Clob 大文本类型Blob 存储二进制文件
约束
主键约束 primary key 主键是一行数据的惟一biao'ji 每一个表都要有主键 主键的值是不能重复的
一个表中只能有一个主键 主键是伴随整个实体的生命周期的,整个生命周期中是不能够改变的 主键的值不能够为null
惟一约束 unipue 惟一约束字段的值不能重复 主键约束是一种特殊的惟一约束
他的值是能够改变的 值能够为null
非空约束 not null
非空的字段值不能为null
外键约束 references
自顶义约束 check(约束条件)
删除表和修改表结构
删除表 drop table 表名
修改表结构 alter table 表名 modify 字段名 字段类型
给表增长一个字段 alter table add 字段名 字段类型 约束
删除表中的约束 alter table 表名 drop constraints 约束名
Sql 脚本的分类
dql 数据库查询语言
ddl 数据库定义语言
dml 数据库操做语言
tcl 事务控制语言
序列 sequence
当表中的数据不少时,咱们不清楚主键到几了,为了更好的控制主键的生成方式,咱们可使用序列
create sequence 序列名 start with 开始值
视图 view
平时咱们会常用一些复杂的sql脚本,这些脚本比较长,写起来不方便。咱们要基于这些脚本的结果进行再次处理。这是咱们能够吧这个sql语句建成视图,方便咱们之后的操做。
create view 视图名 as sql语句
视图不能提升运行效率
索引 index
当数据库里的数据量很大时,检索数据的效率会受到影响,这是索引就能够提升检索数据的效率
原理:相似于字典的目录,可以快速的根据目录定位相应的文字。索引是独立于表的一个数据库对象
索引会提升数据检索效率,而下降了增删改效率
create index 索引名 on 代表(字段名)
MySql 数据库
MySql 数据库是一个关系型数据库,和Oracle数据库都属于Oracle公司
Mysql 和Oracle 的区别
Oracle是一个大型数据库,产品免费,服务收费,Oracle不支持批量添加,支持序列,sql支持||拼接,Oracle的存储结构特别复杂
Mysql是一个小型数据库,是开源免费的,支持批量添加,Mysql支持自增加,能够经过Mysql提供的函数凭借sql
Redis 数据库
RDB 关系型数据库 Oracle Mysql
NoSql 非关系型数据库 Redis
Nosql 的特色:
弱化结构
基于内存,在内存中存储数据,支持自动持久化
弱化事务
基于集群环境
没有复杂的连接查询
支持脚本语言 js
Redis是基于内存,以key-value 的形式存储数据,支持网络传输,支持自动持久化,是一个非关系型数据库
Jedis是redis提供的一个Java连接Redis数据库的一个工具
Entity 实体类
实体类的做用主要用来储存数据
V view 视图
主要用来展现数据,接受用户输入的数据,将数据提交到后台 吗
HTML超文本标记语言,用来展现静态页面,不能实现动态页面
CSS能够美化HTML页面,HTML负责内容,CSS负责样式
JSP
JSP是一个特殊的Servlet,用于实现动态页面
Jsp的执行流程
当浏览器客户端第一次访问一个jsp页面时,服务器会将这个jsp翻译为一个javaServlet类,再将这个类编译为.class文件,执行的是这个class文件,整个过程jsp再接受第一次请求的时候执行了一次,后续的请求,tomcat会自动去执行class文件,而再也不进行翻译和编译
Jsp的九个内置对象
request
response
out
session
application ServletContext是对整个web.xml的封装
config ServletConfig 该对象是对一个servlet配置项的封装
Exception 异常信息对象。若是当前页面是一个错误页面的话,可使用该内置对象。经过该内置对象能够获取异常信息
page该对象就是this对象
pageContext 是一个做用域,这个做用域对应一个页面,用的很是少,能够经过该对象获取其余8个内置对象,能够操做其余做用域
Jsp的做用域
pageScope,requestScope,sessionScope,applicationScope
EL表达式
表达式语言,能够获取做用域里面的数据,el表达式获得的变量能够作一些运算
${做用域.key}
EL表达式能够直接获取Cookie里面储存的数据
EL表达式能够经过param获取到请求传递过来的参数
JSTL El表达式虽然强大,可是不能作到流程的控制。JSTL能够和El表达式结合使用,来弥补这个缺陷
JSTL jsp标准标签库,能够作到流程的控制,和EL表达式结合使用
JavaScript 一种脚本语言、
前端编程语言,和HTML,CSS相似都是由浏览器解释执行,JavaScript主要用来实现动态页面
JavaScript是一种弱类型语言 ,变量没有类型,值有类型
事件
浏览器中的交互效果都是由事件驱动的. 事件都是由浏览器内置的,当用户操做浏览器的时候就可能触发已经内置的事件. 当浏览器监听到用户触发了某一个事件的时候,就会调用开发者(程序员)提早编写好的函数.
点击事件 onClick
鼠标移入事件 onmouseover
鼠标移出事件 onmouseout
输入框获取焦点事件 onfocus
输入框失去焦点事件 onblur
表单提交事件 onsubmit
内容被改变事件 onchange
页面加载完成事件 onload
DOM 操做
当网页被加载的时候,浏览器会建立页面的文档对象模型document object model
BOM操做
JQuery
jQuery是一个JavaScript库、jQuery极大地简化了JavaScript编程。jQuery设计的宗旨是“writeLess,Do More”,即倡导写更少的代码,作更多的事情。它封装JavaScript经常使用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操做、事件处理、动画设计和Ajax交互。jQuery兼容各类主流浏览器。
AJAX
无刷新请求,不刷新页面,接收请求,并接收后台响应的内容
AJAX的核心编程语言是JavaScript,AJAX会用到DOM技术和CSS,AJAX经过字符串,JSON,xml作数据传输
AJAX的执行流程
建立XMLHttpRequest对象,根据不一样的浏览器建立的方式也不一样
创建连接,经过open方法创建连接
发送请求,经过send方法发送请求
监控XMLhttpRequest对象的状态,当就绪状态时是4,响应状态码200时,获取后台响应的内容
EasyUI
EasyUI 能够作页面效果,能够经过ajax和后台作交互,自动解析后台响应回来的内容,是再JQuery的基础上封装造成的一个前端框架
EasyUI控件三要素
属性 特征用来控制控件的效果
方法 行为,功能体,再须要某一个功能时,调用对应的放法
事件 须要绑定一个函数,当达到事件的触发时机时调用函数
C controller 控制器
Servlet
咱们把html放入到tomcat后,能够经过浏览器访问这些页面。可是这些页面都是静态不会变化的内容。任何人,任什么时候间看到的内容都是同样的。
Servlet可以使html源码动态的产生。Servlet是一个特殊java类,他运行在服务器。
Servlet类应该继承HttpServlet这个类
每个Servlet类都须要在web.xml文件中经过servlet标签进行配置
HttpServletRequest 对请求信息的封装
HttpServletResponse 对响应信息的封装
Servlet的生命周期 一个对象建立到销毁的过程,当客户端第一次发送请求访问一个servlet时,服务器会建立一个servlet对象,而且调用init方法,servlet是单例的只会建立一次,每一次请求这个servlet都会执型service方法,当服务器中止时,servlet对象会被销毁掉,销毁前会执行destroy方法
servlet的请求方法1.url地址访问2.超连接方法3.form表单提交
Servlet和HTML页面的区别
Servlet是要实现动态的页面效果,html是要实现静态的页面效果。
动态的页面效果就是:不一样的人在不一样的时间访问的页面是不同。
静态的页面效果是:全部的人在全部的时间访问的页面效果是同样的。
转发
当运行完一个servlet后须要去请求其余资源文件,这时候可使用转发
转发:两个资源文件对应一个请求一个响应。转发是服务器端起的效果。浏览器端是感受不到的,浏览器的地址拦不会改变
Request做用域
当请求从一个action转发到一个jsp的时候,若是jsp中要使用action类中的变量,那么咱们须要将action中的变量放入到request做用域中传给jsp。那么jsp中就能够经过request做用域获取到该变量
Request做用域的特色
放数据的servlet和取数据的servlet必须保证使用的是同一个request对象。一旦request对象改变了,那么,request做用域里面的值就会失效。
Form表单的Method属性
get方式的提交,表单元素对应的值会以?key=value&key=value的方式显示在地址栏里面。Post方式不会。Post要相对安全一些。由于get方式要把数据显示在地址栏里面,因此他能够传递的数据量是有限制的。Post的大小是没有限制的。
重定向
重定向和转发实现的效果都是同样的。
重定向的过程当中会有两次的请求和响应。RegistAction运行结束后,会给浏览器响应一个重定向的指令。浏览器接收到这个重定向指令后,会自动发出请求。不用用户作任何操做。
转发和重定向的区别
转发的代码request和重定向的代码response。转发的参数是url-pattern。重定向的参数是/appName/url-pattern
转发的过程当中只有一次请求和响应。重定向的过程当中会产生两次请求和响应。
转发的地址栏显示的是转发前资源的路径。重定向的地址栏显示的是重定向后的资源的路径。
由于重定向会产生两个request对象,因此重定向的时候使用request做用域会没有效果。
重定向刷新后,不会形成数据库数据的异常。
会话跟踪技术
在服务器端有一些资源文件,须要判断请求的状态,看该请求是否有权利访问资源文件,若是有就让该请求访问,不然就不让该请求访问。要实现该功能须要使用到会话跟踪技术。
Cookie
cookie是服务端建立出来的,保存再客户端
浏览器一旦有了cookie信息,那么浏览器请求项目的全部资源时,都会自动携带该项目的cookie信息
cookie的特色
cookie是保持再浏览器的字符串,一个cookie是由标记和值组成,标记和值都是由字符串组成,不能是中文
浏览器请求项目资源时,会自动携带跟项目相关的cookie
cookie会再浏览器关闭时自动清除掉,若是想控制cookie的有效期,建立出cookie对象后会掉用setMaxAge()来设置cookie的生命时长,单位秒
cookie的数据不安全,重要的数据不存在cookie中
Session
session是服务端为每一个浏览器建立出来的私人存储空间
HttpSessionsession=request.getSession();//获取session对象,当浏览器第一次访问服务器,调用了该方法后,该方法的含义是建立出session对象。当浏览器不是第一次访问服务器,调用该代码后,该代码的含义是获取到该浏览器对应的session
Session的生命周期
默认状况下session会存活30分钟 ,能够经过web.xml配置来决定session的存活时间
当浏览器请求服务器后,关闭了浏览器。这时候再打开浏览器后,访问服务器,获得的session跟关闭前获得的session不是同一个了。服务器端到30分钟后就把以前的session销毁掉。
session 的特色
session跟浏览器一一对应。
Session是保存在服务器端。
Session存储的是任意数据类型。
Session做用域里面是不能随意放数据
Cookie和session的区别
都是会话跟踪技术,都和浏览器相关
保存的位置不同,cookie保存再浏览器端,session保存再服务器端,重要的数据保存再session中
保存的数据不同,cookie保存的是字符串,session保存任意类型
Session 的实现原理
当浏览器第一次访问服务器时,服务器会建立一个session对象,并建立一个cookie对象,将JSESSIONID和session的id放入cookie中,响应给客户端,浏览器下次访问,会携带这与项目相关的cookie,服务器会经过JSESSIONID去找对应的session对象,若是浏览器禁用了cookie,则会对url地址进行URL重写,将JSESSIONID以参数的方法提交给服务器
ServletContext
ServletContext能够获取配置文件中的内容,是对web.xml对象的封装,一个项目中只有一个web.xml因此ServletContext对象只有一个
Request做用域的范围最小,对应一次请求。
Session做用域的范围要大一些。对应一次会话。只要浏览器不关就是一个session。
Application(ServletContext)做用域的范围最大。对应一个应用程序。无论有多少个浏览器,只要访问的是同一个项目,那么他们对应的就是一个application对象。
Application对象跟一个项目相关,他会在tomcat启动的时候被建立,tomcat关闭的时候被销毁。
监听器
能够监听一些事件的发生。ServletContext监听器能够监听tomcat的启动和关闭。
过滤器
Filter是运行web项目中的一个组件,当请求过来时,过滤器会先运行里面的代码,而后再把请求分发给真正要请求的资源。
Struts2框架
struts2框架封装了Servlet技术,用于接收页面传递过来的参数,经过内部处理,将结果返回
struts2框架的执行过程
浏览器向服务器发送请求,通过核心过滤器处理,获取到,namespace和method,再struts.xml配置文件中匹配对应的方法,执行方法中的内容,获取一个返回值,再去struts.xml文件中找对应的result标签,按照指定的方式请求资源文件
跳转方式
dispatcher 默认值。转发到jsp页面。
redirect 重定向到一个jsp页面。
redirectAction重定向到一个action。
chain 转发到一个action。
Auction类中获取session
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
struts2的数据处理机制
action把处理的数据放入到值栈里面。值栈是存放数据的空间。到视图里面能够到值栈里面获取数据。
视图能够经过ognl表达式到值栈里面获取数据。须要流程控制时,能够经过struts2的标签。
OGNL表达式
对象图导航语言。他是一个表达式语言相似于以前的el表达式。这个ognl是独立于struts2框架的。
Ognl的数据源有两个。1.Root区域。2.contextMap区域。
拦截器
Struts2的拦截器是struts2框架中最为重要的核心组件。Struts2的不少核心功能都是经过拦截器实现的。
当客户端请求struts的拦截器时,请求会先进入到struts的拦截器里面。拦截器先运行,拦截器能够对请求放行,放行后请求运行action方法。Action方法运行完后,会去运行拦截器为执行完的代码。
过滤器和拦截器的区别
过滤器属于servlet相关技术,拦截器是struts2的组件技术。
过滤器能够过滤全部的资源,包括jsp,servlet,图片,css,js。拦截器只拦截struts2中的action。
在struts2项目中若是使用了自定义的拦截器,struts2框架自带的拦截器就会失效,须要在action引用拦截器的配置上面增长系统拦截器defaultStack。
拦截器栈
一个拦截器栈里面能够存储多个拦截器。Action引用的时候能够直接引用拦截器栈
使用默认拦截器
<default-interceptor-ref name=”拦截器名”/>
Default-action-ref
当用户请求了一个不存在的actionName时,这时候请求会进进入到default-action-ref指定的action类中。
Global-results
配置为全局的result