天热,外面火辣辣的太阳实在是不扛不住.昨晚吃了泡面折腾了下.今天喉咙就犯病了.疼痛难受.一个人又闲的蛋疼.她昨晚说今天到欢乐谷去玩了.也没人来陪我.一天不写代码手痒.今天就又到公司了.
折腾了下当前最新版本的struts2+spring3+hibernate(jpa)应用的大型网站架构.用到的一些jar包就不折腾了不是很熟悉的可以直接call我了.这里主要是说其三个框架的整合配置文件:
1.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">
<display-name>itcastShop</display-name>
<!--
指定spring的配置文件,默認從web根目錄尋找配置文件,我們可以通過Spring提供的classpath:前綴指定從累路勁下尋找
-->
<context-param>
<!-- 应用路径Spring上下文 配置 -->
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath:applicationContext.xml</param-value> -->
<param-value>
/WEB-INF/classes/**/applicationContext*.xml
</param-value>
</context-param>
<!-- Spring的监听 对Spring容器进行实例化 ,并把實例化存放在application的屬性中-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>entityManagerFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--在做上传文件的时候,要在web.xml中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况-->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<!-- 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>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- 日志文件 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.applicationContext.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">
<!--<aop:aspectj-autoproxy/>-->
<context:annotation-config />
<context:component-scan base-package="cn.itcast" />
<context:property-placeholder location="classpath:jdbc.properties" />
<!--
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
-->
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 数据库连接池启动时的初始值 -->
<property name="initialSize" value="${jdbc.initialSize}" />
<!-- 连接池的最大值 -->
<property name="maxActive" value="${jdbc.maxActive}" />
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="${jdbc.maxIdle}" />
<!-- 最小空闲值,当空闲的连接数少于阀值时,连接池就会去申请一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="${jdbc.minIdle}" />
<property name="maxWait" value="${jdbc.maxWait}" />
<property name="poolPreparedStatements" value="true" />
<property name="defaultAutoCommit" value="true" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 注入数据源bean到实体管理工厂bean -->
<property name="dataSource" ref="dataSource" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="persistenceUnitName" value="travel" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<!-- 注入实体管理工厂bean到事务管理bean -->
<!-- 这是事务定义,而且是使用注解方式定义事务(@Transactional),proxy-target-class="true"表示采用动态代理类来管理事务,
如果是false表示采用接口代理来管理事务(默认值为false)。
-->
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- 事务声明方式注解 -->
<!-- Activates @Transactional for DefaultImageDatabase -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 上面这个就是使用配置式来定义事务,两种方式的区别主要是,注解式只用写那么一句话,然后在业务类或方法中加入@Transactional这个注解标记,就完成事务声明,
不过对于每个业务类都需要在类或方法中加入这些标记。而配置式声明,就是不用加这些标记,只要你的方法名称命名比较统一,就可以像上面这样定义事务规范,
然后在aop标签中定义切入点与执行通知就行了。我感觉如果业务逻辑不是太复杂的情况,配置式会比较简单,而且修改起来也方便,这两种方式我都写出来了,
至于用哪一种,由你们自己决定。
<aop:config >
<aop:pointcut id="transactionPointcut" expression="execution(* cn.dykj.example.service..*Manager.*(..))"/>
<aop:pointcut id="transactionDao" expression = "execution(* cn.dykj.example.dao..*Dao.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionDao"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
-->
</beans>
3.persistence.xml
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="travel" transaction-type="RESOURCE_LOCAL">
<!--
实体bean集合名字
-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!--
JPA驱动提供者
-->
<class>cn.itcast.bean.user.Buyer</class>
<class>cn.itcast.bean.user.ContactInfo</class>
<!--
<class>cn.itcast.bean.product.ProductInfo</class>
<class>cn.itcast.bean.product.ProductStyle</class>
<class>cn.itcast.bean.product.ProductType</class>
<class>cn.itcast.bean.product.Brand</class>
-->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.jdbc.fetch_size" value="18" />
<property name="hibernate.jdbc.batch_size" value="10" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
4.这里连接数据库是jdbc jdbc.properties
jdbc.driverClassName = org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://localhost:3306/travel?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
jdbc.initialSize=1
jdbc.maxActive=500
jdbc.maxIdle=2
jdbc.minIdle=1
jdbc.maxWait=1000
把项目架好配置一些基本的配置就ok了...
分享到:
相关推荐
总之,"SSH-JPA.ZIP"提供的实例对于想要深入了解SSH框架与JPA集成的开发者来说,是一个非常有价值的参考资料,涵盖了从基本概念到实际应用的多个层面。通过深入研究这个实例,开发者可以提升自己的Java Web开发技能...
代码生成器读取数据库中的表结构,根据预设的模板自动生成对应的实体类(对应数据库表)、DAO接口及其实现、Service接口及其实现、Struts2的动作类以及相关的配置文件(如Struts配置、Spring配置、JPA实体配置等)。...
JBoss是Red Hat公司的开源应用服务器,支持多种Java EE规范,包括EJB、JMS、JPA等,为SSH和jbpm5.4提供了一个运行环境。 学习和理解SSH+jBPM5.4的项目,你需要掌握以下关键点: 1. Spring框架的基本概念和核心特性...
在SSH框架中集成JPA,我们可以利用Spring的数据访问抽象层,通过配置来启用JPA支持。 注解在JPA中的使用极大地简化了数据库模型的定义。例如,我们可以使用@Entity注解标记一个类作为实体,@Table注解指定对应的...
### Struts2 + Spring3.x + JPA1.0框架整合步骤详解 #### 一、引言 随着软件工程的发展,MVC(Model-View-Controller)架构模式因其清晰的分层逻辑而在Web开发领域中得到了广泛的应用。本文将详细介绍如何整合...
通过这样的配置,开发者可以快速搭建一个支持基本CRUD操作和分页查询的应用。实际开发中,还可以考虑引入MyBatis或JPA等其他ORM工具,以及Spring Boot和Spring Data等现代框架,以简化配置和提升开发效率。
在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...
5. **配置文件**:SSH2项目中的配置文件包括Struts2的`struts.xml`、Spring的`applicationContext.xml`和Hibernate的`hibernate.cfg.xml`。这些文件定义了框架的行为,如Action的映射、Bean的定义、数据源和实体类的...
- `spring-webmvc.jar`: 提供了Spring的MVC框架,与Struts2类似但提供了更灵活的配置。 - `spring-aop.jar`: 支持AOP编程,包括切点、通知等。 - `spring-aspects.jar`: 与 AspectJ 集成,提供更强大的AOP功能。 ...
SSH1和SSH2分别代表了该框架的两个不同版本。在本文中,我们将深入探讨SSH框架的基本概念,以及如何利用它们来实现CRUD(创建、读取、更新和删除)操作。 **SSH1整合实例** SSH1指的是Struts1、Spring1和Hibernate1...
下面将详细介绍SSH2框架的配置过程、涉及的jar包及其作用,以及如何搭建SSH框架。 1. **Struts2框架**:Struts2是基于MVC设计模式的Java Web框架,主要负责控制层。它的核心是Action类,通过配置struts.xml文件来...
- 基本 CRUD 操作:通过继承 `JpaRepository` 的接口,如 `MyEntityRepository`,可以直接使用 `save()`, `findAll()`, `findById()`, `deleteById()` 等方法。 - 动态查询:利用 `JpaSpecificationExecutor` 接口...
这85个jar包涵盖了SSH框架整合所需的基础库和依赖,开发者可以通过它们搭建起一个基本的SSH项目,并进行后续的开发和扩展。在实际项目中,还需要结合具体需求和环境选择合适的版本,并可能需要添加额外的库以支持更...
SSH2框架,全称为Spring、Struts2和Hibernate2,是Java Web开发中常见的MVC(Model-View-Controller)架构的实现。...在实际项目中,还可以结合其他技术和工具,如MyBatis、JPA等,进一步优化和扩展SSH2的功能。
对于初学者,推荐先学习SSH2每个组件的基本概念和使用方法,再结合实际项目进行实践。网上有许多SSH2的入门教程和示例项目,可供参考和学习。同时,不断阅读官方文档和社区讨论,能加深对这些框架的理解,提高开发...
它可能包括了基本的配置文件(如struts.xml、spring-context.xml、hibernate.cfg.xml)、Java源代码、以及Maven的pom.xml配置文件。这个简单的项目可能用于演示如何将这三个框架整合在一起,尽管其复杂度不高,但...
本压缩包"ssh2框架开发基本jar"提供了这三个框架的基础库,便于开发者进行集成开发。 **Struts 2.0** 是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它继承了Struts 1的优点并引入了更多现代特性...
在本文中,我们将详细介绍如何手动配置SSH(Struts2 2.2.1、Hibernate 3.6和Spring 3.0.5)的整合。 首先,你需要准备好以下软件和库: 1. Struts2的最新版本,这里是Struts2 2.2.1,对应的压缩包为`struts2-2.2.1...
SSH整合基本开发包是Java开发中的一个重要组成部分,SSH是指Spring、Struts和Hibernate这三个开源框架的缩写。这些框架在企业级应用开发中被广泛使用,它们分别负责控制层、表现层和持久层的管理。下面我们将详细...
以上就是基于Eclipse的SSH2框架项目的基本构建和运行流程。SSH2框架提供了强大的企业级应用开发能力,但同时也有较高的学习曲线。理解并熟练掌握这三个框架的整合,对于提升Java Web开发技能非常有帮助。