`

十八 Spring2.5+Hibernate3.3+Struts2整合开发

 
阅读更多
十八 Spring2.5+Hibernate3.3+Struts2整合开发

首先集成spring+hibernate 这方式跟十六 Spring2.5+Hibernate3.3+Struts1.3整合开发中的
spring+hibernate这步是一样的 但是不能加入spring的包时 不要把spring-webmvc-struts.jar
这个包 集成进来 这个包是用来集成struts1的

做完spring+hibernate的集成 然后做单元测试成功后 接下来就是集成struts2

第一步:让web容器去实例化spring容器  方法在web中 加入
<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的
	classpath:前缀指定从类路径下寻找 -->
<context-param>
	   <param-name>contextConfigLocation</param-name>
	   <param-value>classpath:beans.xml</param-value>
	</context-param>
<!-- 对Spring容器进行实例化 -->
<listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

第二步 加入struts2的包 当前的struts2.0.14 
使用到struts2的lib目录下所有不带-plugin结尾的jar文件,但除了struts2-spring-plugin-2.0.11.1.jar 

第三步 解决hibernate的Session会话关闭 造成例外
方法 在web.xml
中加入 
<!-- 使用spring解决hibernate因session关闭导致的延迟加载例外 -->
<filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

现在我们来看配置文件 
首先是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的
	classpath:前缀指定从类路径下寻找 -->
<context-param>
	   <param-name>contextConfigLocation</param-name>
	   <param-value>classpath:beans.xml</param-value>
	</context-param>
<!-- 对Spring容器进行实例化 -->
<listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 添加struts2-->
   <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>
<!-- 使用spring解决hibernate因session关闭导致的延迟加载例外 -->
<filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>

</filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


现在我们来看struts2的配置文件 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应用的默认编码集 相当于HttpServletRequest的setCharacterEncoding方法 处理乱码-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
   <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
    <constant name="struts.action.extension" value="do"/>
    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false"/>
    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />
     <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--表示struts2对象由spring负责创建 -->
    <constant name="struts.objectFactory" value="spring" />
 	<package name="person" namespace="/person" extends="struts-default">
 		<global-results>
 			<result name="message">/WEB-INF/page/message.jsp</result>
 		</global-results>
		<action name="action_*" class="personList" method="{1}">
			<result name="list">/WEB-INF/page/persons.jsp</result>
			<result name="add">/WEB-INF/page/add_person.jsp</result>
			<result name="edit">/WEB-INF/page/edit_person.jsp</result>
		</action>
    </package>
    
</struts>


spring的配置文件 beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<!-- 启动依赖注入 -->
	 <context:annotation-config/>
	 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
	    <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
	    <property name="username" value="root"/>
	    <property name="password" value="root"/>
	     <!-- 连接池启动时的初始值 -->
		 <property name="initialSize" value="1"/>
		 <!-- 连接池的最大值 -->
		 <property name="maxActive" value="500"/>
		 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
		 <property name="maxIdle" value="2"/>
		 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
		 <property name="minIdle" value="1"/>
	  </bean>
	  
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	     <property name="dataSource" ref="dataSource"/>
		 <property name="mappingResources">
		    <list>
		      <value>cn/itcast/bean/Person.hbm.xml</value>
		    </list>
		 </property>
	     <property name="hibernateProperties">
		    <value>
		        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
		        hibernate.hbm2ddl.auto=update
		        hibernate.show_sql=false
		        hibernate.format_sql=false
		        <!-- 配置二级缓存 -->
		        hibernate.cache.use_second_level_cache=true
		        <!-- 是否使用查询缓存 -->
       	        hibernate.cache.use_query_cache=true
       	        <!-- 配置使用缓存的驱动类 -->
        	    hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider  
		      </value>
	     </property>
	</bean>
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	  	<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	<!-- 启动事务注解管理方式 -->
	<tx:annotation-driven transaction-manager="txManager"/>
	
	<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"/>
	<bean id="personList" class="cn.itcast.web.PersonAction"></bean>
</beans>


二级缓存 ehcache的配置文件 ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    defaultCache节点为缺省的缓存策略
     maxElementsInMemory 内存中最大允许存在的对象数量
     eternal 设置缓存中的对象是否永远不过期
     overflowToDisk 把溢出的对象存放到硬盘上
     timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉
     timeToLiveSeconds 指定缓存对象总的存活时间
     diskPersistent 当jvm结束是是否持久化对象
     diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间
 -->
<ehcache>
    <diskStore path="D:\cache"/>
    <defaultCache  maxElementsInMemory="1000" eternal="false" overflowToDisk="true"
        timeToIdleSeconds="120"
        timeToLiveSeconds="180"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="60"/>
	<cache name="cn.itcast.bean.Person" maxElementsInMemory="100" eternal="false"
    overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>
</ehcache>


Person实体映射文件 Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.bean">
    <class name="Person" table="person">
    <!-- 配置缓存 并设为只读 同时设定缓存域  -->
    <!-- 缓存域的作用:可以根据缓存域在缓存的配置文件中重新配置缓存 -->
    <cache usage="read-only" region="cn.itcast.bean.Person"/>
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name" length="10" not-null="true"/>
    </class>
</hibernate-mapping>


现在我们就来测试吧 
定义一个Action
package cn.itcast.web;

import java.util.List;

import javax.annotation.Resource;

import cn.itcast.bean.Person;
import cn.itcast.service.PersonService;

public class PersonAction {
  @Resource PersonService personService;
  private String message;
  private List<Person> persons;
  private Person person;
  public Person getPerson() {
	return person;
}
public void setPerson(Person person) {
	this.person = person;
}
public String getMessage() {
	return message;
}
public void setMessage(String message) {
	this.message = message;
}
public List<Person> getPersons() {
	return persons;
}
public void setPersons(List<Person> persons) {
	this.persons = persons;
}
/**
 * 遍历人员数据
 * @return
 */
public String list(){
	this.persons=personService.getPersons();
	return "list";
  }

 public String add(){
	 personService.save(this.person);
	 this.message="添加成功";
	 return "message";
 }
 public String addUI(){
	   return "add";
 }
}



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>人员例表</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <h3>人员列表项</h3>
     <s:iterator value="persons">
     id= <s:property value="id"/>,name= <s:property value="name"/><br>
     </s:iterator>
  </body>
</html>



在浏览器输入
http://localhost:8808/S2SH/person/action_list.do

测试成功 
到这步 Spring2.5+Hibernate3.3+Struts2整合就全部完成 

spring学习全部结束!

 

分享到:
评论

相关推荐

    jbpm4整合struts2+spring2.5+hibernate3.3

    【jbpm4整合struts2+spring2.5+hibernate3.3】的集成是企业级应用开发中常见的技术栈组合,旨在利用各框架的优势实现高效、灵活的业务流程管理。jbpm4是一个开源的工作流管理系统,用于定义、执行和管理业务流程。...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    总的来说,Struts2.1、Spring2.5和Hibernate3.3的整合为开发者提供了一个强大的开发平台,可以高效地构建复杂的Java Web应用。尽管现代框架如Spring Boot已逐渐取代这种传统的整合方式,但对于理解企业级开发的底层...

    struts2+spring2.5+hibernate3.3例子(增删改)

    Struts2、Spring2.5和Hibernate3.3是经典的Java Web开发框架组合,它们各自在应用程序的不同层面提供了强大的功能。这个例子展示了如何将这三个框架整合在一起,实现一个简单的图书管理系统的增删改操作。 **Struts...

    Spring2.5+Hibernate3.3+Struts1.3整合需要用到的所有jar文件

    以上就是Spring 2.5、Hibernate 3.3和Struts 1.3整合过程中涉及的关键知识点和步骤。整合这三大框架可以构建出一个强大的Java Web应用,充分利用它们各自的优势,提高开发效率和代码质量。不过,随着技术的发展,...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    标题 "ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)" 涉及到的是一个基于Java Web的项目,利用了Struts2、Spring2.5、Hibernate3.3和Ajax技术,实现了文件上传并带有进度条显示的功能...

    Struts2+Spring2.5+Hibernate3.3整合开发

    总之,Struts2+Spring2.5+Hibernate3.3的整合开发使得开发者可以充分利用各框架的优势,构建出高效、可扩展的Java Web应用程序。在实际项目中,这种集成方式被广泛应用,也是Java开发者必须掌握的一项技能。

    Struts2+Spring2.5+hibernate3.3整合

    总结来说,Struts2+Spring2.5+Hibernate3.3整合是一个经典的Java Web开发模式,通过合理配置和集成这三个框架,可以构建出结构清晰、维护性强的企业级应用。在实际项目中,开发者需要对每个框架有深入理解,并熟练...

    Struts2+Spring2.5+Hibernate3.3整合开发附源代码

    在这个"Struts2+Spring2.5+Hibernate3.3整合开发"项目中,"需要的JAR.txt"文件很可能包含了运行项目所需的库文件列表,包括这三大框架的版本以及其他可能依赖的JAR包。SSH2可能是指该项目的源代码,其中应该包含...

    最新Struts2.1+Spring2.5+Hibernate3.3整合开发

    Struts2.1、Spring2.5和Hibernate3.3是Java Web开发中经典的三大框架,它们的整合应用是企业级应用开发中的常见实践。这三个框架的集成为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入(DI)...

    Struts2+Spring2.5+Hibernate3.3整合开发之Sring与Hibernate整合

    一、整合开发时Hibernate、Spring需要的JAR文件。 hibernate核心安装包下的(下载路径:http://www.hibernate.org/,点击“Hibernate Core”右边的“Downloads”): hibernate3.jar lib\bycode\cglib\hibernate-...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    【标题】"jsr168 portlet(struts2+spring2.5+hibernate3.3)" 是一个基于Java技术栈的Web应用程序开发示例,它利用JSR168规范来创建portlet,同时结合了Struts2、Spring2.5和Hibernate3.3这三大框架,为构建可重用、...

    Struts2+Spring2.5+Hibernate3.3 开发所需jar包

    这个压缩包包含了所有必要的jar文件,使得开发者可以直接引入到项目中,快速搭建起Struts2+Spring2.5+Hibernate3.3的基础环境,从而更专注于业务逻辑的实现。 总的来说,Struts2提供了用户交互的控制,Spring提供了...

    struts2.1+spring2.5+hibernate3.3简单登录案例

    Struts2.1+Spring2.5+Hibernate3.3是一个经典的Java Web开发技术栈,它们结合使用可以构建高效、可扩展的企业级应用程序。在这个简单的登录案例中,我们将深入理解这三个框架如何协同工作来实现用户身份验证。 ...

    Spring2.5+Hibernate3.3+strut2整合开发案例,亲自测试

    这个"Spring2.5+Hibernate3.3+Struts2整合开发案例"提供了详细的示例,帮助开发者了解如何将这三个框架协同工作,提升应用程序的开发效率和可维护性。 Spring框架作为核心的依赖注入(DI)和面向切面编程(AOP)...

    SSH搭建架构Struts2+Spring2.5+Hibernate3.3

    总结来说,SSH架构通过整合Struts2、Spring2.5和Hibernate3.3,实现了Web应用的分层开发,增强了代码的可读性和可维护性,降低了开发难度,提高了开发效率。这个框架的使用对于Java开发者来说是必备技能之一,能够...

Global site tag (gtag.js) - Google Analytics