SSH2各部分作用

1.主要说明SSH各部分的作用:
1>Struts2,Struts总的来说就是两个字--"动作"
请求到达之后核心的过滤器会调用对应的action,找到相对应的result来实现跳转。
2>hibernate,hibernate总的来说就是三个字--"持久层"
主要负责持久层:通过hibernate.cfg.xml配置数据库的连接,配置javabean的数据库映射xml文件,书写持久层,这里的持久层 Manager,通过spring注入的DAO数据库的实现完成一些方法,其中hibernate 的DAO要通过Spring提供的HibernateDaoSupport类,进行方法的实现与数据库的增删改,更新等操作.
在有了spring之后hibernate中的内容可以在spring的配置文件中配置。Hiernate.cfg.xml就不再需要。
3>spring,spring总的来说就是两个字--"管理",管理整个流程,
对事务的管理,对hibernate的管理(创建数据库的连接),对Struts的管理(管理Struts全部的动作),管理hibernate的Manager和Dao(主要是对Manager中的dao进行对象的注入).
2.主要的配置和代码:
1>.总的配置web.xml
web.xml是J2EE  web方向的心脏,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app  version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!—指定核心的过滤器-->
<filter>
<filter-name>dang</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>dang</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!—指定那个spring配置文件的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:base.xml</param-value>
</context-param>
<!—指定spring的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
2>Struts2的配置:
<struts>
<!--可以使用<include  file=”XX.xml”>来调用其他的配置文件内容,使整个项目结构清晰。-->
<include file="struts-user.xml"  />
<include  file="struts-order.xml" />
<include file="struts-cart.xml"  />
<include  file="struts-main.xml"  />
<!—与spring整合,指定action实例交由struts2-spring插件来管理-->
<constant name="struts.objectFactory"  value="spring"></constant>


<package name="dang-default"  extends="json-default">
<interceptors>
<interceptor name="checkUser"  class="org.tarena.interceptor.CheckUserInterceptor"/>
<interceptor name="redirctUrl"  class="org.tarena.interceptor.Redirectinterceptor"/>
<interceptor-stack  name="logincheck">
<interceptor-ref  name="checkUser"/>
<interceptor-ref  name="defaultStack"/>
</interceptor-stack>

<interceptor-stack  name="redirectrInterceptor">
<interceptor-ref  name="defaultStack"/>
<interceptor-ref  name="redirctUrl"/>
</interceptor-stack>
</interceptors>

<default-action-ref name="main"  />
<global-results>
<result name="error"  type="redirect">/error.jsp</result>
<result name="not_login"  type="redirectAction">
<param  name="actionName">loginForm</param>
<param  name="namespace">/user</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error"  exception="java.lang.Exception"/>
</global-exception-mappings>
<action name="main">
<result  type="redirectAction">main/main.action</result>
</action>
</package>
</struts>


3>hibernate的配置
主要是定义hibernate中的实体类和数据库表之间的关系—映射文件。
4>Spring的配置
<context:annotation-config  />
  <bean id="userDao"  class="org.tarena.dao.impl.UserDaoImpl" />
  <bean  id="userService" class="org.tarena.service.UserServiceImpl"  />
  <bean id="productDao"  class="org.tarena.dao.impl.ProductDaoImpl" />
  <bean  id="productService" class="org.tarena.service.ProductServiceImpl"  />
  <bean id="orderDao"  class="org.tarena.dao.impl.OrderDaoImpl" />
- <bean  id="hibernateTemplate"  class="org.springframework.orm.hibernate3.HibernateTemplate">
  < property name="sessionFactory" ref="sessionFactory" />
  < /bean>
<!—配置连接数据库的参数-->
- <bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource">
  <property  name="driverClassName" value="com.mysql.jdbc.Driver" />
  < property name="url" value="jdbc:mysql://localhost:3306/test"  />
  <property name="username" value="root"  />
  <property name="password" value="anmyz1986"  />
  < /bean>
<!—配置hibernate的sessionFactory实力,-->
- <bean  id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
  <ref bean="dataSource"  />
  </property>
- <property  name="hibernateProperties">
- <props>
  <prop  key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  < prop key="hibernate.show_sql">true</prop>
  < /props>
  < /property>
<!—定义映射文件,找到实体类与数据库中表的关系-->
- <property  name="mappingResources">
- <list>
  < value>org/tarena/domain/Address.hbm.xml</value>
  < value>org/tarena/domain/Category.hbm.xml</value>
  < /list>
  </property>
  < /bean>
<!—定义事务管理,使用spring来处理数据库的事务-->
- <tx:advice  transaction-manager="transactionManager" id="txAdvice">
- <tx:attributes>
  <tx:method name="*" />
  < /tx:attributes>
  </tx:advice>
- <bean  id="transactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  < property name="sessionFactory" ref="sessionFactory" />
  < /bean>
- <aop:config>
  <aop:pointcut  expression="execution(* org.tarena.service.*.*(..))" id="txPointCut"  />
  <aop:advisor advice-ref="txAdvice"  pointcut-ref="txPointCut" />
  < /aop:config>


3. ssh三大框架整合之后的流程
1. 服务器启动,启动时加载web.xml,通过spring监听器加载对应的spring配置,将配置(或配置)好的bean实例化,放入到spring容器之中。
2. 在加载spring配置文件时,会对应的加载spring配置文件中的hibernate映射文件,
3. 浏览器端发送请求,通过struts2的过滤器(cleanUpFilter..DispatcherFilter核心),找到对应的actionMapper,判断请求是否为action请求
4. 如果是action请求,便会在struts2-spring容器中查找对应名字的action实例(如果不是action实例,便会直接调用jsp等其他资源作为响应)。
5.action实例会调用Action类中对应的方法,该方法中会调用对应的service中的业务逻辑方法来响应,action会找到spring容器中对应的service实例,通过setter方法来注入到action中。
6.同样,service实例中需要的dao也会以同样的方式注入到service中。之后完成对应的数据库操作。
当然在中间会调用struts2的拦截器,这个拦截器调用的时机没有变化。
可以根据自己的理解来叙述。

posted @ 2015-08-06 10:33  剑芒  阅读(224)  评论(0编辑  收藏  举报