ssh框架搭建的基本步骤(以及各部分作用)
 
 
一、首先,明确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的配置信息,内容如下:
 
<?xml version="1.0" encoding="UTF-8"?>
 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee "
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
  <welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
 <!-- 下面的listener,是spring提供的,它会在创建时自动查找WEB-INF下的applicationContext.xml文件 ,从而创建spring容器-->
  <listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
  </listener>
  <!-- 下面的配置作用是:在MyEclipse中,系统会自动到WEB-INF下寻找 applicationContext.xml文件,而系统会自动将applicationContext.xml放置到WEB-INF下的classes下,所以会产生找不到applicationContext.xml的错误,需要指明applicationContext.xml的放置位置。这就是下面的信息作用。在Eclipse中也许不需要此配置信息。-->
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
    /WEB-INF/classes/applicationContext.xml
   </param-value>
  </context-param>
  <!-- 下面的配置信息,用来配置说明使用struts过滤器 -->
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
   </filter-class>
   <!--
  下面的配置信息用来说明:程序中运行的action放置在哪个包下面,对于list.action的请求,它会自动在这个包下面寻找ListAction.class的类
  如果没有这句话,那么所有的action请求只能在struts.xml中进行配置。
   -->
   <init-param>
    <param-name>actionPackages</param-name>
    <param-value>
     com.action
    </param-value>
   </init-param>
  </filter>
  <!--
 下面的配置表示对于所有请求都交给struts来处理。
  -->
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
 </web-app>
 
3、接下來用來配置struts.xml
 
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd ">
 
<struts>
  <!-- 指定Web应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312 当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
  <constant name="struts.i18n.encoding" value="utf-8" />
  <constant name="struts.devMode" value="true" />
  <package name="default" namespace="/" extends="struts-default">
   <interceptors>
    <!-- 定义拦截器 -->
    <interceptor name="crudInterceptor"
     class="com.action.CrudInterceptor" />
    <interceptor-stack name="appStack">
     <interceptor-ref name="crudInterceptor" />
     <!-- 下面一行自带的拦截器必须加上,否则出错 -->
     <interceptor-ref name="defaultStack" />
    </interceptor-stack>
   </interceptors>
   <!-- 使用默认拦截器配置Action都需要拦截器堆栈
   即所有struts请求都自动先交给拦截器处理。关于拦截器的具体规则在拦截器对应类(com.action.CrudInterceptor)中进行了解释。
  -->
   <default-interceptor-ref name="appStack"></default-interceptor-ref>
  </package>
 </struts>
 
 
4、接下来配置applicationContext.xml:
 
<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans "
  xmlns:aop="http://www.springframework.org/schema/aop "
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
 
 <!-- 数据源 -->
  <bean id="dataSource"
   class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"
    value="org.gjt.mm.mysql.Driver" />
   <property name="url" value="jdbc:mysql://localhost:3306/user" />
   <property name="username" value="root" />
   <property name="password" value="" />
  </bean>
  <!-- sessionFactory配置 -->
  <bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
    <list>
    <value>com/ssh/User.hbm.xml</value>
    </list>
    </property>
   <!-- 定义sessionFactory的属性 -->
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      org.hibernate.dialect.MySQL5InnoDBDialect
     </prop>
     <prop key="hibernate.hbm2ddl.auto">update</prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="hibernate.format_sql">true</prop>
    </props>
   </property>
  </bean>
 
 <!-- hibernate的类名,属性名和数据库之间的对应关系的自定义 com.ynstudio.tools.LocalNamingStrategy -->
  <bean id="namingStrategy"
   class="org.hibernate.cfg.ImprovedNamingStrategy">
  </bean>
  <!-- 定义DAO的bean -->
  <bean id="userDao"
   class="com.ssh.UserDaoImpl">
   <property name="sessionFactory" ref="sessionFactory" />
  </bean>
  <!--
 下面的代码用来向Action类注入属性值
  -->
  <bean id="crudAction" class="com.action.CrudAction">
   <property name="userDao" ref="userDao"></property>
  </bean>
 </beans>
 
 
5、上述配置文件完成后,就开始业务逻辑部分。
 首先完成hibernate的curd操作部分内容。
 设计一个User实体类。包含数据库中User表的字段。
 新建一个User.hbm.xml文件,实现实体类与数据库的关联。内容如下:
 
<?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
 <hibernate-mapping>
  <class name="com.ssh.User" table="user">
   <id name="id" column="id">
    <generator class="increment" />
   </id>
   <property name="username" column="username" />
   <property name="password" column="password" />
   <property name="birthday" column="birthday" />
   <property name="email" column="email" />
  </class>
 
 </hibernate-mapping>
 
接下来需要实现dao操作。
 设计一个类继承了HibernateDaoSupport类。关于HibernateDaoSupport类,请参考相关文档。
 
6、完成hibernate的设计后,接下来设计struts的拦截器和struts的action。
struts的拦截器:
 
package com.action;
 
import java.lang.reflect.Method;
 
import org.apache.struts2.ServletActionContext;
 
import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 
/**
  * 这个类的是拦截器。
 * 对于如下URL:
 * http://xxxxx:xxxx//xxx/hello.action?method:list
  * actionInvocation.invoke()方法会自动调用名称了HelloAction类的list方法。
 * 在action中根据该方法的返回值决定页面显示或跳转位置。
 * result值除了可以再action类中定义,还可以在struts.xml中配置。
 * 配置时可采用如下语句:
 * <action name="hello" class="crudAction">
  *   <result name="list">/list.jsp</result>
  *   <result name="modify">/modify.jsp</result>
  * </action>
  * 此处需要格外注意的是:class属性的值,此值是applicationContext.xml中的id。
 * 该bean中注入了action类中属性userDao的值。
 * 所以,如果需要使用struts.xml中的action配置,需要使用该id,否则,系统不会给其注入值,最终导致空指针异常。
 * @author HeXiaoXing
  *
  */
 public class CrudInterceptor extends AbstractInterceptor{
 
 public String intercept(ActionInvocation actionInvocation) throws Exception {
   /*
    *下面代码演示了获取请求的类名与方法名的一半方式,但本例中不涉及。 全部注释掉。
   */
 //  Object action = actionInvocation.getAction();
 //  Class actionClass = action.getClass();
 //  String actionClassName = actionClass.getSimpleName();
 //  String methodName = actionInvocation.getProxy().getMethod();
 
  return actionInvocation.invoke();
  }
 
 }
 
 
struts的action,关于此action的全部内容,请参考源程序CrudAction。
 
7、完成了类设计后,就是页面的设计,关于页面的设计,不再一一叙述,给粗源文件,请自行参考。
 
 需要提出的是,在转向时,url的格式必须是method:方法名。这是约定的,不可以写成method=方法名。
 
 

ssh框架搭建的基本步骤(以及各部分作用)的更多相关文章

  1. SSH框架搭建步骤总结以及Hibernate二级缓存,查询缓存

    二级缓存.查询缓存 一级缓存: 默认启动,生命周期是和session同步的,session独享 二级缓存: 需要加载配置信息,生命周期是和应用服务器同步,session共享 1:在hibernate. ...

  2. 转 SSH框架搭建详细图文教程

    原址:http://blog.sina.com.cn/s/blog_a6a6b3cd01017c57.html 什么是SSH? SSH对应 struts spring hibernatestruts ...

  3. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

  4. SSH框架搭建详细图文教程(转)

    这篇文章看的我醍醐灌顶的感觉,比之前本科时候学习的SSH架构 要清晰数倍  非常感觉这篇博主的文章 文章链接为:http://blog.sina.com.cn/s/blog_a6a6b3cd01017 ...

  5. SSH框架搭建详细图文教程

    转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6762554.html 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+H ...

  6. SSM、SSH框架搭建,面试点总结

    文章目录 1.SSM如何搭建:三个框架的搭建: 2.SSM系统架构 3.SSM整合步骤 4.Spring,Spring MVC,MyBatis,Hibernate个人总结 5.面试资源 关于SSM.S ...

  7. 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】

    经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...

  8. SSH框架搭建详细步骤整理

    学习Java面前有两座山,一座山叫SSM,一座山叫SSH,跨越了这两座山之后才能感受到这个语言的魅力所在,SSM框架的搭建详细在之前博客已经涉及了,今天来整理SSH框架详细步骤: 生有涯 而 学无涯 ...

  9. SSH框架搭建最终版【测试、log4j、baseDao】

    最详细搭建SSH框架环境 本博文主要是讲解如何搭建一个比较规范的SSH开发环境,以及对它测试[在前面的搭建中,只是整合了SSH框架,能够使用SSH实现功能],而这次是相对规范的. 导入开发包 在Str ...

随机推荐

  1. hdu1269迷宫城堡(判断有向图是否是一个强连通图)

    1 /* 题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)! 思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于n,那么就说明图按照正向边就不是连 ...

  2. Cocos2d-x 3.2 学习笔记(七)Scene And Transition

    Scene 场景. 是一个抽象的概念,仅被用作Node(节点)的一个子类. Scene (场景)和Node(节点)几乎相同,不同的是Scene的默认锚点在屏幕的中心. 关于场景,不得不提的是场景之间的 ...

  3. 可视化工具gephi源码探秘(二)---导入netbeans

    在上篇<可视化工具gephi源码探秘(一)>中主要介绍了如何将gephi的源码导入myeclipse中遇到的一些问题,此篇接着上篇而来,主要讲解当下通过myeclipse导入gephi源码 ...

  4. 12个学习 CSS3 网站布局设计的优秀案例

    网络上有很多的 CSS 画廊站点供大家对各类网站作品进行打分和评论,每天有数以百计的优秀网站被推荐上面,这对于网页设计师来说是很好的灵感来源.今天,我们选择了15赢得 CSS 设计大奖的优秀作品,帮助 ...

  5. 十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  6. Android网格视图(GridView)

    GridView的一些属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动,也可以设置成2.3.4…… 2.android:columnWi ...

  7. Windows Azure Active Directory (1) 前言 - 基于声明的验证和授权

    <Windows Azure Platform 系列文章目录> 在我们介绍整套系统架构之前,我们需要首先定义一些基本的概念. 用户及其属性: 用户值得是要使用某项服务的个体.用户一般都有一 ...

  8. Elasticsearch——分页查询From&Size VS scroll

    Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如果要实现分页查询该怎么办呢? 更多内容参考Elasticsearch资料汇总 按照一般的查询 ...

  9. 一对多关系domain Model中设置使用AutoMapper时出错

    在使用AutoMapper时,把数据从VO-PO时显示如下错误,错误提示说在一对多关系中已将集合设置为EntityCollection,那么这个是为什么呢. 看下action中的代码,我们可以发现这是 ...

  10. Sublime Text2配置过程

    今天Sublime Text2不知道为什么突然崩溃了,一直不能运行,没办法只有重装了,重装后按我的用途重新配置了一下,现将配置过程记录下来以备将来不时之需 说明:配置是在windows系统上进行的,其 ...