java笔记框架部分
什么是框架?
框架是一个框子,指其约束性,也是一个架子-------指其支撑性。
MVC模式
MVC指的是模型(model)--视图(view)--控制器(controller)的缩写。
Jsp+servlet+javaBean
什么是MVC框架?
是为了解决传统的MVC模式(Jsp+servlet+javaBean)的一些问题而出现的框架。
传统MVC模式问题
1、所有的Servlet和Servlet映射都要配置在web.xml中,如果项目太大,web.xml就太庞大,并且不能实现模块化管理。
2、Servlet的主要功能就是接受参数、调用逻辑、跳转页面,比如像其他字符编码、文件上传等功能也要写在Servlet中,不能让Servlet主要功能而需要做处理一下特例。
3、接受参数比较麻烦(String name = request.getParameter(“name”),User user=new User user.setName(name)),不能通过model接收,只能单个接收,接收完成后转换封装model.
4、跳转页面方式比较单一(forword,redirect),并且当我的页面名称发生改变时需要修改Servlet
现在比较常用的MVC框架有:
struts
Struts2
Spring MVC
简单讲一下struts2的执行流程?
Struts2的原理?
一个请求在Struts2框架中的处理大概分为以下几个步骤:
面试:
1、浏览器发送请求,经过一系列的过滤器后,到达核心过滤器(StrutsPrepareAndExecuteFilter).
2、StrutsPrepareAndExecuteFilter通过ActionMapper判断当前的请求是否需要某个Action处理,如果不需要,则走原来的流程。如果需要则把请求交给ActionProxy来处理
3、ActionProxy通过Configuration Manager询问框架的配置文件(Struts.xml),找到需要调用的Action类;
4、创建一个ActionInvocation实例,来调用Action的对应方法来获取结果集的name,在调用前后会执行相关拦截器。
5、通过结果集的Name知道对应的结果集来对浏览器进行响应。
拦截、判断、寻找、执行、响应
Struts2中的拦截器,你都用它干什么?
struts2中的的功能(参数处理、文件上传、字符编码等)都是通过系统拦截器实现的。
如果业务需要,当然我们也可以自定义拦截器,进行可插拔配置,在执行Action的方法前后、加入相关逻辑完成业务。
使用场景:
1、用户登录判断,在执行Action的前面判断是否已经登录,如果没有登录的跳转到登录页面。
2、用户权限判断,在执行Action的前面判断是否具有,如果没有权限就给出提示信息。
3、操作日志......
4、......
简单讲一下SpringMVC的执行流程?
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
说一下struts2和springMVC有什么不同?
1. 核 心控制器(前端控制器、预处理控制器):spring mvc核心控制器是Servlet,而Struts2是Filter。
2.控制器实例:Spring Mvc会比Struts快一些。
3. 管理方式:所以spring对于spring mvc的控制器管理更加简单方便。
4.参数传递:Struts2中自身提供多种参数接受,其实都是通过(ValueStack)进行传递和赋值,而SpringMvc是通过方法的参数进行接收。
5.学习难度:springmvc 比strats简单。
6.intercepter 的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。
7.spring mvc处理ajax请求,直接通过返回数据,而struts2是通过插件的方式进行处理
说一下spring中的两大核心?
AOP和IOC
Spring是什么?
AOP和IOC的容器框架,它是一个轻量级的容器。
AOP是什么?你都拿它做什么?
AOP:面向切面编程
我们主要使用AOP来做:
1、事务处理
2、权限判断
3、日志
讲一下Spring的事务传播特性
1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启
2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常
7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行
Propagation
Required 需要 如果存在一个事务,则支持当前事务。如果没有事务则开启
Supports 支持 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
Mandatory 必要的 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
required_new 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
Not_support 总是非事务地执行,并挂起任何存在的事务。
Never 绝不 总是非事务地执行,如果存在一个活动事务,则抛出异常
Nested 嵌套的 如果有就嵌套、没有就开启事务
Spring事务的隔离级别
1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
什么是ORM?
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
iBatis(mybatis)与Hibernate有什么不同?
相同点:
都是java中orm框架、屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。
ibatis的好处:提供了将结果集自动封装称为实体对象和对象的集合的功能.
Hibername的好处:Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,并执行并返回java结果。
不同点:
1、hibernate要比ibatis功能强大很多。因为hibernate自动生成sql语句。
2、ibatis可以出来复杂语句,而hibernate不能。
3、ibatis要比hibernate简单的多。ibatis是面向sql的,不同考虑对象间一些复杂的映射关系。
Hibernate映射对象的状态:
临时状态、持久化状态、游离状态、删除状态
介绍一下Hibernate的缓存?
一、why(为什么要用Hibernate缓存?)
为了提供访问速度,把磁盘或数据库访问变成内存访问。
二、what(Hibernate缓存原理是怎样的?)
Hibernate中的缓存分一级缓存和二级缓存。
一级缓存就是Session级别的缓存,在事务范围内有效是,内置的不能被卸载。二级缓存是SesionFactory级别的缓存,从应用启动到应用结束有效。是可选的,默认没有二级缓存,需要手动开启。
保存数据库后,在内存中保存一份,如果更新了数据库就要同步更新。
什么样的数据适合存放到第二级缓存中?
1) 很少被修改的数据 帖子的最后回复时间
2) 经常被查询的数据 电商的地点
2) 不是很重要的数据,允许出现偶尔并发的数据
3) 不会被并发访问的数据
4) 常量数据
扩展:hibernate的二级缓存默认是不支持分布式缓存的。使用memcahe,redis等中央缓存来代替二级缓存。
简单讲一下webservice使用的场景?
webservice是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。
1、实实在在的列子:
天气预报:可以通过实现webservice客户端调用远程天气服务实现的。
单点登录:一个服务是所有系统的登录