Joan's javaworld - Struts2+Spring2.5+Hibernat...
来源:百度文库 编辑:神马文学网 时间:2024/04/29 01:47:40
一、Struts2+Spring2.5+Hibernate3搭建过程:
1. Eclipse->New->Danamic Web Project
2. 加入核心jar包:
Struts2核心包:
struts2-core-2.0.11.2.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
xwork-2.0.5.jar
struts2-spring-plugin-2.0.11.2.jar
Spring核心包:
spring.jar
Hibernate核心包:
hibernate3.jar
antlr-2.7.6.jar
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
ehcache-1.2.jar
jta.jar
log4j-1.2.11.jar
其他包:ojdbc14.jar、dwr.jar等
3. 提供相关配置文件,修改web.xml
Web.xml配置:
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
contextConfigLocation
/WEB-INF/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
Spring character encoding filter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
Spring character encoding filter
/*
java.lang.Throwable
/error.jsp
http://java.sun.com/jsp/jstl/core
/WEB-INF/tld/c.tld
http://java.sun.com/jsp/jstl/fmt
/WEB-INF/tld/fmt.tld
login.jsp
在src/java下添加struts.xml配置文件:
Struts配置文件:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
在src下添加hibernate配置文件及其log4j.properties.(日志记录配置文件,在hibernate包中可以找到)
Hibernate配置文件:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
jdbc:oracle:thin:@localhost:1521:orcl
oracle.jdbc.driver.OracleDriver
demo
demo
org.hibernate.dialect.OracleDialect
true
update
在webroot/WEB-INF下添加spring核心配置文件,提供对hibernate的支持,配置数据源及SessionFactory:
applicationContext-core.xml配置文件:
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
demo
demo
org.hibernate.dialect.OracleDialect
true
update
classpath:hibernate.cfg.xml
文件目录结构:
图一、src目录结构
图二、webroot目录结构
测试:配置相关的数据库连接,部署启动项目,看能否正常启动。
二、demo示例程序开发过程:
1. 创建实体类及其hibernate映射文件,创建数据库表。
在com.isoftstone.ssh.demo.entity下创建实体类:User
public class User extends BaseEntity {
private long userId;
private String username;
private String password;
//getters和setters方法省略
}
//BaseEntity为实现Serializable接口的实体类
在entity包下,提供hibernate实体类映射文件如下:
User.hbm.xml
在hibernate.cfg.xml中添加资源配置:
使用hibernate提供的类实现数据库表的创建:
在com.isoftstone.ssh.common.util中,执行ExportDB的main()方法,生成实体类对应的数据库表(注:在hibernate.cfg.xml中需要暂时提供数据库连接等属性,后期可以采用Ant和xDoclet的方式,自动生成实体类的配置文件及创建数据库表)
2.编写DAO层及其实现类:
编写UserDAO接口,
package com.isoftstone.ssh.demo.integration.dao;
import java.util.List;
import com.isoftstone.ssh.common.core.BaseDAO;
import com.isoftstone.ssh.demo.entity.User;
public interface UserDAO extends BaseDAO {
public void createUser(User user);
public void deleteUser(long userId);
public List searchAllUser();
public User loginUser(String username, String password);
}
编写UserDAO类的实现类UserHiberanteDAO,继承HibernateDaoSupport实现UserDAO
package com.isoftstone.ssh.demo.integration.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.isoftstone.ssh.common.core.ProjectException;
import com.isoftstone.ssh.demo.entity.User;
import com.isoftstone.ssh.demo.integration.dao.UserDAO;
public class UserHibernateDAO extends HibernateDaoSupport implements UserDAO {
@Override
public void createUser(User user) {}
@Override
public void deleteUser(long userId) {}
@Override
public List searchAllUser() {
return getSession().createQuery("from User").list();
}
@Override
public User loginUser(String username, String password) {
User user = findUserByUsername(username);
if(user == null)
throw new ProjectException("用户名不存在:" + username);
if(!user.getPassword().equals(password))
throw new ProjectException("密码不正确!");
return user;
}
private User findUserByUsername(String username){
return (User)
this.getSession().createQuery("select u from
com.isoftstone.ssh.demo.entity.User u where u.username=?")
.setParameter(0, username)
.uniqueResult();
}
}
在applicationContext-demo.xml中配置DAO,纳入spring的IOC容器管理,
(注意:HibernateDaoSupport由Spring框架提供,对hibernate提供了支持,其使用和hibernate的session基本一致;配置DAO类时,注意设置scope属性为“prototype”类型)
3.编写Service层及其实现类
编写UserService接口:
package com.isoftstone.ssh.demo.biz.service;
import java.util.List;
import com.isoftstone.ssh.demo.entity.User;
public interface UserService {
public void createUser(User user);
public void deleteUser(long userId);
public List searchAllUser();
public User loginUser(String username, String password);
}
编写service实现类:UserPojoService
package com.isoftstone.ssh.demo.biz.service.impl;
import java.util.List;
import com.isoftstone.ssh.common.core.BaseService;
import com.isoftstone.ssh.demo.biz.service.UserService;
import com.isoftstone.ssh.demo.entity.User;
import com.isoftstone.ssh.demo.integration.dao.UserDAO;
public class UserPojoService extends BaseService implements UserService {
@Override
public void createUser(User user) {}
@Override
public void deleteUser(long userId) {}
@Override
public List searchAllUser() {
UserDAO userDAO = (UserDAO) context.getBean("userDAO");
return userDAO.searchAllUser();
}
@Override
public User loginUser(String username, String password) {
UserDAO userDAO = (UserDAO) context.getBean("userDAO");
return userDAO.loginUser(username, password);
}
}
在applicationContext-demo.xml中配置Service,纳入spring的IOC容器管理,
(注意:UserPojoService实现类继承了BaseService类,BaseService实现类Service接口及其 BeanNameAware, DisposableBean,InitializingBean, BeanFactoryAware等spring提供的工具类,在spring启动的时候会自动注入相关的属性,这样在其实现类中可是直接通过配置的beanName使用spring容器中的相关bean等,如context.getBean(“beanName”);)
4. 编写Struts2的Action控制器
在com.isoftstone.ssh.demo.web.action包中创建LoginAction
package com.isoftstone.ssh.demo.web.action;
import com.isoftstone.ssh.common.core.AbstractAction;
import com.isoftstone.ssh.demo.biz.service.UserService;
import com.isoftstone.ssh.demo.entity.User;
public class LoginAction extends AbstractAction {
private UserService userService;
private User user = new User();
@Override
public String execute() throws Exception {
user = userService.loginUser(user.getUsername(), user.getPassword());
getSession().put("user", user);
logger.debug("logger信息 : " + user.getUsername() + " : " + user.getPassword() + ": " + user.getUserId());
return SUCCESS;
}
@Override
public User getViewModel() {
return user;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
在spring配置文件中添加action类的配置:
class="com.isoftstone.ssh.demo.web.action.LoginAction"
scope="prototype">
配置Struts配置文件,在struts-demo.xml添加配置文件:
/welcome.jsp
/login.jsp
在struts.xml中添加子文件:
注意:(1. LoginAction 继承于抽象类AbstractAction,AbstractAction继承了Struts2的ActionSupport类,及其实现了ModelDriven, SessionAware, ParameterAware等接口,提供getRequest(),getSession()以及日志记录logger等,在common/util包中可以查看其代码;2. struts2对spring提供了支持,通过struts2-spring-plugin-2.0.11.2.jar包,Action类是交给spring的ioc容器管理,且scope属性为prototype,spring默认为singleton,Struts2不同于Struts1的单实例,不需要考虑线程安全问题;3. Struts配置文件中,action的class属性为spring配置的Action Bean的名字)
5. 页面显示,配置Struts2的验证器
在login.jsp中使用sturts的标签做显示,如:
//struts2标签
实现struts2的验证器,在LoginAction的包下添加配置文件(可从struts2的jar包中找到资源文件)
package.properties:(用于定义国际化消息文本)
HelloWorld.message= Struts is up and running ...
requiredstring = ${getText(fieldName)} is required.
password = Password
username = Username
LoginAction-validation.xml:
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
注意:(sturts2的验证功能是通过interception拦截器实现的,在struts-default.xml文件中,默认是开启验证功能)
6. 其他:在common/core包中提供了自定义异常等类,在sturts.xml中配置了全局异常处理等
/common/error.jsp
/login.jsp
1. Eclipse->New->Danamic Web Project
2. 加入核心jar包:
Struts2核心包:
struts2-core-2.0.11.2.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
xwork-2.0.5.jar
struts2-spring-plugin-2.0.11.2.jar
Spring核心包:
spring.jar
Hibernate核心包:
hibernate3.jar
antlr-2.7.6.jar
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
ehcache-1.2.jar
jta.jar
log4j-1.2.11.jar
其他包:ojdbc14.jar、dwr.jar等
3. 提供相关配置文件,修改web.xml
Web.xml配置:
在src/java下添加struts.xml配置文件:
Struts配置文件:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
在src下添加hibernate配置文件及其log4j.properties.(日志记录配置文件,在hibernate包中可以找到)
Hibernate配置文件:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
在webroot/WEB-INF下添加spring核心配置文件,提供对hibernate的支持,配置数据源及SessionFactory:
applicationContext-core.xml配置文件:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
文件目录结构:
图一、src目录结构
图二、webroot目录结构
测试:配置相关的数据库连接,部署启动项目,看能否正常启动。
二、demo示例程序开发过程:
1. 创建实体类及其hibernate映射文件,创建数据库表。
在com.isoftstone.ssh.demo.entity下创建实体类:User
public class User extends BaseEntity {
private long userId;
private String username;
private String password;
//getters和setters方法省略
}
//BaseEntity为实现Serializable接口的实体类
在entity包下,提供hibernate实体类映射文件如下:
User.hbm.xml
在hibernate.cfg.xml中添加资源配置:
使用hibernate提供的类实现数据库表的创建:
在com.isoftstone.ssh.common.util中,执行ExportDB的main()方法,生成实体类对应的数据库表(注:在hibernate.cfg.xml中需要暂时提供数据库连接等属性,后期可以采用Ant和xDoclet的方式,自动生成实体类的配置文件及创建数据库表)
2.编写DAO层及其实现类:
编写UserDAO接口,
package com.isoftstone.ssh.demo.integration.dao;
import java.util.List;
import com.isoftstone.ssh.common.core.BaseDAO;
import com.isoftstone.ssh.demo.entity.User;
public interface UserDAO extends BaseDAO {
public void createUser(User user);
public void deleteUser(long userId);
public List
public User loginUser(String username, String password);
}
编写UserDAO类的实现类UserHiberanteDAO,继承HibernateDaoSupport实现UserDAO
package com.isoftstone.ssh.demo.integration.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.isoftstone.ssh.common.core.ProjectException;
import com.isoftstone.ssh.demo.entity.User;
import com.isoftstone.ssh.demo.integration.dao.UserDAO;
public class UserHibernateDAO extends HibernateDaoSupport implements UserDAO {
@Override
public void createUser(User user) {}
@Override
public void deleteUser(long userId) {}
@Override
public List
return getSession().createQuery("from User").list();
}
@Override
public User loginUser(String username, String password) {
User user = findUserByUsername(username);
if(user == null)
throw new ProjectException("用户名不存在:" + username);
if(!user.getPassword().equals(password))
throw new ProjectException("密码不正确!");
return user;
}
private User findUserByUsername(String username){
return (User)
this.getSession().createQuery("select u from
com.isoftstone.ssh.demo.entity.User u where u.username=?")
.setParameter(0, username)
.uniqueResult();
}
}
在applicationContext-demo.xml中配置DAO,纳入spring的IOC容器管理,
(注意:HibernateDaoSupport由Spring框架提供,对hibernate提供了支持,其使用和hibernate的session基本一致;配置DAO类时,注意设置scope属性为“prototype”类型)
3.编写Service层及其实现类
编写UserService接口:
package com.isoftstone.ssh.demo.biz.service;
import java.util.List;
import com.isoftstone.ssh.demo.entity.User;
public interface UserService {
public void createUser(User user);
public void deleteUser(long userId);
public List
public User loginUser(String username, String password);
}
编写service实现类:UserPojoService
package com.isoftstone.ssh.demo.biz.service.impl;
import java.util.List;
import com.isoftstone.ssh.common.core.BaseService;
import com.isoftstone.ssh.demo.biz.service.UserService;
import com.isoftstone.ssh.demo.entity.User;
import com.isoftstone.ssh.demo.integration.dao.UserDAO;
public class UserPojoService extends BaseService implements UserService {
@Override
public void createUser(User user) {}
@Override
public void deleteUser(long userId) {}
@Override
public List
UserDAO userDAO = (UserDAO) context.getBean("userDAO");
return userDAO.searchAllUser();
}
@Override
public User loginUser(String username, String password) {
UserDAO userDAO = (UserDAO) context.getBean("userDAO");
return userDAO.loginUser(username, password);
}
}
在applicationContext-demo.xml中配置Service,纳入spring的IOC容器管理,
(注意:UserPojoService实现类继承了BaseService类,BaseService实现类Service接口及其 BeanNameAware, DisposableBean,InitializingBean, BeanFactoryAware等spring提供的工具类,在spring启动的时候会自动注入相关的属性,这样在其实现类中可是直接通过配置的beanName使用spring容器中的相关bean等,如context.getBean(“beanName”);)
4. 编写Struts2的Action控制器
在com.isoftstone.ssh.demo.web.action包中创建LoginAction
package com.isoftstone.ssh.demo.web.action;
import com.isoftstone.ssh.common.core.AbstractAction;
import com.isoftstone.ssh.demo.biz.service.UserService;
import com.isoftstone.ssh.demo.entity.User;
public class LoginAction extends AbstractAction {
private UserService userService;
private User user = new User();
@Override
public String execute() throws Exception {
user = userService.loginUser(user.getUsername(), user.getPassword());
getSession().put("user", user);
logger.debug("logger信息 : " + user.getUsername() + " : " + user.getPassword() + ": " + user.getUserId());
return SUCCESS;
}
@Override
public User getViewModel() {
return user;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
在spring配置文件中添加action类的配置:
scope="prototype">
配置Struts配置文件,在struts-demo.xml添加配置文件:
在struts.xml中添加子文件:
注意:(1. LoginAction 继承于抽象类AbstractAction,AbstractAction继承了Struts2的ActionSupport类,及其实现了ModelDriven, SessionAware, ParameterAware等接口,提供getRequest(),getSession()以及日志记录logger等,在common/util包中可以查看其代码;2. struts2对spring提供了支持,通过struts2-spring-plugin-2.0.11.2.jar包,Action类是交给spring的ioc容器管理,且scope属性为prototype,spring默认为singleton,Struts2不同于Struts1的单实例,不需要考虑线程安全问题;3. Struts配置文件中,action的class属性为spring配置的Action Bean的名字)
5. 页面显示,配置Struts2的验证器
在login.jsp中使用sturts的标签做显示,如:
//struts2标签
实现struts2的验证器,在LoginAction的包下添加配置文件(可从struts2的jar包中找到资源文件)
package.properties:(用于定义国际化消息文本)
HelloWorld.message= Struts is up and running ...
requiredstring = ${getText(fieldName)} is required.
password = Password
username = Username
LoginAction-validation.xml:
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
注意:(sturts2的验证功能是通过interception拦截器实现的,在struts-default.xml文件中,默认是开启验证功能)
6. 其他:在common/core包中提供了自定义异常等类,在sturts.xml中配置了全局异常处理等
/common/error.jsp
Joan's javaworld - Struts2+Spring2.5+Hibernat...
Struts2.1.6+Spring2.5+Hibernate3.2
Spring2.5、Struts2、Ibatis开发框架
Struts2.1.6+Spring2.5+Hibernate3.2qqq
Spring2.5、Struts2、Ibatis开发框架搭建(一1)
配置struts2.0.6+spring2.0.3+hibernane3备忘
struts2.1.8 + spring2.5.6 + hibernate3.3.2整合
Struts2教程s
Struts2 Spring2 整合_Java实例教程_Java_软件编程
Struts2.1.6与Spring2.5.6框架整合q
Struts2 Spring2 整合_Java实例教程_Java_软件编程
Struts2.1.6与Spring2.5.6框架整合1
Struts2.1.6与Spring2.5.6框架整合fffffff
Struts2.1.6与Spring2.5.6框架整合sds
struts2.1.8 + spring2.5.6 + hibernate3.3.2整合的..qqq.
Struts2.1.6与Spring2.5.6框架整合222
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(四)
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) - 菠萝大象 - BlogJava
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(四) - 菠萝大象 - BlogJava
struts2 标签的使用 s:iterator
struts2 标签的使用 s:iterator
spring2.5事务配置5种方式