`

s2sh整合<二>

阅读更多

这里我们需要使用spring的ioc将DAO诸如到service中,所以不要忘记在service实现类中加入DAO作为属性。
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. }  
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. }  
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>  
<%@ 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>  
<%@ 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>  
<action name="savePerson" class="savePersonAction">
	<result name="success" type="redirect">/save-success.jsp</result>
	<result name="input">/save.jsp</result>
</action>


由于现在的action的创建已经由spring所接管,所以这里class里面使用的是别名,该别名与applicationContext.xml中的id对应.

接下来我们需要配置applicationContext的ioc。

Xml代码 复制代码
  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>  
<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>


这里说明一下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,始终带着这个错误,所以就提交不过去了。

到目前为止这个整合已经完成了。

分享到:
评论

相关推荐

    S2SH整合 S2SH整合

    S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...

    S2SH整合完美教程

    【S2SH整合完美教程】 在Java Web开发中,Struts2、Spring和Hibernate的整合是常见的技术栈,被广泛用于构建MVC架构的应用程序。S2SH整合旨在实现业务逻辑与控制层、持久化层的高效协同,提高代码的可维护性和可...

    s2sh整合所需jar包大全

    **S2sh整合所需jar包大全** 在Java Web开发领域,Struts 2、Spring 和 Hibernate(简称S2SH)是一种常见的集成框架,用于构建高效、可维护的企业级应用程序。这个压缩包“s2sh整合所需jar包大全”提供了一整套支持...

    s2sh整合实例

    **S2SH整合详解** S2SH,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中一种常见的框架组合,用于构建高效、可维护的Web应用程序。这三个框架分别负责不同的职责:Struts2作为MVC(模型-视图-控制器)...

    S2SH框架整合

    #### 二、S2SH框架整合步骤 ##### 1. 建立工程项目 - 首先创建一个新的Java Web项目,例如文中提到的"MyS2SH"项目,并设置好项目的目录结构。 - ![图片说明](pic) ##### 2. 添加Spring框架 - 使用...

    S2SH整合报错

    ### S2SH整合报错分析及解决方法 #### 背景介绍 在进行S2SH(Struts+Spring+Hibernate)项目的开发过程中,开发者可能会遇到整合层面的问题,特别是当项目涉及多种框架协同工作时。本文将针对一个具体的错误信息...

    S2SH 整合 导入即可完整包

    **S2SH整合详解** S2SH,全称为Spring、Struts、Hibernate的组合,是经典的Java Web开发框架。这个框架结合了Spring的依赖注入、事务管理,Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具,为开发者...

    S2SH整合精华版

    ### S2SH整合精华版:Struts 2、Spring 2、Hibernate 3集成实践 #### 关键词:Struts2、Spring2、Hibernate3 本文档旨在介绍如何利用Struts 2、Spring 2 和 Hibernate 3进行系统集成开发,并提供了一套完整的实践...

    S2SH整合分析

    ### S2SH框架整合分析 #### 一、概述 S2SH框架整合是指将Struts2(Struts)、Spring和Hibernate三个技术框架进行整合的一种应用架构模式。这种整合旨在简化企业级Java应用开发过程,提高代码复用性,并增强系统的可...

    s2sh整合完全包

    【标题】"s2sh整合完全包"指的是一个包含了所有必要组件的压缩文件,用于支持基于Struts2、Spring和Hibernate(简称s2sh)的Web应用开发。这个包简化了开发过程,因为它包含了这三个框架的库文件,使得开发者无需...

    s2sh整合demo源码

    在S2SH整合中,Hibernate 3.5.6版本作为ORM(对象关系映射)工具,允许开发者通过对象模型来操作数据库,而无需编写SQL。它支持懒加载、缓存策略和复杂查询,使得数据库操作更加便捷。 **整合过程** S2SH的整合...

    s2sh整合详细jar

    本压缩包"**s2sh整合详细jar**"显然是一份包含了这三个框架核心组件的集合,旨在帮助初学者快速搭建SSH整合环境。以下是对每个框架及其整合细节的详细解释: 1. **Struts2**:Struts2是一个基于MVC设计模式的Java ...

    S2SH整合demo

    这三者结合,被称为S2SH整合,能够构建出高效、灵活且可维护的Java Web应用程序。 **Struts2框架**: Struts2是Struts1的升级版,它引入了拦截器(Interceptor)的概念,增强了动作(Action)与结果(Result)的...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    ### 使用配置文件对DAO层封装具有分页功能的S2SH整合实例 #### 背景及概述 本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的...

    S2SH整合开发详细二

    `&lt;controller&gt;`元素配置了Spring的DelegatingRequestProcessor,使得Struts可以委托Spring来创建Action对象,这样就不需要在每个Action中显式声明类型。`&lt;plug-in&gt;`元素配置了`ContextLoaderPlugIn`插件,它用于初始...

    基于Annotation的s2sh整合配置实现分页功能

    基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能

    s2sh框架整合

    在S2SH整合中,Spring作为中心枢纽,可以管理Struts2的Action实例,实现依赖注入,同时也可以配置Hibernate的数据源和SessionFactory。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java...

    完整的S2SH框架整合, 带jar包

    这个“完整的S2SH框架整合,带jar包”资源包含了这些框架的核心库,以及可能的一个实例项目,旨在帮助开发者快速搭建和理解S2SH的应用。 1. **Struts**:Struts 是一个基于MVC设计模式的Web应用框架,主要用于控制...

    s2sh整合实现增删改查源代码(带s2sh整合包)

    这个压缩包提供了实现增删改查功能的源代码,以及完整的S2SH整合包,使得开发者可以直接运行项目,无需从零开始配置环境。 **Struts2** 是一个基于MVC设计模式的Action驱动框架,它负责处理用户的请求,并通过...

    s2sh整合所需 辅助包

    s2sh整合 所需其他jar包 打包下载 spring-dao.jar mysql-connector-java-5.1.6-bin.jar commons-dbcp.jar cglib-nodep.jar

Global site tag (gtag.js) - Google Analytics