SSH框架流程
流程图
具体步骤
一、实体类
//Serializable在网络的环境下做类传输
public class Category implements Serializable {
private Integer cid;
private String cname;
//一级分类中存放二级分类的集合
private Set<CategorySecond> categorySeconds=new HashSet<CategorySecond>(); public Set<CategorySecond> getCategorySeconds() {
return categorySeconds;
}
public void setCategorySeconds(Set<CategorySecond> categorySeconds) {
this.categorySeconds = categorySeconds;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
二、映射文件
1、代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="cn.itcast.shop.category.vo.Category" table="category">
<id name="cid">
<generator class="native"/>
</id>
<property name="cname"/> <!-- 配置二级分类的集合 lazy是不进行延迟加载;cascade可以级联删除,one一方删除一个,many一方全部删除-->
<set order-by="csid" name="categorySeconds" lazy="false">
<key column="cid"/>
<one-to-many class="cn.itcast.shop.categorysecond.vo.CategorySecond"/>
</set>
</class>
</hibernate-mapping>
2、配置到spring
<!--Hibernate的相关信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的其他的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<value>cn/itcast/shop/category/vo/Category.hbm.xml</value>
</list>
</property>
</bean>
三、对Action、Service和Dao进行配置
1、Action
public class IndexAction extends ActionSupport {
//注入一级分类的service
private CategoryService categoryService; public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
} //注入商品的Service
private ProductService productService; public void setProductService(ProductService productService) {
this.productService = productService;
} /*
* 执行的访问首页的方法
*/
public String execute(){
//查询所有一级分类的集合
List<Category> cList=categoryService.findAll();
//将一级分类存入到session范围
ActionContext.getContext().getSession().put("cList", cList);
//查询热门商品
List<Product> hList=productService.findHot();
//将商品的信息存入到值栈中
ActionContext.getContext().getValueStack().set("hList", hList); return "index";
}
}
2、Service
//事务配置
@Transactional
public class CategoryService {
//注入CategoryDao
private CategoryDao categoryDao; public void setCategoryDao(CategoryDao categoryDao) {
this.categoryDao = categoryDao;
}
}
2、Dao
public class CategoryDao extends HibernateDaoSupport {
//Dao层的查询所有一级分类的方法
public List<Category> findAll() {
String hql="from Category";
List<Category> list=this.getHibernateTemplate().find(hql);
return list;
}
}
四、将Action、Service和Dao配置到spring
<!-- action的配置 -->
<bean id="indexAction" class="cn.itcast.shop.index.action.IndexAction" scope="prototype">
<property name="categoryService" ref="categoryService"/>
</bean>
<!-- Service配置====================================================== -->
<bean id="categoryService" class="cn.itcast.shop.category.service.CategoryService">
<property name="categoryDao" ref="categoryDao"/>
</bean> <!-- Dao配置============================================================= -->
<bean id="categoryDao" class="cn.itcast.shop.category.dao.CategoryDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
五、将数据显示到jsp页面
<%@ taglib uri="/struts-tags" prefix="s" %>
<div class="span24">
<ul class="mainNav">
<li>
<a href="${ pageContext.request.contextPath }/index.action">首页</a>
|
</li>
<!-- 如果保存在session中 -->
<s:iterator var="c" value="#session.cList">
<!-- 如果保存在值栈中 -->
<!-- <s:iterator var="p" value="nList"> -->
<li>
<a href="${pageContext.request.contextPath }/product_findByCid.action?cid=<s:property value="#c.cid"/>&page=1"><s:property value="#c.cname"/></a>
|
</li>
</s:iterator>
</ul>
</div>
六、配置到Struts中
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="false" />
<package name="shop" extends="struts-default" namespace="/">
<!-- 全局页面 -->
<global-results>
<result name="msg">/WEB-INF/jsp/msg.jsp</result>
</global-results> <!-- 配置首页访问的Action -->
<action name="index" class="indexAction">
<result name="index">/WEB-INF/jsp/index.jsp</result>
</action> <!-- 验证码Action -->
<action name="checkImg" class="checkImgAction"></action> </package>
</struts>
SSH框架流程的更多相关文章
- SSH框架流程详解
解图: 由图可见,有三个框架{ ①. Struts_2 ②. Spring ③. Hibernate } 框架 作用 本质 同等于 Struts_2 实现MVC / 控制.跳转 过滤器(Filter) ...
- J2EE进阶(六)SSH框架工作流程项目整合实例讲解
J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...
- 详解SSH 框架中对象调用流程
摘要:SSH=Struts+Spring+Hibernate SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用 ...
- SSH框架的简单示例(执行流程)
本文转自一篇博文,感觉通俗易懂,适用于初学j2ee者,与大家一起分享 (一)struts框架部分 1.打开Myeclipse,创建一个web project,项目名称为TestSSH. 2.在web的 ...
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- 对于SSH框架的选择
选择框架:SSH 对于Web开发来说,SSH框架可以提高开发效率,还可以方便需求的变更以及对后期维护方面更容易操作.SSH也是目前稍微流行的Web开发框架. 选择框架描述: 首先说明一下SSH并不是一 ...
- 基于ssh框架开发的购物系统的质量属性
根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...
- SSH框架总结
首先,SSH是由多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责 ...
- SSH框架应用解析
一.什么是SSH SSH 不仅仅只是一个框架,而是由多个框架集成而来,是 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架,结构清晰.可复用性好. ...
随机推荐
- 使用rpm命令卸载程序
步骤1.rpm -qa|grep 程序名称 步骤2.rpm -e 安装包名称 --nodeps
- iOS求职之OC面试题
1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议. 2.#import和#include的区别是什么?#import<> 跟 #im ...
- C# .net windows服务启动多个服务 ServiceBase
在windows服务中想要启动多个服务 ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { // new SyncServ ...
- (转)PhoneGap工作原理及需改进的地方
原文:http://mobile.51cto.com/web-330900.htm PhoneGap工作原理及需改进的地方 2012-04-18 16:42 佚名 网络整理 字号:T | T 目前开发 ...
- Unity3D之实现背景的无限重复生成
在制作flappyBird这个小游戏中(摄像机为Orthographic),为了无限重复生成背景,可以先做好三个背景(我做的有点小),在Gamecontroller上挂一个脚本,如下: pu ...
- 2015百度之星1002 查找有序序列(RMQ+主席树模板水过)
题意:求在数列中能找到几个个长度为k 的区间,里面的 k 个数字排完序后是连续的. 思路:枚举范围,判断区间内是否有重复的数字(主席树),没有的话求区间最大-区间最小(RMQ),判断是否等于K,是的话 ...
- 第三个Sprint冲刺第一天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:再度强化四则运算app的功能.
- 无锁队列以及ABA问题
队列是我们非常常用的数据结构,用来提供数据的写入和读取功能,而且通常在不同线程之间作为数据通信的桥梁.不过在将无锁队列的算法之前,需要先了解一下CAS(compare and swap)的原理.由于多 ...
- 腾讯优测优分享 | 探索react native首屏渲染最佳实践
腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...
- 关于kindeditor中点击图片后,滚动条往上顶的bug
比如现在我插入两张图片, 无论我点击哪张图片,里边的滚动条都会往上顶. 本来以为往上会有解决方法,一查结果没有:然后想着去官网查查,然而什么都没有,想到官网提交这个bug,结果没地方提交. 怎么解决, ...