现在的位置: 首页 > 综合 > 正文

SSH Project热身整合

2011年07月06日 ⁄ 综合 ⁄ 共 5196字 ⁄ 字号 评论关闭

写在前面:
本来要在2号写的,但2号让电信屏了,无法打开网页,3号也郁闷,肚子痛,痛了一下午真受不了,也不知道什么原因,就冲了杯立顿喝了后一直痛,痛的时候才感觉健康真的就是幸福,现在快零点才好点,于是上来写!
首先介绍下什么是SSH,SSH为Struts+Spring+Hibernate三个首字母缩写,为目前很多公司所采用的一种软件架构方式,当然随着UI层的不断出新,也有JSF和AJAJX代替Struts来做UI。
SSH的 优点就是使用不同的三种框架,每层使用它们三种框架中的最优秀部份,当然,三种框架其实独自都可以实现MVC!
Struts大量的库可以为我们实现用户接口非常的方便,而且在商业运作方面来说Struts已经非常成熟比其他的如JSF等等来说商用的选择比较明智,因为毕竟稳定是商用的一个必要条件!
Struts以其松耦合成功的把VIEW和MODEL层进行了分离,而通过Spring的AOP把Struts连接很紧密的ActionForm和Action进行了分离!
Hibernate使用ORM技术把模型和关系数据进行了映射,通过类和表的对应实现了数据持久化,在EJB3中也集成了hibernate!
Spring在其中起一个总控的作用!ApplicationContext是Spring的核心,在WEB应用中我们会用到WebApplicationContext,它是继承自ApplicationContext
如果要在WEB中使用Spring,在web.xml中添加<context-param>
三者的加载顺序一般为Struts  Spring Hibernate

Step1:先建立一个WebProject,我们第一件事来加载一个过滤器,也就是让我们的项目支持中文,而不必在代码中写编码方式!
复制%TOMCAT_HOME%webapps\jsp-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.java到我们工程的fengyan.filters包下,该文件为TOMCAT中的一个例子文件,然后在web.xml文件中如下配置:

 <!-- 过滤器 -->
  
<filter>
    
<filter-name>Set Character Encoding</filter-name>
    
<filter-class>fengyan.filters.SetCharacterEncodingFilter</filter-class>
    
<init-param>
      
<param-name>encoding</param-name>
      
<param-value>GBK</param-value><!-- 设置为GBK -->
    
</init-param>
  
</filter>
  
<filter-mapping>
    
<filter-name>Set Character Encoding</filter-name>
    
<url-pattern>/*</url-pattern><!-- 作用范围 -->
  
</filter-mapping>

Step2:按上述顺序我们先加载Struts 1.2。
Step3:加载Spring 如下:

加载Spring AOP, 核心库,Hibhernate3以及Web支持!

将 配置文件放在WEB-INF下。

Step4:创建fengyan.hibernate.config包并在其中添加Hibernate如下


选择Spring的配置文件为Hibernate的配置文件!

创建一个sessionFactory Bean!
Step5:打开Struts-config.xml添加一个插件,如下:

<!--生成的代码如下:-->
      
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
  
</plug-in>

Step6:将 数据库中的表用Hibernate映射出来,如下:

在接着的主键类型中我们选择assigned自己指定!
为了使Hibernate导出的Beans可以由Struts框架用做FormBean,我们需要将 这些HibernateBeans都继承自ActionForm,

Step7:在Struts-config.xml中 add new action form and jsp,其中选择Existing FormBean已存在的Formbean,类型为Hibernate导出的Resgister类

<!--生成代码如下 :-->
 
<form-beans >
    
<form-bean name="registerForm" type="fengyan.hibernate.beans.Register" />
  
</form-beans>

  
<action-mappings >
    
<action
      
attribute="registerForm"
      input
="/form/register.jsp"
      name
="registerForm"
      path
="/register"
      scope
="request"
      type
="fengyan.struts.action.RegisterAction" />

  
</action-mappings>

将 action类型type="fengyan.struts.action.RegisterAction"改为Spring中的代理type="org.springframework.web.struts.DelegatingActionProxy"
并在RegisterAction中添加一个RegisterDAO属性,并在其execute方法中添加rdao.save代码如下:

RegisterAction.java

另外为了使用Spring将Struts的FormBean与ActionBean分离,我们又需要在Spring的配置文件中添加符合Spring的spring-beans.dtd标准的声明!
Step8:在spring的配置文件中添加一个类型RegisterAction的Bean代码如下: 

 <!-- struts-config.xml表单action的映射信息 -->
  
<action-mappings >
    
<action
      
attribute="registerForm"
      input
="/form/register.jsp"
      name
="registerForm"
      path
="/registerAction"
      scope
="request"
      type
="org.springframework.web.struts.DelegatingActionProxy" />
  
</action-mappings><!-- 会到Spring的配置文件中寻找registerAction的bean -->



<!--  applicationContext.xml配置文件
        分离Struts表单的Action
        RegisterAction 
        该bean的name要与Struts中action的path名字相同! 
-->
    
<bean name="/registerAction" class="fengyan.struts.action.RegisterAction"
          abstract
="false" singleton="false" lazy-init="default"
          autowire
="default" dependency-check="default">
        
<property name="rdao"><!-- 我们在Action中定义了数据访问对象 -->
            
<ref bean="registerDAO"/>
        
</property>
    
</bean>
    
<!-- 配置Hibernate根据表Register生成的数据访问对象DAO -->    
    
<bean id="registerDAO" class="fengyan.hibernate.beans.RegisterDAO">
        
<!-- 添加一个sessionFactory属性,该属性为registerDAO父类中的成员属性 -->
        
<property name="sessionFactory">
            
<ref bean="sessionFactory" />
        
</property>
    
</bean>

 

我们可以看到整个系统中,我们用Struts侧身做VIEW ( 视图JSP),而用Spring做Controller处理业务层 ,Hibernate做MODEL模型层!

抱歉!评论已关闭.