struts原理:
MVC简介: Model—模型:负责系统的状态和业务逻辑javabean
View—视图:负责系统的视图呈现jsp
Controller—控制: 负责系统的逻辑控制servlet
核心的原则: Jsp页面不出现java代码,servlet不出现html的东西。
传统的MVC架构:
JSP-->VIEW Servlet-->Controller JavaBean-->Model
传统的流程图:
客户端的Request请求到达servlet,获取用户输入,set到model中,model负责取值也业务逻辑,然后由view层get数据更新view,发送到client。
Struts架构:
Jsp+struts标签库-->View ActionBean
ActionFormBean|-->Model ActionServlet
AactionMapping |-->Controller
Struts流程:
Controller作为接受所有客户端请求的入口点,由ActionServlet来决定需要那个动作类来执行相应的操作,同时通知
ActionFormBean来封装用户的表单输入,同时提交给ActionBean执行相应的业务逻辑,通过ActionMapping来决定需要反馈
给Client什么。 注意的事情: Struts的模型主要有Action Bean 和 ActionForm Bean
,Action中封装了简单的逻辑操作。较为复杂的逻辑放在JavaBean或者EJB中来完成,然后在Action中调用,因此Action是解决“做
什么”,由其他的组件如(JavaBean)来解决“怎么做”的问题。
ActionForm封装了用户的表单输入,因此Action不用和表单交互,直接和ActionForm交互就可以了!
Struts标签和ActionForm的元素之间一一映射
工作流程:
struts1: 发布Struts
Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.
在接到一个HttpRequest请求后,ActionServlet
根据struts-config.xml中的配置内容,将请求的参数传到对应的Formbean中,并设置session(开发中没有使用
Formbean).然后根据请求中的Action参数,在struts-config.xml中查找指定的Action,并调用此Action来处理请
求.根据Action的处理结果,会返回一个forward变量,此时通过mapping.findForward()查找出对应的forward所标示
的Action或者JSP页面(开发中没有转到另一个Action),将请求转到下一个处理.如果是forward指向JSP页面,则输出到前台.
Struts2::
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等
(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器
(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理
这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.
(6)ActionProxy通过Configuration
Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.
(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调
用之前会根据配置文件加载相关的所有Interceptor拦截器)
(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器. (9)
最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.
简单的说struts2就是个单控制器,覆盖了以前的servlet。jsp里面的请求,通过单控制器的拦截,查看struts.xml查找你要响应的
Action。在Action里面处理事务,然后return一个参数(这个参数在XML里面配置,配置需要返回的界面)。
hibernate原理:
Hibernate的核心是ORM,对象与关系映射。一对一,一对多,多对多。
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了轻量级的对象封装,不仅提供了从 Java 类到数据表之间的映射,也提供了数据查询和恢复机制。
1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件//读取配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息//读取映射信息
3.通过config.buildSessionFactory();//创建SessionFactory
4.sessionFactory.openSession();//打开Sesssion
5.session.beginTransaction();//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事务
8.关闭Session
9.关闭SesstionFactory
Hibernate的三种状态:
瞬时状态,持久化状态,游离状态。
举个例子我们把数据库比作一个登记薄,当我们把信息登记到登记簿上的时候,这个过程就是持久化的过程。当登记完成之后,登记簿上的数据就是持久态数据,所谓持久态就是一直存在的状态。当我们需要用数据的时候,会从登记簿上查信息,我们查到的信息记录在临时的纸张或者脑海里,然后登记簿会放回原位,这时候临时纸张上或者脑海里的数据就是游离态,随时可能被遗忘,在hibernate中就是随时会被销毁的数据。瞬态数据和游离态数据有点儿类似,但是一点,就是他是存在持久化之前的数据,就是说我需要登记个人信息,我的个人信息还没有登记到登记簿上的时候,信息就是瞬态,一旦登记到登记簿上就变成持久态了,然后再查询到的就是游离态。
spring原理:
核心是IOC(控制反转)和AOP(面向切面编程)。
IOC将
类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度。它的原理是在
applicationContext.xml加入bean标签,在bean标签中通过class属性说明具体类名、通过property标签说明该类的
属性名、通过constructor-args说明构造子的参数。其一切都是返射,当通过applicationContext.getBean("id
名称")得到一个类实例时,就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过构造子的
newInstance实例化得到对象。正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。
AOP其
机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的
是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象方法,在调用之前之后提供相关的服务,如事务、安全、日志。其名称分别是代理、真实对
象、装备、关切点、连接点。