- 浏览: 410852 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (347)
- java基础 (58)
- ajax (10)
- s2sh (10)
- 版本控制 (4)
- 数据库 (34)
- 服务器 (4)
- 开发工具 (8)
- javascript (15)
- soockte (5)
- ext (2)
- 环境搭建 (7)
- struts2 (9)
- 找工作中的面试技巧 (2)
- 承接网站零活 (0)
- JNI+JONSE+OGNL (8)
- 性能优化 (4)
- Android开发 (5)
- xul (8)
- jquery (2)
- 线程 (3)
- jsp+jdbc (7)
- servlet (2)
- java对xml操作 (1)
- IO流的操作 (10)
- 项目开发前配置 (1)
- css (0)
- 上传、下载 (2)
- 知识探讨 (2)
- html (2)
- HQL (0)
- 工作技巧 (1)
- IT (1)
- Hibernate杂谈 (10)
- Spring杂谈 (35)
- DWR (5)
- JUnit测试 (3)
- EasyMock测试web (1)
- ibatis (6)
- maysql (5)
- C++ (0)
- 正则表达式(解剖) (1)
- 密码安全 (2)
- 上传 (1)
- socket (1)
- jni(java与c++结合) (1)
- jdk版本问题 (0)
- tomcat版本问题 (5)
- linux基本命令(初学) (7)
- linux项目发布 (1)
- 3年的经验总结 (1)
- 加解密 (2)
- 高级java阶段 (2)
- java内存分区 (1)
- 浏览器 (1)
- 职业规划 (1)
- 管理 (5)
- java语音 (1)
- SSH (1)
- jsp (3)
- extjs (1)
- uml (2)
- 加密 (1)
- web (2)
- Ant (1)
- 自述 (1)
- Linux (1)
- ssh源码解剖 (1)
- 代码优化 (1)
- 设计模式 (0)
- xml (2)
- JOSN (1)
- scala (0)
- hadoop (0)
- spark (0)
- hana (1)
- shior (1)
- java Word (6)
- java PDF (4)
- java Excel (0)
最新评论
-
高级java工程师:
ztao2333 写道谢谢。收藏下这个总结。呵呵
温习jdk和tomcat -
ztao2333:
大写的,不是大学的
温习jdk和tomcat -
ztao2333:
谢谢。收藏下这个总结。
温习jdk和tomcat -
the_small_base_:
你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢
java实现语音 -
高级java工程师:
文思涌动 写道楼主新年好。可否再传一遍给我,我没有收到, 不清 ...
s2sh整合
这里我们需要使用spring的ioc将DAO诸如到service中,所以不要忘记在service实现类中加入DAO作为属性。
PersonServiceImpl.java
Java代码
Java代码
(6)接下来我们开始对action层进行设置,实际项目中的action可能会有很多,所以我们这里需要对action进行分包,因为我们这里针对Person进行操作,所以我们创建test.s2sh.action.person.
这里先做保存操作
SavePersonAction.java
Java代码
下面创建一个保存人员的提交页面
save.jsp
Java代码
操作成功页面
save-success.jsp
Java代码
Java代码
接下来我们需要配置struts.xml,创建action
Xml代码
由于现在的action的创建已经由spring所接管,所以这里class里面使用的是别名,该别名与applicationContext.xml中的id对应.
接下来我们需要配置applicationContext的ioc。
Xml代码
这里说明一下spring中的单例与设计模式中的单例不同,设计模式的单例是在jvm中只产生一个实例,而spring中的单例
是针对每个ioc容器来言,如果存在两个ioc容器,那么每个ioc容器都会生成唯一的类实例
将sessionFactory注入Dao中,这里的Dao来说是无状态的,可以设置为单例singleton。这里的action是使用spring创建的。
struts2与struts1的action有所不同,因为struts2中的action中可能存在属性,这里是Person,所以struts2的action可能是有状态的。
如果是有状态的我们就需要将scope设置成原型模式,即每次请求都新建一个action。
不然可能会出现如果表单提交的第一次出错,之后就再也提交不过去了,值就是应为使用默认的singleton,
当第一次的时候就将FieldError中加入了错误,每次都是这个action,始终带着这个错误,所以就提交不过去了。
PersonServiceImpl.java
Java代码
1.package test.s2sh.service.impl; 2. 3.import java.util.List; 4. 5.import test.s2sh.bean.Person; 6.import test.s2sh.dao.PersonDAO; 7.import test.s2sh.service.PersonService; 8. 9.public class PersonServiceImpl implements PersonService { 10. private PersonDAO personDAO; 11. public void delete(Person p) { 12. this.personDAO.removePerson(p); 13. } 14. 15. public List<Person> findAll() { 16. return this.personDAO.findAllPersons(); 17. } 18. 19. public Person findById(Integer id) { 20. return this.personDAO.findPersonById(id); 21. } 22. 23. public void save(Person p) { 24. this.personDAO.savePerson(p); 25. } 26. 27. public void update(Person p) { 28. this.personDAO.updatePerson(p); 29. } 30. 31. public PersonDAO getPersonDAO() { 32. return personDAO; 33. } 34. 35. public void setPersonDAO(PersonDAO personDAO) { 36. this.personDAO = personDAO; 37. } 38. 39.}
Java代码
1.package test.<SPAN class=hilite1>s2sh</SPAN>.service.impl; 2. 3.import java.util.List; 4. 5.import test.<SPAN class=hilite1>s2sh</SPAN>.bean.Person; 6.import test.<SPAN class=hilite1>s2sh</SPAN>.dao.PersonDAO; 7.import test.<SPAN class=hilite1>s2sh</SPAN>.service.PersonService; 8. 9.public class PersonServiceImpl implements PersonService { 10. private PersonDAO personDAO; 11. public void delete(Person p) { 12. this.personDAO.removePerson(p); 13. } 14. 15. public List<Person> findAll() { 16. return this.personDAO.findAllPersons(); 17. } 18. 19. public Person findById(Integer id) { 20. return this.personDAO.findPersonById(id); 21. } 22. 23. public void save(Person p) { 24. this.personDAO.savePerson(p); 25. } 26. 27. public void update(Person p) { 28. this.personDAO.updatePerson(p); 29. } 30. 31. public PersonDAO getPersonDAO() { 32. return personDAO; 33. } 34. 35. public void setPersonDAO(PersonDAO personDAO) { 36. this.personDAO = personDAO; 37. } 38. 39.}
package test.s2sh.service.impl; import java.util.List; import test.s2sh.bean.Person; import test.s2sh.dao.PersonDAO; import test.s2sh.service.PersonService; public class PersonServiceImpl implements PersonService { private PersonDAO personDAO; public void delete(Person p) { this.personDAO.removePerson(p); } public List<Person> findAll() { return this.personDAO.findAllPersons(); } public Person findById(Integer id) { return this.personDAO.findPersonById(id); } public void save(Person p) { this.personDAO.savePerson(p); } public void update(Person p) { this.personDAO.updatePerson(p); } public PersonDAO getPersonDAO() { return personDAO; } public void setPersonDAO(PersonDAO personDAO) { this.personDAO = personDAO; } }
(6)接下来我们开始对action层进行设置,实际项目中的action可能会有很多,所以我们这里需要对action进行分包,因为我们这里针对Person进行操作,所以我们创建test.s2sh.action.person.
这里先做保存操作
SavePersonAction.java
Java代码
1.package test.s2sh.action.person; 2. 3.import test.s2sh.bean.Person; 4.import test.s2sh.service.PersonService; 5. 6.import com.opensymphony.xwork2.ActionSupport; 7. 8.public class SavePersonAction extends ActionSupport { 9. private Person p; 10. private PersonService service; 11. public Person getP() { 12. return p; 13. } 14. public void setP(Person p) { 15. this.p = p; 16. } 17. public PersonService getService() { 18. return service; 19. } 20. public void setService(PersonService service) { 21. this.service = service; 22. } 23. 24. public String execute() throws Exception { 25. this.service.save(p); 26. return this.SUCCESS; 27. } 28. 29. public void validate() { 30. if(p.getName()==null||"".equals(p.getName())){ 31. this.addFieldError("p.name", "name is not null"); 32. } 33. } 34. 35.} Java代码 1.package test.<SPAN class=hilite1>s2sh</SPAN>.action.person; 2. 3.import test.<SPAN class=hilite1>s2sh</SPAN>.bean.Person; 4.import test.<SPAN class=hilite1>s2sh</SPAN>.service.PersonService; 5. 6.import com.opensymphony.xwork2.ActionSupport; 7. 8.public class SavePersonAction extends ActionSupport { 9. private Person p; 10. private PersonService service; 11. public Person getP() { 12. return p; 13. } 14. public void setP(Person p) { 15. this.p = p; 16. } 17. public PersonService getService() { 18. return service; 19. } 20. public void setService(PersonService service) { 21. this.service = service; 22. } 23. 24. public String execute() throws Exception { 25. this.service.save(p); 26. return this.SUCCESS; 27. } 28. 29. public void validate() { 30. if(p.getName()==null||"".equals(p.getName())){ 31. this.addFieldError("p.name", "name is not null"); 32. } 33. } 34. 35.}
package test.s2sh.action.person; import test.s2sh.bean.Person; import test.s2sh.service.PersonService; import com.opensymphony.xwork2.ActionSupport; public class SavePersonAction extends ActionSupport { private Person p; private PersonService service; public Person getP() { return p; } public void setP(Person p) { this.p = p; } public PersonService getService() { return service; } public void setService(PersonService service) { this.service = service; } public String execute() throws Exception { this.service.save(p); return this.SUCCESS; } public void validate() { if(p.getName()==null||"".equals(p.getName())){ this.addFieldError("p.name", "name is not null"); } } }
下面创建一个保存人员的提交页面
save.jsp
Java代码
1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2.<%@ taglib prefix="s" uri="/struts-tags" %> 3. 4.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5.<html> 6. <head> 7. 8. <title>Save Person</title> 9. 10. </head> 11. 12. <body> 13. <s:form action="savePerson"> 14. <s:textfield name="p.name" label="name"></s:textfield> 15. <s:textfield name="p.age" label="age"></s:textfield> 16. <s:submit></s:submit> 17. </s:form> 18. </body> 19.</html> Java代码 1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2.<%@ taglib prefix="s" uri="/struts-tags" %> 3. 4.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5.<html> 6. <head> 7. 8. <title>Save Person</title> 9. 10. </head> 11. 12. <body> 13. <s:form action="savePerson"> 14. <s:textfield name="p.name" label="name"></s:textfield> 15. <s:textfield name="p.age" label="age"></s:textfield> 16. <s:submit></s:submit> 17. </s:form> 18. </body> 19.</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Save Person</title> </head> <body> <s:form action="savePerson"> <s:textfield name="p.name" label="name"></s:textfield> <s:textfield name="p.age" label="age"></s:textfield> <s:submit></s:submit> </s:form> </body> </html>
操作成功页面
save-success.jsp
Java代码
1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2. 3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4.<html> 5. <head> 6. <title>Save OK</title> 7. </head> 8. 9. <body> 10. 保存成功 <br> 11. </body> 12.</html>
Java代码
1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2. 3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4.<html> 5. <head> 6. <title>Save OK</title> 7. </head> 8. 9. <body> 10. 保存成功 <br> 11. </body> 12.</html> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Save OK</title> </head> <body> 保存成功 <br> </body> </html>
接下来我们需要配置struts.xml,创建action
Xml代码
1.<action name="savePerson" class="savePersonAction"> 2. <result name="success" type="redirect">/save-success.jsp</result> 3. <result name="input">/save.jsp</result> 4.</action> Xml代码 1.<action name="savePerson" class="savePersonAction"> 2. <result name="success" type="redirect">/save-success.jsp</result> 3. <result name="input">/save.jsp</result> 4.</action> <action name="savePerson" class="savePersonAction"> <result name="success" type="redirect">/save-success.jsp</result> <result name="input">/save.jsp</result> </action> 1.<bean id="personDAO" class="test.s2sh.dao.impl.PersonDAOImpl" scope="singleton"> 2. <!-- 由于该类是继承于HibernateDaoSupport,所以需要将sessionFactory注入 --> 3. <property name="sessionFactory" > 4. <ref bean="sessionFactory"/> 5. </property> 6.</bean> 7.<bean id="personService" class="test.s2sh.service.impl.PersonServiceImpl"> 8. <property name="personDAO" ref="personDAO"></property> 9.</bean> 10.<bean id="savePersonAction" class="test.s2sh.action.person.SavePersonAction" scope="prototype"> 11. <property name="service" ref="personService"></property> 12.</bean> Xml代码 1.<bean id="personDAO" class="test.<SPAN class=hilite1>s2sh</SPAN>.dao.impl.PersonDAOImpl" scope="singleton"> 2. <!-- 由于该类是继承于HibernateDaoSupport,所以需要将sessionFactory注入 --> 3. <property name="sessionFactory" > 4. <ref bean="sessionFactory"/> 5. </property> 6.</bean> 7.<bean id="personService" class="test.<SPAN class=hilite1>s2sh</SPAN>.service.impl.PersonServiceImpl"> 8. <property name="personDAO" ref="personDAO"></property> 9.</bean> 10.<bean id="savePersonAction" class="test.<SPAN class=hilite1>s2sh</SPAN>.action.person.SavePersonAction" scope="prototype"> 11. <property name="service" ref="personService"></property> 12.</bean> <bean id="personDAO" class="test.s2sh.dao.impl.PersonDAOImpl" scope="singleton"> <!-- 由于该类是继承于HibernateDaoSupport,所以需要将sessionFactory注入 --> <property name="sessionFactory" > <ref bean="sessionFactory"/> </property> </bean> <bean id="personService" class="test.s2sh.service.impl.PersonServiceImpl"> <property name="personDAO" ref="personDAO"></property> </bean> <bean id="savePersonAction" class="test.s2sh.action.person.SavePersonAction" scope="prototype"> <property name="service" ref="personService"></property> </bean>
由于现在的action的创建已经由spring所接管,所以这里class里面使用的是别名,该别名与applicationContext.xml中的id对应.
接下来我们需要配置applicationContext的ioc。
Xml代码
这里说明一下spring中的单例与设计模式中的单例不同,设计模式的单例是在jvm中只产生一个实例,而spring中的单例
是针对每个ioc容器来言,如果存在两个ioc容器,那么每个ioc容器都会生成唯一的类实例
将sessionFactory注入Dao中,这里的Dao来说是无状态的,可以设置为单例singleton。这里的action是使用spring创建的。
struts2与struts1的action有所不同,因为struts2中的action中可能存在属性,这里是Person,所以struts2的action可能是有状态的。
如果是有状态的我们就需要将scope设置成原型模式,即每次请求都新建一个action。
不然可能会出现如果表单提交的第一次出错,之后就再也提交不过去了,值就是应为使用默认的singleton,
当第一次的时候就将FieldError中加入了错误,每次都是这个action,始终带着这个错误,所以就提交不过去了。
发表评论
-
struts2配置详解
2011-11-17 10:15 1456struts 2 配置详解 2010-03-02 22:44 ... -
web.xml配置详细说明
2011-11-17 10:03 755配置web.xml,配置Struts2的过滤器 2010-0 ... -
web.xml配置详细说明
2011-11-17 10:02 995配置web.xml,配置Struts2的过滤器 2010-0 ... -
s2sh整合
2011-09-20 22:11 2949最近的struts2-hibernate -spring整合开 ... -
S2sh开发步骤以及思路
2011-04-25 10:20 988ssh项目开发思路 创建数据库表 建立公共关系类(bean ... -
struts+spring整合4种方法
2011-01-27 19:26 801struts spring 整合 论坛中用Struts+Sp ... -
struts2的开发搭建
2011-01-27 19:21 766Struts2概述 在S ... -
s2sh实现上传下载
2011-01-27 19:19 1126首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 圈子 ... -
s2sh整合<一>
2011-01-27 16:17 898Struts 2,Spring 2,Hibernate 整合 ...
相关推荐
S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...
【S2SH整合完美教程】 在Java Web开发中,Struts2、Spring和Hibernate的整合是常见的技术栈,被广泛用于构建MVC架构的应用程序。S2SH整合旨在实现业务逻辑与控制层、持久化层的高效协同,提高代码的可维护性和可...
**S2sh整合所需jar包大全** 在Java Web开发领域,Struts 2、Spring 和 Hibernate(简称S2SH)是一种常见的集成框架,用于构建高效、可维护的企业级应用程序。这个压缩包“s2sh整合所需jar包大全”提供了一整套支持...
**S2SH整合详解** S2SH,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中一种常见的框架组合,用于构建高效、可维护的Web应用程序。这三个框架分别负责不同的职责:Struts2作为MVC(模型-视图-控制器)...
#### 二、S2SH框架整合步骤 ##### 1. 建立工程项目 - 首先创建一个新的Java Web项目,例如文中提到的"MyS2SH"项目,并设置好项目的目录结构。 - ![图片说明](pic) ##### 2. 添加Spring框架 - 使用...
### S2SH整合报错分析及解决方法 #### 背景介绍 在进行S2SH(Struts+Spring+Hibernate)项目的开发过程中,开发者可能会遇到整合层面的问题,特别是当项目涉及多种框架协同工作时。本文将针对一个具体的错误信息...
**S2SH整合详解** S2SH,全称为Spring、Struts、Hibernate的组合,是经典的Java Web开发框架。这个框架结合了Spring的依赖注入、事务管理,Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具,为开发者...
### S2SH整合精华版:Struts 2、Spring 2、Hibernate 3集成实践 #### 关键词:Struts2、Spring2、Hibernate3 本文档旨在介绍如何利用Struts 2、Spring 2 和 Hibernate 3进行系统集成开发,并提供了一套完整的实践...
### S2SH框架整合分析 #### 一、概述 S2SH框架整合是指将Struts2(Struts)、Spring和Hibernate三个技术框架进行整合的一种应用架构模式。这种整合旨在简化企业级Java应用开发过程,提高代码复用性,并增强系统的可...
【标题】"s2sh整合完全包"指的是一个包含了所有必要组件的压缩文件,用于支持基于Struts2、Spring和Hibernate(简称s2sh)的Web应用开发。这个包简化了开发过程,因为它包含了这三个框架的库文件,使得开发者无需...
在S2SH整合中,Hibernate 3.5.6版本作为ORM(对象关系映射)工具,允许开发者通过对象模型来操作数据库,而无需编写SQL。它支持懒加载、缓存策略和复杂查询,使得数据库操作更加便捷。 **整合过程** S2SH的整合...
本压缩包"**s2sh整合详细jar**"显然是一份包含了这三个框架核心组件的集合,旨在帮助初学者快速搭建SSH整合环境。以下是对每个框架及其整合细节的详细解释: 1. **Struts2**:Struts2是一个基于MVC设计模式的Java ...
这三者结合,被称为S2SH整合,能够构建出高效、灵活且可维护的Java Web应用程序。 **Struts2框架**: Struts2是Struts1的升级版,它引入了拦截器(Interceptor)的概念,增强了动作(Action)与结果(Result)的...
### 使用配置文件对DAO层封装具有分页功能的S2SH整合实例 #### 背景及概述 本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的...
`<controller>`元素配置了Spring的DelegatingRequestProcessor,使得Struts可以委托Spring来创建Action对象,这样就不需要在每个Action中显式声明类型。`<plug-in>`元素配置了`ContextLoaderPlugIn`插件,它用于初始...
基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能
在S2SH整合中,Spring作为中心枢纽,可以管理Struts2的Action实例,实现依赖注入,同时也可以配置Hibernate的数据源和SessionFactory。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java...
这个“完整的S2SH框架整合,带jar包”资源包含了这些框架的核心库,以及可能的一个实例项目,旨在帮助开发者快速搭建和理解S2SH的应用。 1. **Struts**:Struts 是一个基于MVC设计模式的Web应用框架,主要用于控制...
这个压缩包提供了实现增删改查功能的源代码,以及完整的S2SH整合包,使得开发者可以直接运行项目,无需从零开始配置环境。 **Struts2** 是一个基于MVC设计模式的Action驱动框架,它负责处理用户的请求,并通过...
s2sh整合 所需其他jar包 打包下载 spring-dao.jar mysql-connector-java-5.1.6-bin.jar commons-dbcp.jar cglib-nodep.jar