ssh框架搭建的基本步骤(以及各部分作用)

来源:互联网 发布:免费网络加速器 编辑:程序博客网 时间:2024/05/01 08:53

本文档用于说明用ssh实现crud过程中的基本步骤。

首先,明确spring,struts,hibernate在环境中各自的作用。

struts:
用来响应用户的action,对应到相应的类进行处理。需要struts对应的包。

hibernate:
用来把实体类对应到数据库。提供增删改查的基本操作实现。需要hibernate对应的包以及mysql的jdbc驱动包。

spring:
管理struts:在xml配置文件中为struts的action进行值注入。
管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),即不需要原来的hibernate的xml文件。为hibernate的dao操作注入sessionfactory属性值。
需要提供spring对应的包,除此以外,还需要提供一个整合spring与struts的包:truts2-spring-plugin-2.0.11.1.jar

下面就搭建步骤进行详细说明:
1、新建一个web project,导入包,需要的包放在文件夹sshlib中。
2、修改web.xml的配置信息,内容如下:

[html] view plain copy
print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee "  
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "  
  4.  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">  
  6.  <welcome-file-list>  
  7.   <welcome-file>index.jsp</welcome-file>  
  8.  </welcome-file-list>  
  9.  <!-- 下面的listener,是spring提供的,它会在创建时自动查找WEB-INF下的applicationContext.xml文件 ,从而创建spring容器-->  
  10.  <listener>  
  11.   <listener-class>  
  12.    org.springframework.web.context.ContextLoaderListener  
  13.   </listener-class>  
  14.  </listener>  
  15.  <!-- 下面的配置作用是:在MyEclipse中,系统会自动到WEB-INF下寻找 applicationContext.xml文件,而系统  
  16.  会自动将applicationContext.xml放置到WEB-INF下的classes下,所以会产生找不到applicationContext.xml的错误,需要指明applicationContext.xml  
  17.  的放置位置。这就是下面的信息作用。在Eclipse中也许不需要此配置信息。-->  
  18.  <context-param>  
  19.   <param-name>contextConfigLocation</param-name>  
  20.   <param-value>  
  21.    /WEB-INF/classes/applicationContext.xml  
  22.   </param-value>  
  23.  </context-param>  
  24.  <!-- 下面的配置信息,用来配置说明使用struts过滤器 -->  
  25.  <filter>  
  26.   <filter-name>struts2</filter-name>  
  27.   <filter-class>  
  28.    org.apache.struts2.dispatcher.FilterDispatcher  
  29.   </filter-class>  
  30.   <!--  
  31.   下面的配置信息用来说明:程序中运行的action放置在哪个包下面,对于list.action的请求,它会自动在这个包下面寻找ListAction.class的类  
  32.   如果没有这句话,那么所有的action请求只能在struts.xml中进行配置。   
  33.    -->  
  34.   <init-param>  
  35.    <param-name>actionPackages</param-name>  
  36.    <param-value>  
  37.     com.action  
  38.    </param-value>  
  39.   </init-param>  
  40.  </filter>  
  41.  <!--  
  42.  下面的配置表示对于所有请求都交给struts来处理。 
  43.   -->  
  44.  <filter-mapping>  
  45.   <filter-name>struts2</filter-name>  
  46.   <url-pattern>/*</url-pattern>  
  47.  </filter-mapping>  
  48. </web-app>  


3、接下來用來配置struts.xml

[html] view plain copy
print?
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd ">  
  5. <struts>  
  6.  <!-- 指定Web应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312 当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法 -->  
  7.  <constant name="struts.i18n.encoding" value="utf-8" />  
  8.  <constant name="struts.devMode" value="true" />  
  9.  <package name="default" namespace="/" extends="struts-default">  
  10.   <interceptors>  
  11.    <!-- 定义拦截器 -->  
  12.    <interceptor name="crudInterceptor"  
  13.     class="com.action.CrudInterceptor" />  
  14.    <interceptor-stack name="appStack">  
  15.     <interceptor-ref name="crudInterceptor" />  
  16.     <!-- 下面一行自带的拦截器必须加上,否则出错 -->  
  17.     <interceptor-ref name="defaultStack" />  
  18.    </interceptor-stack>  
  19.   </interceptors>  
  20.   <!-- 使用默认拦截器配置Action都需要拦截器堆栈   
  21.    即所有struts请求都自动先交给拦截器处理。关于拦截器的具体规则在拦截器对应类(com.action.CrudInterceptor)中进行了解释。  
  22.   -->  
  23.   <default-interceptor-ref name="appStack"></default-interceptor-ref>  
  24.  </package>  
  25. </struts>  


4、接下来配置applicationContext.xml:

[html] view plain copy
print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans "  
  3.  xmlns:aop="http://www.springframework.org/schema/aop "  
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "  
  5.  xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  6. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">  
  8.  <!-- 数据源 -->  
  9.  <bean id="dataSource"  
  10.   class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  11.   <property name="driverClassName"  
  12.    value="org.gjt.mm.mysql.Driver" />  
  13.   <property name="url" value="jdbc:mysql://localhost:3306/user" />  
  14.   <property name="username" value="root" />  
  15.   <property name="password" value="" />  
  16.  </bean>  
  17.  <!-- sessionFactory配置 -->  
  18.  <bean id="sessionFactory"  
  19.   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  20.   <property name="dataSource" ref="dataSource" />  
  21.    <property name="mappingResources">  
  22.    <list>  
  23.    <value>com/ssh/User.hbm.xml</value>  
  24.    </list>  
  25.    </property>  
  26.   <!-- 定义sessionFactory的属性 -->  
  27.   <property name="hibernateProperties">  
  28.    <props>  
  29.     <prop key="hibernate.dialect">  
  30.      org.hibernate.dialect.MySQL5InnoDBDialect  
  31.     </prop>  
  32.     <prop key="hibernate.hbm2ddl.auto">update</prop>  
  33.     <prop key="hibernate.show_sql">true</prop>  
  34.     <prop key="hibernate.format_sql">true</prop>  
  35.    </props>  
  36.   </property>  
  37.  </bean>  
  38.  <!-- hibernate的类名,属性名和数据库之间的对应关系的自定义 com.ynstudio.tools.LocalNamingStrategy -->  
  39.  <bean id="namingStrategy"  
  40.   class="org.hibernate.cfg.ImprovedNamingStrategy">  
  41.  </bean>  
  42.  <!-- 定义DAO的bean -->  
  43.  <bean id="userDao"  
  44.   class="com.ssh.UserDaoImpl">  
  45.   <property name="sessionFactory" ref="sessionFactory" />  
  46.  </bean>  
  47.  <!--  
  48.  下面的代码用来向Action类注入属性值 
  49.   -->  
  50.  <bean id="crudAction" class="com.action.CrudAction">  
  51.   <property name="userDao" ref="userDao"></property>  
  52.  </bean>  
  53. </beans>  


5、上述配置文件完成后,就开始业务逻辑部分。
首先完成hibernate的curd操作部分内容。
设计一个User实体类。包含数据库中User表的字段。
新建一个User.hbm.xml文件,实现实体类与数据库的关联。内容如下:

[html] view plain copy
print?
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3. "-//Hibernate/Hibernate Mapping DTD//EN"  
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">  
  5. <hibernate-mapping>  
  6.  <class name="com.ssh.User" table="user">  
  7.   <id name="id" column="id">  
  8.    <generator class="increment" />  
  9.   </id>  
  10.   <property name="username" column="username" />  
  11.   <property name="password" column="password" />  
  12.   <property name="birthday" column="birthday" />  
  13.   <property name="email" column="email" />  
  14.  </class>  
  15.    
  16. </hibernate-mapping>  


接下来需要实现dao操作。
设计一个类继承了HibernateDaoSupport类。关于HibernateDaoSupport类,请参考相关文档。

6、完成hibernate的设计后,接下来设计struts的拦截器和struts的action。
struts的拦截器:

[java] view plain copy
print?
  1. package com.action;  
  2. import java.lang.reflect.Method;  
  3. import org.apache.struts2.ServletActionContext;  
  4. import com.opensymphony.xwork2.ActionInvocation;  
  5. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  6. /** 
  7.  * 这个类的是拦截器。 
  8.  * 对于如下URL: 
  9.  * http://xxxxx:xxxx//xxx/hello.action?method:list  
  10.  * actionInvocation.invoke()方法会自动调用名称了HelloAction类的list方法。 
  11.  * 在action中根据该方法的返回值决定页面显示或跳转位置。 
  12.  * result值除了可以再action类中定义,还可以在struts.xml中配置。 
  13.  * 配置时可采用如下语句: 
  14.  * <action name="hello" class="crudAction"> 
  15.  *   <result name="list">/list.jsp</result> 
  16.  *   <result name="modify">/modify.jsp</result> 
  17.  * </action> 
  18.  * 此处需要格外注意的是:class属性的值,此值是applicationContext.xml中的id。 
  19.  * 该bean中注入了action类中属性userDao的值。 
  20.  * 所以,如果需要使用struts.xml中的action配置,需要使用该id,否则,系统不会给其注入值,最终导致空指针异常。 
  21.  * @author HeXiaoXing 
  22.  * 
  23.  */  
  24. public class CrudInterceptor extends AbstractInterceptor{  
  25.  public String intercept(ActionInvocation actionInvocation) throws Exception {  
  26.   /* 
  27.    *下面代码演示了获取请求的类名与方法名的一半方式,但本例中不涉及。 全部注释掉。 
  28.    */  
  29. //  Object action = actionInvocation.getAction();  
  30. //  Class actionClass = action.getClass();  
  31. //  String actionClassName = actionClass.getSimpleName();  
  32. //  String methodName = actionInvocation.getProxy().getMethod();  
  33.   return actionInvocation.invoke();  
  34.  }  
  35.    
  36. }  


struts的action,关于此action的全部内容,请参考源程序CrudAction。

7、完成了类设计后,就是页面的设计,关于页面的设计,不再一一叙述,给粗源文件,请自行参考。
需要提出的是,在转向时,url的格式必须是method:方法名。这是约定的,不可以写成method=方法名。

原创粉丝点击