SSH特性与原理

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的配置,会加载strutsActionServlet,用于拦截用户的请求,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 ,获取requestresponse,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>、拦截器执行完毕之后会自动调用Actionexecute方法

5>、方法执行完毕之后,会返回一个字符串值,在根据配置文件的result与返回值进行匹配,选择相应的页面跳转。

3、根据跳转的路径,响应客户端

 

<action name=”” class=”” method=默认执行的方法>

<result name=””></result>

</action>

Test.java

Test-方法名-validate.xml

 

4、Struts1.x struts2.x区别

1>Action

Struts1.xAction需要继承Action或者Action的子类,Struts2.xAction可以不需要继承任何类,struts1struts2跟依赖于框架,耦合性更高

struts1.xAction是单例的,struts2.xAction是非单例的,所以struts1action有线程安全的问题。

struts2Action中的方法比struts1更简单

2>Form

Struts1.x用于封装客户端参数的bean需要继承ActionForm,而struts2不需要

3、标签

Struts1的标签对JSTL的支持,而struts2增加了对OGNL的支持

4、概况

Struts1相比struts2依赖性更强、耦合性更高,以后系统的维护、升级更困难

struts1action有线程安全的问题,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)管理)进行内聚性的开发 ,只要通过动态代理机制实现。

MVCspring提供的一个MVC框架。

 

IOC原理:

Ioc中文含义是依赖注入,其原理是:对象通过Spring ioc配置文件配置之后,又ico容器负责实例化该对象的实例,并根据配置需要给其注入属性值,也就是将实例化工作与给属性赋值工作交给了ioc容器,不再在类中实现这些动作,降低了类与类的耦合、实现松耦合开发,简化了系统的维护、升级,并为测试提供方便。

AOP原理:

Aop中文含义是面向切面,其原理是:允许我们将于业务无关的系统服务封装成一个服务类(切面),并在适合的时机(方法之前、方法之后、方法前后、抛出异常时)给目标对象切入该服务类,切入动作主要是靠动态代理机制来完成的,我们可以通过spring的配置文件来配置动态代理机制,Spring动态代理机制有两种:

1>BeanNameAutoProxyCreator

2>DefaultAdvisorAutoProxyCreator

 


你可能感兴趣的:(SSH特性与原理)