A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

Mybatis 执行流程
获取 SqlSession 时序图

获取 MapperProxy 时序图

4、 Mybatis 缓存
一级缓存: Mybatis 的一级缓存的作用域是 session, 当 openSession()后, 如果执行相同
的 SQL(相同语句和参数), Mybatis 不进行执行 SQL, 而是从缓存中命中返回。
二级缓存: Mybatis 的二级缓存的作用域是一个 mapper 的 namespace, 同一个 namespace
中查询 sql 可以从缓存中命中。 二级缓存是可以跨 session 的。
Struts2 框架
1、 Struts2 的执行流程
  
StrutsPrepareAndExecuteFilter 是 Struts2 的核心控制器, 它采用前端控制器模式, 对用
户的请求进行控制处理。
Struts2 可复用的代码功能都是基于 Interceptor(拦截器) 来实现的。 struts2 有很多内
置拦截器, 用来实现不同的功能。
Action 是执行具体的业务逻辑代码的, 它在拦截器之后执行。
2、 值栈(ValueStack)
ValueStack 实际上就是对 OGNL 的封装, OGNL 主要的功能就是赋值与取值, Struts2 正是通
过 ValueStack 来进行赋值与取值;
2.ValueStack 是一个接口, 而 OgnlValueStack 是 strtus2 中的缺省实现。 ValueStack 中的
数据, 分两个部分存放: root 和 context, 同时 ValueStack 暴露相关的接口:
Java 代码
void setValue(String expr, Object value);
Object findValue(String expr);
用来通过 OGNL 表达式对 ValueStack 中的数据进行操作;
ValueStack 中的 root 对象是 CompoundRoot, CompoundRoot 继承了 ArraryList, 提供了额
外的方法: push()和 pop()方法, 用来对 root 对象中所包含的数据进行存取;
值栈的生命周期是一次请求, 等同于 request 的周期;
值栈的对象栈(root) 实质上是 List, 保存 Model、 Action 对象, 上下文栈(context) 实
质上是 Map, 保存 request、 response、 session、 servletContext、 attr、 parameters
等。
3、 拦截器和过滤器
1.拦截器是基于 java 反射机制的, 而过滤器是基于函数回调的;
2.过滤器依赖于 servlet 容器, 而拦截器不依赖于 servlet 容器;
3.拦截器只能对 Action 请求起作用, 而过滤器则可以对几乎所有请求起作用;
4.拦截器可以访问 Action 上下文、 值栈里的对象, 而过滤器不能;
5.在 Action 的生命周期中, 拦截器可以多次调用, 而过滤器只能在容器初始化时被调用一
次。
4、 Struts2 与 SpringMVC 的区别
Springmvc 的入口是一个 servlet 即前端控制器, 而 Struts2 入口是一个 filter 过虑器;
Springmvc 是基于方法开发(一个 url 对应一个方法), 请求参数传递到方法的形参, 可以设
计为单例或多例(建议单例), struts2 是基于类开发, 传递参数是通过类的属性, 只能设计
为多例;
Struts2 采用值栈存储请求和响应的数据, 通过 OGNL 存取数据, Springmvc 通过参数解析器
是将 request 请求内容解析, 并给方法形参赋值, 将数据和视图封装成 ModelAndView 对象,
最后又将 ModelAndView 中的模型数据通过 reques 域传输到页面。 Jsp 视图解析器默认使用
JSTL。
  





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马