前言
接着上一篇继续讨论ssh。本篇会把从D层到界面显示的一条线梳理一下,并且讨论对Spring,Struts,Hibernate三个框架的认识。
一条线
显示
(1)DAO->service->action原路返回
(2)action与jsp交互
^1^action与jsp交互把数据存入值栈,返回字符串
//带分页的查询的方法
public String findAll(){
//分页查询
PageBean<Order> pageBean = orderService.findByPage(page);
ActionContext.getContext().getValueStack().set("pageBean", pageBean);
//跳转
return "findAll";
}
^2^根据字符串在struts中查询要返回的jsp界面
!-- 配置后台订单的action -->
<action name="adminOrder_*" class="adminOrderAction" method="{1}">
<result name="findAll">/admin/order/list.jsp</result>
</action>
^3^在jsp使用pageBean或List中的数据
第<s:property value="pageBean.page"/>/<s:property value="pageBean.totalPage"/>页
struts的作用
^1^是mvc的web框架。包含一个 controller servlet,能将用户的请求发送到相应的Action 对象。
^2^JSP 自由 tag 库,并且在 controller servlet 中提供关联支持,帮助开发员创建交互式表单应用。
^3^提供了一系列实用对象:XML 处理、通过 Java reflection APIs 自动处理 JavaBeans 属性、国际化的提示和消息。
Spring的作用
核心是AOP(Aspect Oriented Programming)和IOC(Inversion of Control)也叫DI(Depency Injection)
^1^AOP
AOP把软件系统分为两个部分:核心关注点和横切关注点。
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
使用场景如:权限,日志,事务,缓存,持久化,同步等。
^2^IOC
依赖注入的三种方式:(1)接口注入(2)Construct注入(3)Setter注入
控制反转(IoC)与依赖注入(DI)是同一个概念,引入IOC的目的:(1)脱开、降低类之间的耦合;(2)倡导面向接口编程、实施依赖倒换原则; (3)提高系统可插入、可测试、可修改等特性。
Spring AOP及JBoos AOP实现都是采用拦截器来实现的。
拦截器的代码:
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
//判断session中是否保存了后台用户的信息
AdminUser existAdminUser = (AdminUser)ServletActionContext.getRequest().getSession().getAttribute("existAdminUser");
if(existAdminUser == null){
//没有登录
ActionSupport actionSupport = (ActionSupport)actionInvocation.getAction();
actionSupport.addActionError("亲,您还没有登录,没有权限访问");
return "loginFail";
}else{
//已经登录
return actionInvocation.invoke();
}
}
Hibernate
^1^含义
是一个ORM的框架,为实现数据的持久化把jdbc的代码封装,方便调用。
^2^缓存
一级缓存:由hibernate管理, 事务级的,如 save update get
二级缓存:sessionFactoory级别的,进程级的 查询 先查一级,二级,数据库 更新缓存
^3^延迟加载
含义:加载时不要连根拔起,把有点关系的都加载进来
缺陷是会话一直开着,spring提供了补充openSessionInViewFilter, OpenSessionInViewInterceptoro
小结
稍微有点清晰了,了解还是不够,再接再厉。