ssh框架整合hibernate,spring,struts,dwr等技术过程分析

来源:互联网 发布:上海高中录取率 知乎 编辑:程序博客网 时间:2024/05/16 00:27

ssh整合技术全过程总结分析
为了更清晰的分析ssh整合的流程,(也是为了巩固自己所学的)在这里我将要
先分析整合步骤,然后在将步骤细化分析(根据我所了解的)。部分代码块可能也
将贴出

   ssh整合步骤:
第一步:添加支持
   1:建表、配置数据库连接(切换到database视图或hibernate视图)
   2:循序添加hibernate、spring、struts支持(切换到j2ee视图,建web工程,
   添加hibernate、spring、struts(myeclipse菜单-->add project-->hibernate、spring、struts)
   说明:在整合了spring时候hibernate无需创建sessionfactory也就说在添加hibernate支持时候不
   需要勾上那个创建sessionfactory的勾
   3:生成pojo类,创建dao包将DAO类放在一起(切换到database视图或hibernate视图找到相应的数据库中的表右键:Hibernate Reverse 
   Engineering)
   选项说明:Java src folder 选择所在项目的src目录    下面多选框下面前三个都勾上
   对于pojo类的映射文件配置。需注意表级联问题,未配置好可能导致某些操作失败(操作主表时,从表也同时操作.):在映射文件后面的set 设置cascade 属性。如:
   cascade = save-update(级联添加) 同时添加主表和n个从表 、cascade = all 都级联
         
   4:如果涉及到DWR 那么还得把DWR开发包拷在lib下,dwr.xml、dwr20.dtd(提示文件)复制到WEB-INF
   目录下(至于怎么配置,下面我们详细贴出)


第二步:后台业务、.xml文件配置(如果是用MyEclipse6.5 开发的可能会出现个金典异常,解决办法就是 选择项目->Build Path->Configure
->Libraries 中Remove asm-2.2.3.jar 开发包 ,再lib下delet)
   1:开始写业务层,抽取接口类。写dao层。因为业务层是调用dao层的,所以先把业务写好了就算完成了第二
   步就算完成半了。
   2:可以选择配置web.xml文件。
     1)为spring支持的applicationContext.xml文件指定路径配置(默认会认为在WEB-INF下面)
     代码:
     <!-- 指定路径 -->
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:app*.xml</param-value>
  </context-param>
     2)为了避免在事务还没完成session就关闭的情况我们可以设置OpenSessionInViewFilter过滤器。这是
     涉及到懒加载的问题。其实还有几种常见的方法可以避免。如:在pojo类的主键映射文件中的set
     添加一个属性为 lazy="false"  (立即加载关联表,默认为true) 还有种就是用代码控制立即加载关键
     字 fetch。如:join fetch from A a join fetch a.
     <!-- 过滤器 -->(映射可以是所有文件)
  <filter>
   <filter-name>openssion</filter-name>
   <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>

     3)为了解决编码问题的过滤器(映射可以是所有文件)
  <filter>
   <filter-name>encoding</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  </filter>
     4)配置文件加载的监听器 (没有映射)
     <!-- 监听器 -->
  <listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

     5)配有DWR就必须为之注册
     <servlet>
   <servlet-name>dwr</servlet-name>
   <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
   <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
   </init-param>
    </servlet>
    <servlet-mapping>
   <servlet-name>dwr</servlet-name>
   <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    说明:如果是整合ssh2 时候就可能在DWR测试时候会报错因为ssh2的核心过滤器会将其拦截,导致
    测试时候报错。解决办法我们将在下一篇ssh2整合流程分析讲解给出具体解决方案

    (上面的映射文件可以是所有文件)

   3:现在可以创建action类了、及配置。控制
   添加了struts支持就会在web.xml中自动注册核心控制器 ActionServlet
   这里涉及到核心控制器的工作流程了。在action中会重写execute方法。简单说客户端发送HTTP请求,都会被核心控制器拦截
   核心控制器请求填充ActionForm.再转到Action.在Action中我们只要将form中的信息填充到
   我们自己的ActionForm中就可以了如:  部门表Form类 部门Form(将form中信息填充到该form中) = (部门表Form) form;
   要说的几点需注意:
   1)注册页面:注意action是.do结尾
   2)写类,继承ActionForm(FormBean),界面属性,并生成set/get方法
    (类型可以是: 8种基本数据类型级包装类和它们组成的数组。 还可以 String,java.sql.Date及其数组)
   3)写类,继承Action,重写execute方法,调用业务  。可以一个action类处理一个业务,也可在一个
   action类中处理多个业务,就必须这样几个地方。  在页面action .do后面可添加一个参数p="xx",
   在struts-config.xml-> action-mapping->action 中添加属性 parameter="p"  在请求的action类中直接
   获取参数p的值,在调用对应的方法。
   4)在WEB-INF建struts-config.xml文件,注册actionForm,action
     并确定界面/actionForm/Action三者的关系.
   action具体配置文件struts-config.xml:
   代码:
   1.配置actionForm
   <form-beans>
     <form-bean name="" type="">
     </form>
   </form-beans>
   2.配置action
   <action-mappings>
      <action path="/emp" parameter="" type="action类/代理">
      </action>
   </action-mappings>
  说明:/emp  jsp页面中action 的 emp.do?  代理类:type="org.springframework.web
  .struts.DelegatingActionProxy"

  4:配置spring的applicationContext.xml
  添加了spring支持的主要特点是IOC(控制反转,依赖注入),AOP(面向切面编程)大大降低
  层与层之间的耦合度。就关系的事务了。要做的第一件事就是换文件头子。
  1)换文件头子
  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:util="http://www.springframework.org/schema/util"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

2)dao层bean已经自动生成了,需要创建一下bean。
<!-- service bean --> 如:
 <bean id="tsaleformService" class="com.service.TSaleformServiceImpl">
     <property name="tsaleformDAO" ref="TSaleformDAO"></property>
     <property name="tsDetail3DAO" ref="TSaleformDetailDAO"></property>
 </bean>
<!-- action bean -->    如:
 <bean name="/emp" class="com.struts.action.SaleformShowAction">
     <property name="itSaleformService" ref="tsaleformService"></property>
 </bean>


<!-- 事务管理器 --> 
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
说明:sessionFactory 是自动生成的下面bean id.
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation"
   value="classpath:hibernate.cfg.xml">
  </property>
 </bean>
<!-- 事务属性 次要业务-->
    <tx:advice id="mycy">
      <tx:attributes>
         <tx:method name="*"/>
      </tx:attributes>
    </tx:advice>
 
<!-- 织入 -->
   <aop:config>
         <aop:advisor advice-ref="mycy" pointcut="execution(* com.service.*.*(..))"/>
   </aop:config>

   说明:com.service.*.*(..)    com包下.service业务层包下.所有类.所有方法(..)


 5: 现在该配置DWR了配置文件 dwr.xml。
   1)将
  文件打开 配置为:<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
    "dwr20.dtd">   
  说明:就是将"dwr20.dtd" 中前面那段"http:...dwr20.dtd"  什么的剪切掉 剩下就"dwr20.dtd"就ok
  2) <dwr>
       <allow>
          <convert match="com.pojos.*" converter="bean"></convert>
          <create javascript="myjs" creator="spring">
            <param name="beanName" value="tsaleformService"></param>
          </create>
       </allow>
    </dwr>
  说明:需导入dwr.dtd 文件用于提示用,记得话 不要当然没问题
com.pojos.*  所有pojo类  ,  converter="bean" 固定的,bean 也可以换成hibernate,
 javascript="myjs" 是自定义的,creator="spring" 固定的,param name="beanName"固
 定的,value="tsaleformService"中 tsaleformService 是applicationContext.xml中
 <!-- service bean -->下面的对应的业务层bean 的id 如上id。

 

 第三步:现在就关系到如何进行DWR测试。在浏览器中在工程名下直接/dwr   .dwr 是刚才在web.xml
 中所配置的映射名 如上:<servlet-name>dwr</servlet-name>。
 测试成功将会出现你的自定义 "myjs" 链接  。进入就可进行测试业务层事务了.

这段总结是我在一个上午总结的总结的不是很专业、很全,我也是带着复习的心情边开着电脑对着源码思索一步步、一个个字
打出来的!希望对有需要的人有所帮助,与人同乐就是我最大的快乐。
很高兴跟大家互相关注,打算在把ssh2的一些地方整理下。