首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

SSH构架筹建小结

2012-12-25 
SSH构架搭建小结看过了两三个SSH搭建的视频(浪曦风中叶老师、尚学堂李勇老师的两个视频),也跟着视频把这个

SSH构架搭建小结
看过了两三个SSH搭建的视频(浪曦风中叶老师、尚学堂李勇老师的两个视频),也跟着视频把这个框架搭了两遍,有点迷迷糊糊的,为了加深印象,我决定不依靠视频再来搭一遍,经过一天的调试与处理,终于能够独立自主地把SSH框架给搭建起来了,不容易啊。其中出现的错误以及各种各样的BUG不计其数,通过查阅文档以及Google得到了解决。这里,我就来做一个总结:

SSH框架的基本配置:
1.相关jar包的引入,这里我采用的是spring2 + struts2 + hibernate3的组合,搭完了之后才发现Spring已经到3了,不知道在Spring3上面的配置是否相同,有待尝试。


Sql代码
-----核心jar包----- 
# spring.jar  
# struts2-core.jar 
# xwork-core.jar 
# mysql-connector-java.jar 
# hibernate3.jar 
# struts2-spring-plugin.jar 
-----在默认配置下核心jar所依赖的jar包--- 
# commons-collections.jar ---| 
# commons-fileupload.jar-----|------------这三个jar包是在jakarta-commons项目中一些 
# commons-logging.jar--------|            基于JDK上扩展的工具包。 
# freemarker.jar 
# log4j.jar 
# ognl.jar 
# dom4j.jar 
# jta.jar 
# cglib-nodep.jar 
# antlr.jar ------------ 这个jar包是spring AOP 采用 动态代理 时需要的jar包。 




2.相关的配置
i)/WEB-INF/web.xml
a.需要配置一个Struts2的Filter:


Xml代码
<filter> 
  <filter-name>struts2</filter-name> 
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
</filter> 
<filter-mapping> 
  <filter-name>struts2</filter-name> 
  <url-pattern>/*</url-pattern> 
</filter-mapping> 


 

b.由于从struts2.1.3之后的版本不再建议采用org.apache.struts2.dispatcher.FilterDispatcher,所以,我们最好配置成StrutsPrepareAndExecuteFilter或者StrutsExecuteFilter以及StrutsPrepareFilter,需要注意的是:如配置成StrutsExecuteFilter需要将StrutsPrepareFilter也配置上,否则将会报错。所以建议就只直接采用StrutsPrepareAndExecuteFilter。

c.此外还需要配置一个ContextListener:


Xml代码
<listener> 
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 


如果你的applicationContext.xml没有配置在/WEB-INF/目录或者采用的不是默认的文件名,则还需要配context-param,让Spring找到对应的配置文件,如下(注意:param-name的内容一定是contextConfigLocation,Spring将根据该名称注入到相应的对象中):


Xml代码
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath*:application-Context.xml</param-value> 
</context-param> 


  ii)applicationContext.xml,这个文件是比较核心的文件:

a)配置sessionFactory,有两种配置方式:
(1)采用传统的Hibernate配置文件,将其映射到sessionFactory中:


Xml代码
<bean id="sessionFactory" > 
  <value>classpath:hibernate.cfg.xml</value> 
</property> 
</bean> 


  采用这种方式时,需要在hibernate.cfg.xml文件中配置数据连接相关信息,这里与一般的hibernate配置文件一样:


Xml代码
<hibernate-configuration> 
  <session-factory> 
   <!-- connection configuration --> 
   <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
   <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ssh_test</property> 
   <property name="hibernate.connection.username">root</property> 
   <property name="hibernate.connection.password">orange</property> 
   <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
   <!-- the following configuration just for  programming and debug --> 
   <property name="hibernate.show_sql">true</property> 
    
   <!-- mapping resource --> 
   <mapping resource="com/ssh/bean/User.hbm.xml"/> 
  </session-factory> 
</hibernate-configuration> 
(2)采用sessionFactory属性的方式配置数据源相关信息,如下: 
  
<!-- 配置数据源 --> 
<bean id="dataSource" destroy-method="close"> 
  <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
  <property name="url" value="jdbc:mysql://localhost:3306/mytest" /> 
  <property name="username" value="root" /> 
  <property name="password" value="orange" /> 
  <property name="maxActive" value="100" /> 
  <property name="maxIdle" value="30" /> 
  <property name="maxWait" value="500" /> 
  <property name="defaultAutoCommit" value="true" /> 
</bean> 
  
<!-- 将数据源映射到sessionFactory中 --> 
<bean id="sessionFactory" ref="dataSource" /> 
  <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>com/test/bean/User.hbm.xml</value> 
   </list> 
  </property> 
</bean> 


 

  b)配置完sessionFactory后,还可以根据需要配置以下三方面的内容,也可以不配置选择采用默认的方式:


Xml代码
<!-- 配置事务管理器 --> 
<bean id="transactionManager" transaction-manager="transactionManager"> 
<tx:attributes> 
  <tx:method name="add*" propagation="REQUIRED"/> 
  <tx:method name="del*" propagation="REQUIRED"/> 
  <tx:method name="modify*" propagation="REQUIRED"/> 
  <tx:method name="*" read-only="true"/> 
</tx:attributes> 
</tx:advice> 
 
<!-- 那些类的哪些方法参与事务 --> 
<aop:config> 
<aop:pointcut id="allManagerMethod" expression="execution(* xxx.xxx.*.*(..))"/> 
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/> 
</aop:config> 


这样就基本完成了我们的ssh的相关配置。

3.SSH的基本使用:
具体分工:
# 在applicationContext.xml中配置相关的bean信息


Xml代码
<bean id="userService" ref="userDao"/> 
</bean> 
 
<bean id="loginAction" ref="userService" /> 
</bean> 


  这里的property属性中name值对应的是相应处理类生成时需要IoC容器注入的属性,比如说id为loginAction的处理类为com.ssh.action.LoginAction(它其中应当设置一个setService(UserService service)方法),这样在需要使用该bean时,IoC容器会调用这个setService方法来将生成的userService对象传入。

需要注意的是,如果想让IoC容器注入相应属性,则必须要实现相应属性的set方法。

# 在struts.xml中配置action的相关信息
相关注意事项:
由于所有的bean都由Spring来管理,那么在struts.xml中一个action的class属性就不能写成具体的类,而是要使用该类在applicationContext.xml文件中配置的Bean的id,如:


Xml代码
<action name="login" class="loginAction"> 
  <result name="success">/result.jsp</result> 
  <result name="input">/index.jsp</result> 
</action> 


  这个loginAction对应的就是上面的id为loginAction的bean,而这个bean的class属性中设置的才是真正的对应的Action的处理类。

# 对于每个模型,都要有一*.hbm.xml

3.其它一些注意点:
Spring中一些的概念很重要:AOP,IOC。

热点排行