ssh集成过程

   花了几天时间,总算弄懂了ssh各个模块间是如何集成在一起,以及如何互相调用的。做个笔记,错误处欢迎指正。


   先从原理说一下,struts的作用是对servlet做了一层更高抽象的封装。采用活动、拦截器等概念。那么如何使系统识别出应用了struts呢,原因就在web.xml里。

<servlet>
   <servlet-name>action</servlet-name>
   <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
   <init-param>
     <param-name>config</param-name>
     <param-value>/WEB-INF/struts-config.xml</param-value>
   </init-param>
   <init-param>
     <param-name>debug</param-name>
     <param-value>3</param-value>
   </init-param>
   <init-param>
     <param-name>detail</param-name>
     <param-value>3</param-value>
   </init-param>
   <load-on-startup>0</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>action</servlet-name>
   <url-pattern>*.do</url-pattern>
  </servlet-mapping>

   当应用struts的时候,会在web.xml里加上上面这一段,就表示所有.do结尾的url都交给org.apache.struts.action.ActionServlet处理。这个ActionServlet是一个总入口,称为dispatcher的调度servlet。它再依据struts-config.xml里面的Action配置,把请求分别转到各个Actionservlet去处理。如果只说到这儿的话,似乎只用struts也是完全可以的。


   下面该spring上场了。Spring的作用是为组件解耦。试想,如果只用struts,那么在action里势必要写一些调用后台业务模块和数据库访问的代码。将来业务逻辑变更或者数据库变更了,这些代码改动量就太大了。所以spring采用常称的“依赖注入”或“控制反转”,使得在调用后台模块的时候,直接“申请”就是了。不用硬编码为其实例化啊、初始化啊什么的。当然“申请”使用还是要先知道名字才行。但这个名字也不是写死的。在配置文件applicationContext.xml里。这里面定义了各个bean的说明。


   那么最常见的是spring为哪些模块解耦呢。对,数据库访问模块。Hibernate是为数据库与组件提供了映射以及自动持久化等工作。所以用hibernate比直接对数据库进行硬sql编码有诸多好处。比如更稳定、更安全、跨数据库,开发也更迅速等。既然hibernate通常与spring一起用,就有个问题。在myeclipse里,我们必须先执行AddSpring Capabilities,再执行AddHibernate Capabilities。因为要往applicationContext.xml里写hibernate的相关信息,顺序反了就得手工加了。(strutes和spring的先后顺序是无关的)。而hibernate本身的数据表映射信息保存在xxx.hbm.xml里。


   常见调用场景是在action里通过“查询”applicationContext.xml,“申请”hibernate提供的DAO组件访问数据库。


   这样通过这几个xml文件的各自描述,三个常用模块就组成了ssh架构。

你可能感兴趣的:(ssh)