- 浏览: 399723 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (198)
- java (28)
- J2EE (19)
- struts (33)
- sping (13)
- hibernate (18)
- mybatis (15)
- connection pool (3)
- DB (26)
- SQL (21)
- html (13)
- js (7)
- json (3)
- jquery (2)
- document (17)
- linux (15)
- C# (1)
- url (2)
- eweb4j (1)
- Turbine (1)
- 框架 (11)
- jdbcTemplate (3)
- aop (2)
- windows (2)
- ubuntu (1)
- eclipse (11)
- JPA (8)
- svn (4)
- get 传值 (2)
- mysql (5)
- oracle (2)
- hadoop (1)
- MongoDB (2)
- spring (1)
- python (1)
最新评论
-
jcbingjc:
楼主,你好,按照上面的配置,我报如下错误:Missing Pe ...
[properJavaRDP]在网页中实现远程连接 -
sucful:
折腾了半天跑不通 ,要传就搞个完整的吧
Struts2 <sx:div/>实现页面模块异步刷新 -
Kattou:
你好! 看了你写的这个分页 感觉很好, 但是不怎么会用么,请指 ...
jsp分页控件 -
我叫PSB:
地址完全用不了
eclipse中的安装 jseclipse -
1111emotion:
我的工程里还是有乱码的情况,我该改的地方都改了。
Eclipse/MyEclipse更改默认字符集 设置UTF-8
集 成struts,spring,hibernate时,对于初学者来说最大的麻烦就其繁琐的xml配置文件。现在三者都对基于注解的配置提供了良好的支 持。在struts2中,使用convent plugin,得益于annotation和规约,配置过程得以大大减少。在spring2.5也可以使用@Autowired,进行注入,使用 @Controller,@Service,@Repository注解,自动定义bean,还支持annotation风格的声明式事务支持,以及 aspectJ类似的AOP。hibernate也可以使用JPA标准注解定义实体描述,避免使用mapping文件。
当然,对于 annotation和xml风格的配置,谁更好,更多依赖个人兴趣。但使用 annotation确实减少了很多配置工作量。本文采用annotation风格的配置,以TaskList为例子讲解struts2 spring hibernate的集成。项目文件见附件。
一:配置struts2。
首先在web.xml文件中配置filter
Xml代码
<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>
</filter-mapping>
<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>
</filter-mapping>
然后在classpath中创建struts.xml配置文件。
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd
">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.convention.default.parent.package" value="default-package" />
<constant name="struts.convention.package.locators" value="action" />
<package name="default-package" extends="convention-default">
<default-action-ref name="index" />
<action name="index" >
<result>/WEB-INF/content/index.jsp</result>
</action>
</package>
</struts>
struts.devMode属性,配置启用调试,将有更多的错误信息输出,便于排错。struts.convention.default.parent.package属性,指定使用注解标注的控制器的默认包。可以在这个默认包中配置全局信息。
struts.convention.package.locators 属性,为查找控制器包路径的关键字。如com.mycompany.action,com.mycompany.action.user,都会被 struts2扫描。里面有继承至Action的类,或类名以Action结尾的类,都会做为Action处理。
<default-action-ref name="index" />指定了默认action,如果指定的action不存在则访问该action。
把 struts2-spring-plugin-2.1.6.jar添加到 classpath中,struts2会自动扫描struts-plugin.xml文件,该文件自动注册了 com.opensymphony.xwork2.ObjectFactory,完成和spring的集成。
二:配置spring
在web.xml中加入ContextLoaderListener,用以启动spring容器。用contextConfigLocation指定spring配置文件路径,可以使用*通配符结尾。
Xml代码
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>
</context-param>
配置applicationContext.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd
">
<beans>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="daoTemplate" abstract="true">
<!-- 为DAO组件注入SessionFactory引用 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="baseDaoImpl" parent="daoTemplate" class="com.cn.zfei.dao.BaseDaoImpl"/>
<bean id="userDaoImpl" parent="baseDaoImpl" class="com.cn.zfei.dao.UserDaoImpl"/>
</beans>
<context:component-scan />指定Bean扫描的包,多个包逗号隔开,任何标注了@Component,@Controller,@Service,@Repository的类,都会被自动识别为bean。
<aop:aspectj-autoproxy />声明aspectj动态代理,启用注解驱动的aspectj配置。
<tx:annotation-driven />启用注解驱动的声明事务支持。
然后定义了sessionFactory和transactionManager,hibernateTemplate用来注入到Dao中,取代继承的方式使用spring对hibernate的集成支持。
三:hibernate配置
hibernate配置独立配置,方便修改。
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
">
<hibernate-configuration>
<session-factory>
<property
name="org.hibernate.connection.ConnectionProvider">com.mchange.v2.c3p0.ComboPooledDataSource
</property><!--
C3P0连接池设定-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_phonesys</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.current_session_context_class">thread</property><!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size">5</property><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property><!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">100</property><!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property><!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">2</property><!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<mapping class="beans.User" />
</session-factory>
</hibernate-configuration>
四:BaseDao数据库操作基类
public class BaseDaoImpl extends HibernateDaoSupport {
...............
}
五:Entity实体Bean:
beans.User.java
// 生成日期:2010-10-24 08:12:32
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行库版本:1.4");
// 对此文件的更改可能会导致不正确的行为。
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
/// <summary>自动生成类</summary>
///<summary>SysUserInfo</summary>
package beans;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "sysuserinfo")
public class User implements Serializable {
///所有属性
private int id;
private String name;
private String password;
private String trueName;
private String sex;
private String phone;
private String email;
private String remark;
///所有方法
///<summary>属性id </summary>
///<summary>类型int </summary>
@GeneratedValue
@Id
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "username")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
///<summary>属性username </summary>
///<summary>类型String </summary>
///<summary>属性password </summary>
///<summary>类型String </summary>
@Column(name = "password")
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
///<summary>属性trueName </summary>
///<summary>类型String </summary>
@Column(name = "trueName")
public String getTrueName() {
return this.trueName;
}
public void setTrueName(String trueName) {
this.trueName = trueName;
}
///<summary>属性sex </summary>
///<summary>类型String </summary>
@Column(name = "sex")
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
///<summary>属性phone </summary>
///<summary>类型String </summary>
@Column(name = "phone")
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
///<summary>属性email </summary>
///<summary>类型String </summary>
@Column(name = "email")
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
///<summary>属性remark </summary>
///<summary>类型String </summary>
@Column(name = "remark")
public String getRemark() {
return this.remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
发表评论
-
SpringMvc+MyBatis+Freemarker 配置
2017-04-06 09:32 23711、引入Jar包: spring所有jar文件 my ... -
Struts2.1.8升级到Struts2.3.15.1的时候遇到了问题
2013-08-09 10:14 2010我把原来的Struts2.1.8升级到Struts2.3. ... -
struts2 url传值中文乱码解决方案
2012-09-21 16:21 1418HttpServletRequest request = Ac ... -
使用struts2中的ognl表达式调用类方法
2012-04-19 09:35 1366struts标签中value都会被解析,如,<s:pro ... -
使用struts2中的ognl表达式调用类方法(转)
2012-04-15 16:54 1284struts标签中value都会被解析,如,<s:pro ... -
Struts2 get 传值乱码过滤器配置
2012-04-15 16:31 1375package cn.org.du.Encode; im ... -
struts2 url传值中文乱码解决方案
2012-04-15 15:51 1514HttpServletRequest request ... -
Hibernate one-to-many 属性设置
2012-03-26 16:49 1314使用Hibernate提供的one-to-many来实现 ... -
struts2 result type 介绍
2012-03-23 09:14 1165在默认时,<result>标签的type属性值是“ ... -
jpa 表生成器 GenerationType.TABLE.
2012-03-15 17:38 4430将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指 ... -
cannot simultaneously fetch multiple bags异常的解决
2012-03-15 16:18 2416原文来自于http://howsun.bl ... -
JPA 实现继承关系
2012-03-15 03:14 3377JPA支持继承关系,使开发者可以利用继承的思想建模。 ... -
Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效
2012-03-08 17:43 1955问题:在Struts2中<jsp:forward pag ... -
EJB3 JPA JPQL 语句 查询 使用 函数 分页 子查询(2)
2012-03-03 16:50 1740关联(join) JPQL仍然支持和SQL中类似的 ... -
Struts2整合Spring、JPA
2012-02-27 09:46 1919一直觉得JPA很神秘,最近抽空看了下,下面贴出刚才做的St ... -
JPA查询语言之EJBQL+JPQL
2011-11-30 13:30 5067简单查询 返回所有Topic对象的记录: SELECT ... -
spring mvc 配置
2011-11-28 14:14 14361、/WEB-INF/web.xml <ser ... -
spring jdbcTemplate调用存储过程
2011-11-27 21:36 1464第一种方式: List<Map<String,Ob ... -
spring3之JdbcTemplate AOP 事务
2011-11-27 01:36 7458一、applicationContext.xml配置:定义事务 ... -
Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)
2011-11-27 01:37 1482Spring AOP代理时 ClassCastExce ...
相关推荐
集成Struts2、Spring和Hibernate时,需要注意配置文件的正确设置,包括Action配置、Spring Bean的定义、Hibernate的数据库连接和实体映射。同时,理解这三个框架的工作原理和相互作用,对于解决问题和优化代码至关...
**Struts2、Spring、Hibernate集成** 集成这三个框架可以形成强大的企业级应用开发平台。在实际项目中,通常使用Spring来管理Struts2的Action实例,通过Spring的DI实现Action类的依赖注入。同时,Spring负责管理...
6. 实体类(Entity):对应数据库表的Java类,使用Hibernate注解。 7. DAO接口及实现:处理数据库操作,例如UserDAO。 8. Service接口及实现:封装业务逻辑,例如UserService。 9. Action类:处理用户请求,例如...
本项目"Struts+Spring+Hibernate注解零配置整合"的目标是展示如何通过注解方式实现这三大框架的无缝集成,从而减少XML配置文件的使用,提高开发效率和代码可读性。 在传统的Struts、Spring和Hibernate整合中,大量...
SSH框架,即Struts2、Hibernate和Spring的组合,是Java Web开发中广泛使用的三大开源框架。它们各自负责Web应用程序的不同层面,通过整合可以提供一套完整的解决方案,实现MVC(Model-View-Controller)设计模式,...
2. 集成Spring:在Struts2中使用Spring插件,通过注解或XML配置将Action类交由Spring管理,实现依赖注入。同时,配置Spring的ApplicationContext,定义Bean和依赖关系。 3. 集成Hibernate:在Spring配置文件中配置...
开发者可能会在该文件中找到一个简单的Struts2 Action,一个带有注解的Spring Bean,以及一个用Hibernate注解配置的实体类。通过分析和运行这个`test`文件,可以更好地理解三大框架如何协同工作,以及注解如何简化...
【SSH 注解开发】是Java Web开发中一种常见的技术栈组合,由Struts2、Hibernate和Spring框架共同构建。这个学生信息管理系统就是基于这种技术栈,利用注解的方式来简化配置,提高开发效率。 Struts2作为MVC(模型-...
Struts2、Hibernate和...总的来说,Struts2、Hibernate和Spring的注解整合提供了更简洁、高效的开发方式,减少了XML配置,提高了代码可读性。通过理解并熟练掌握这些注解,开发者能更轻松地构建复杂的企业级应用。
在这个"Spring3+Struts2+Hibernate3 全注解集成开发"项目中,我们将深入探讨如何使用这三个框架的注解版本进行集成,以实现对Emp表的操作。 首先,Spring3是依赖注入(DI)和面向切面编程(AOP)的优秀框架。在全...
通过这个登录实例,你可以学习到如何在实际项目中集成Struts2、Spring和Hibernate,理解它们之间的协作方式,以及如何编写和配置相关的代码。同时,这也将帮助你掌握Java Web开发的基础知识,提高解决实际问题的能力...
Struts2、Spring3和Hibernate是Java开发中的三大框架,它们的集成使用极大地提升了Web应用的开发效率和可维护性。在这个项目"SSHWithAnnotationDemo"中,开发者利用注解功能,DAO泛型以及通用分页技术,进一步优化了...
Struts2.3.28、Spring4.1.6和Hibernate...以上就是Struts2.3.28、Spring4.1.6和Hibernate4.3.8整合的关键知识点,以及注解在整合中的作用。理解并熟练掌握这些内容,能够帮助开发者更有效地构建和维护Java EE应用程序。
5. **整合步骤**:在Struts2的Action中,通过Spring的Autowired注解注入需要的服务类,这些服务类通常会持有Hibernate的SessionFactory,从而完成DAO层的数据库操作。 6. **测试与运行**:在MyEclipse8.0环境下,将...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...
`struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由Spring容器管理。`spring-context.xml`中,需要配置数据源、SessionFactory、事务管理器以及各业务层和DAO层的bean。Hibernate的`hibernate....
在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3,并且强调了全注解开发,这意味着在配置文件中尽可能地使用注解来代替XML配置。 首先,让我们详细了解一下这三个框架的...