eclipse3.2、myeclipse5.0,Jboss4.0.3, sql server2000 sp3
原理简介
在java企业应用领域,ejb的功能强大同ejb的配置复杂,难于学习一样出名。但在以前我们又有什么办法呢?只有硬着头皮来学ejb。真有点“明知山有虎,偏向虎山行”的精神。现在的形势有了乐观的变化,java开源的持续走红,使得开发java企业级应用不再局限于ejb领域。下面简要介绍一下怎样采用开源的Spring,Hibernate以及Struts构建一个轻量级的架构。
1、整体架构介绍
在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。其实分层还可以使开发人员专注于某一层进行开发,使得软件开发的分工变细,提高生产效率。
一个企业级的java应用,通常分为以下几层:UI层,业务逻辑层,数据持久层,域对象层。下面对这几层分别作简要介绍:
域对象层:具体的实体类,如老师,学生等等这些具体的类(注意:需要与数据库中的某一表对应),由持久层类完成。
数据持久层:主要负责与底层的数据库打交道。这里采用Spring封装的Hibernate操作来简化实际的编码。主要的操作为CRUD(create ,read,update,delete),由DAO完成。
业务逻辑层:主要负责具体的业务处理。通过Spring的IOC以及AOP实现各个功能的耦合相连,业务逻辑由service来完成,service通过调用DAO操作数据库,实现业务逻辑。service由Struts的Action类来调用。
UI层:负责与用户交互,包括:接受用户的请求,把处理结果返回给用户。目前主要采用struts来做UI层,虽然比起Tapestry以及JSF这些事件驱动的表现层技术而言,Struts的设计显得有些老土,但它目前仍是表现层事实上的标准,所以我们还是选用它。
内容
通过hibernate建立与表users相对应的类Users。
在Struts框架创建的index.jsp的表单中用户名和密码,action通过类的方法判别输入信息是否与数据库中一条记录的信息一致。如果一致,转到next.jsp页面,显示所有的用户信息。如果与每条记录都不一致,则要求重新输入。
步骤
1、预备工作:用sql server 2000创建一个test数据库,再创建一个users表,包含两个字段username和password。脚本如下
CREATE DATABASE test;
USE test;
CREATE TABLE users (
id int(11) NOT NULL idntity(1,1),
username varchar(20) NOT NULL default '',
password varchar(20) default '',
PRIMARY KEY (id)
)
打开myeclipse的database explore透视图
图5-1 打开数据库浏览器透视图
右键单击左侧的空白区域 ,点击 new 按钮
图5-2 打开数据库连接(一)
图5-3 打开数据库连接(二)
测试数据库配置是否成功。
2、新建一个myeclipse的web工程,命名为aaa
图5-4 创建web工程
3、引入Spring包
右键工程名
图5-5 准备增加Spring包
图5-6 选定要增加的Spring包
注意:这里为了省得以后再添加spring的相关包,所以一次性的选中了所有的包。选中Copy选项,它会把这些包拷贝到/WebRoot/WEB-INF/lib目录下,方便以后的实际部署。然后点击“Next”。
图5-7 选择Spring配置文件(applicationContext.xml)路径
4、添加hibernate包
图5-8添加hibernate包
系统会检测到该工程已经添加了Spring包,选择使用Spring的配置文件( ApplicationContext.xml )
图5-9 选择hibernate配置文件(一)
图5-10 选择hibernate配置文件和SessionFactory ID
图5-11 设定Bean Id并选择DB Profile
图5-12 不要创建SessionFactory class
最后点击Finish按钮,在最后即可。
5、修改库文件
和以往不同,Spring2.0并不是把所有的包加到lib目录下就能运行工程的,而且把所有的包加到lib目录下会产生冲突。由于MyEclipse5.5对Spring2.0支持还不太成熟,它在加入Spring组件时会把不需要的包加进去。因此需要手动对lib目录下的包进行增、删、改。
(1)删除文件
进入工程的Webroot/WEB-INF/lib目录,以“详细信息”方式排序所有文件,找到以下的六个文件并删除:asm-2.2.2.jar、asm.jar、asm-commons-2.2.2.jar、asm-util-2.2.2.jar、asm-attr.jar、cglib-2.1.3.jar。
图 5-13-1 删除不需要的文件
(2) 增加文件
到MyEclipse的安装目录下,进入eclipse/plugins文件夹,使用搜索功能找出commons-pool.jar文件,可能会有多个结果,只需要其中一个即可,把它放到lib目录下。
6、添加Struts2.0包
从www.apache.org 上下载struts2.0的包,一般情况下是struts-版本号-all.zip,打开里面的lib文件夹,把下图所示的包添加到工程的lib目录下。
图5-14 添加struts2.0包
完成后刷新工程。
7、搭建工程框架,写log4j.properties文件
在工程的src目录下新建几个包,方法为右键在src文件夹上点击,然后如图所示:
图5-15 新建一个包
图5-16 建好的包结构
其中:
Com.action包存放各个action文件。
Com.service包存放service接口
Com.service.impl包实现service接口。
Com.filter包存放过滤器文件,写这些文件为了解决中文问题。
Com.hibernate包存放hibernate映射文件和持久类。
Com.util包存入公共文件,如BaseService.java、BaseObject.java、BaseAction.java,如果不同的service调用同样的方法,可以把这些方法写在BaseService.java中,下面将详细说明。
先创建BaseObject类BaseObject.java:
右键点击com.util包,选择new->Class,如图所示:
图5-17 新建一个类
图5-18
package com.util;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class BaseObject implements Serializable {
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
public int hashCode(Object o) {
return HashCodeBuilder.reflectionHashCode(this);
}
protected String showDatetime(Date pidate) {
return getFormateDate(pidate, "yyyy-MM-dd HH:mm");
}
protected String showDate(Date pidate) {
return getFormateDate(pidate, "yyyy-MM-dd");
}
protected String showTime(Date pidate) {
return getFormateDate(pidate, "HH:mm");
}
private String getFormateDate(Date pidate, String formate) {
if (pidate == null) {
return null;
}
else {
return (new SimpleDateFormat(formate)).format(pidate);
}
}
}
再创建BaseService.java
图5-18 指定类名
在弹出来的对话框中指定类名为BaseService,点击选择其父类的“Browse”按钮。
然后在弹出来的对话框中选择超类名为HibernateDaoSupport,如图所示:
图5-19 选择父类
双击被选的父类(不用点“OK”按钮),然后点“Finish”完成BaseService.java的创建。Eclipse会自动跳到该文件下。暂时往BaseService.java中添加如下代码:
package com.util;
import java.io.Serializable;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class BaseService extends HibernateDaoSupport {
public Serializable insert(BaseObject obj) throws DataAccessException {
return getHibernateTemplate().save(obj);
}
public void update(BaseObject obj) throws DataAccessException {
getHibernateTemplate().update(obj);
}
public void delete(BaseObject obj) throws DataAccessException {
getHibernateTemplate().delete(obj);
}
public Object load(Class cls, Serializable id) throws DataAccessException {
return getHibernateTemplate().load(cls, id);
}
public List getAll(String hql,Object objs[]) throws DataAccessException{
if(objs == null)
return getHibernateTemplate().find(hql);
else
return getHibernateTemplate().find(hql,objs);
}
public Object getFirstObject(String hql,Object objs[]) throws DataAccessException{
Object ret = null;
List tmp = getAll(hql,objs);
if(tmp != null && tmp.size()>0)
ret = tmp.get(0);
return ret;
}
}
说明:在BaseService.java中定义了几个方法,包括插入、修改、删除、查询,需要的话直接调用即可。
用类似的方法新建BaseAction.java文件,选择其父类为ActionSupport,注意是com.opensymphony.xwork2.ActionSupport,另�
[有源代码]spring_struts_hibernate整合方案
需积分: 0 135 浏览量
2008-10-22
15:04:54
上传
评论
收藏 566KB RAR 举报
becomebadman
- 粉丝: 0
- 资源: 30
评论0