Struts1
1、API结构
i. Action(处理器)默认执行的方法 execute(ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse)
ii. ActionServlet (中央控制器)
iii. ActionForm(表单Form)主要用于封装客户的参数
iv. ActionMapping(Action映射信息对象)存放当前所访问的Action的所有配置信息
v. ActionForward(转发对象) 用于跳转
<action path=”/访问路径” name=”ActionForm的名字” class=”struts类路径” parameter=”指定参数名” validate=”true” input=”/错误之后的显示界面”>
<forward name=”返回字符”>/跳转的页面路径</forward>
</action>
2、标签库
Struts1.x有四类标签库(html,bean,logic,tiles)
支持整合了JSTL
3、运行原理
1、解析配置文件
当服务器启动时,根据web.xml的配置,会加载struts的ActionServlet,用于拦截用户的请求,struts会自动解析struts-config.xml ,然后将配置信息缓冲到Application中。
2、客户端发出请求
但客户端发出.do的请求时,会被ActionServlet的拦截,ActionServlet会根据客户端的请求路径去匹配配置文件(xxx.do),找到对应的Action的配置信息:
1)、会在配置信息中获取name属性,得到ActionForm,用ActionForm来封装客户端提交的参数信息(CommonBeanUtils)。
2)、会检测配置中是否配置了validate,如果配置了会去执行ActionForm 的validate的方法,该方法会返回一个错误集合(ActionErrors),当错误集合的长度大于0时,表示验证失败,那么查找名称为input的属性,得到跳转的路径,并显示错误信息;如果错误集合的长度小于等于0的话,表示验证成功,那么会继续查找class属性,得到Action的类路径,并执行该类型execute方法,并将ActionForm作为第二个参数传递给Action。
3)Action执行完毕之后 会选择一个ActionForward进行跳转
3、根据跳转的路径 响应客户端
Struts2
1、API
i. ActionSupport (处理器类)
ii. ActionServletContext 用于获取Servlet PAI ,获取request,response,applcation
iii. ActionContext Action上下文,用于存取数据
iv. Struts2的拦截器
2、标签库
Struts2标签库可以分为(逻辑标签和非逻辑)
逻辑标签:
<s:if> <s:elseif> <s:iterator>
非逻辑:
<s:form>
<s:submit>
也支持JSTL标签 但是strut2使用了更加大的表达式OGNL
3、原理
1、解析配置文件
但服务器启动时,根据web.xml的配置,会自动加载struts的拦截器,并会自动解析struts.xml配置文件,并将配置文件信息用application进行缓冲。
2、当客户发出请求时
根据客户的请求路径(XXX.action)去匹配配置文件,找到对应的Action的配置信息:
1>、找到class属性对应的Action类,并进行实例化。
2>、执行拦截器(赋值拦截器(OGNL)、文件上传的拦截器、表单验证的拦截器)
3>、但执行到表单验证拦截器时,拦截器会自动扫描该Action目录下是否有匹配的配置文件,如果有的话,再根据配置文件的验证规则来进行表单验证。
4>、拦截器执行完毕之后会自动调用Action的execute方法
5>、方法执行完毕之后,会返回一个字符串值,在根据配置文件的result与返回值进行匹配,选择相应的页面跳转。
3、根据跳转的路径,响应客户端
<action name=”” class=”” method=”默认执行的方法”>
<result name=””></result>
</action>
Test.java
Test-方法名-validate.xml
4、Struts1.x 与struts2.x区别
1>、Action
Struts1.x的Action需要继承Action或者Action的子类,Struts2.x的Action可以不需要继承任何类,struts1比struts2跟依赖于框架,耦合性更高
struts1.x的Action是单例的,struts2.x的Action是非单例的,所以struts1的action有线程安全的问题。
struts2Action中的方法比struts1更简单
2>、Form
Struts1.x用于封装客户端参数的bean需要继承ActionForm,而struts2不需要
3、标签
Struts1的标签对JSTL的支持,而struts2增加了对OGNL的支持
4、概况
Struts1相比struts2依赖性更强、耦合性更高,以后系统的维护、升级更困难
struts1的action有线程安全的问题,struts2没有
Hibernate
是持久层的对象到关系映射框架(OR/Mapping),主要是对JDBC进行轻量级的封装,可以通过对对象的访问来操作数据库表,简化开发。最终还是会将操作转换成SQL语句 通过JDBC来访问数据库。
映射过程:
主要是通过xxx.hbm.xml映射文件进行映射,该配置文件中主要指定了那个对象跟那个表进行映射,以及对象的那个属性与表的那个字段对应,以及对象与对象之间的关系映射进行配置。
数据库的链接信息:
数据库连接信息主要通过hibernate.cfg.xml配置文件进行配置,在该配置文件中主要配置了连接数据库的路径、驱动、方言、用户名、密码、等信息
Hibernate的加载策略:
1)、立即加载(lazy=”false”) 当查询得到一个对象之后会立即加载该对象相关联的的附属对象
2)、延迟加载(lazy=”true”) 当查询得到一个对象之后不会立即加载该对象相关联的的附属对象,而是等到要用的时候才会加载。
3)、批量加载 是指一次查询要查询多少条记录 ,提高查询效率
4)、预先抓取(fetch=”join”) 也是立即加载的意思,只不过立即加载是采用普通的查询语句(可以一个查询会发送多条SQL语句),而预先抓取是使用连接查询语句进行查询,减少了查询语句的条数,提高效率,(注:预先抓取只在HQL语句中是无效的)
Hibernate的事务处理:
JDBC是自动提交、回滚事务
Hibernate 是手动提交、回滚事务
Hibernate的持久对象的状态:
临时状态 (指一个刚刚new出来对象、刚刚被删除的对象、或者从页面表单提交过来的对象都是属于临时状态,那么临时状态的对象时跟数据库没有任何关联的)
持久状态 (指刚从数据库查询出来、刚保存、修改的对象,再session没关闭之前都属于持久状态)
托管状态 (指持久状态的对象,session关闭之后就变成托管状态)
Hibernate缓冲机制:
Hibernate的缓冲机制有两种:
一级缓冲(session级别),创建session到关闭session之间有效,Hibernate会自动使用一级缓存。
二级缓冲 (sessionFactory级别) Hibernate不会自动使用二级缓冲,如果要使用的话,需要额外的进行配置(一般会采用第三方提供缓冲机制)
Session session = SessionFactory.openSession();
Spring:
Spring提供了一个全方位的整合框架,它出现的目的是为了给现有的框架提供整合方案。
IOC(依赖注入、控制反转):IoC主要是用于给对象的属性通过配置文件给其注入值。将之前在类中维护的关系转移到配置文件中维护,降低了类与类之间依赖性。
AOP(面向切面):指在业务流程中切入与业务无关的一些操作(日志、权限),允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发 ,只要通过动态代理机制实现。
MVC:spring提供的一个MVC框架。
IOC原理:
Ioc中文含义是依赖注入,其原理是:对象通过Spring ioc配置文件配置之后,又ico容器负责实例化该对象的实例,并根据配置需要给其注入属性值,也就是将实例化工作与给属性赋值工作交给了ioc容器,不再在类中实现这些动作,降低了类与类的耦合、实现松耦合开发,简化了系统的维护、升级,并为测试提供方便。
AOP原理:
Aop中文含义是面向切面,其原理是:允许我们将于业务无关的系统服务封装成一个服务类(切面),并在适合的时机(方法之前、方法之后、方法前后、抛出异常时)给目标对象切入该服务类,切入动作主要是靠动态代理机制来完成的,我们可以通过spring的配置文件来配置动态代理机制,Spring动态代理机制有两种:
1>、BeanNameAutoProxyCreator
2>、DefaultAdvisorAutoProxyCreator