struts+hibernate+spring的一个示例程序

 




java 企业应用领域, ejb 的功能强大同 ejb 的配置复杂,难于学习一样出名。但在以前我们又有什么办法呢?只有硬着头皮来学 ejb 。真有点 明知山有虎,偏向虎山行 的精神。现在形式有了乐观的变化, java 开源的持续走红,使得开发 java 企业级应用不再局限于 ejb 领域。这里我主要介绍一下怎样采用开源的 Spring,Hibernate 以及 Struts 构建一个轻量级的架构。
一、整体架构介绍
在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。其实分层还可以使开发人员专注于某一层进行开发,使得软件开发的分工变细,提高生产效率(这一点上堪比福特发明的流水线生产汽车的做法,各个工人负责特定部件的生产,最后组装)。
一个企业级的 java 应用,通常分为以下几层: UI 层,业务逻辑层,数据持久层,域对象层。下面对这几层分别作简要介绍:
1     UI 层:负责与用户交互,包括:接受用户的请求,把处理结果返回给用户。这里我们采用 struts UI 层,虽然比起 Tapestry 以及 JSF 这些事件驱动的表现层技术而言, Struts 的设计显得有些老土,但它目前仍是表现层事实上的标准,所以我们还是选用它。
2     业务逻辑层:主要负责具体的业务处理。通过 Spring IOC 以及 AOP 实现各个功能的耦合相连
3     数据持久层:主要负责与底层的数据库打交道。这里我们采用 Spring 封装的 Hibernate 操作来简化实际的编码。主要的操作为 CRUD create ,read,update,delete
4     域对象层:具体的实体类,如老师,学生等等这些具体的类(注意:需要与数据库中的某一标对应)。
以上只是简单介绍了各个层的划分以及各层所对应的开源框架,要详细了解各层的具层信息,需要访问 struts,hibernate,spring 的官方网站。
二、实例分析
实例说明:一个网站登录的例子,比较简单,但能说明各层是如何协调工作的。
工具: jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5 ,至于这几个工具到底该怎么装这里我就不多说了,大家不清楚的可以到网上搜搜。下面是具体操作步骤:
预备工作:用 mysql 创建一个 test 数据库,再创建一个 user 表,再创建两个字段 username password 。脚本如下

DROP DATABASE IF EXISTS `test`;
CREATE DATABASE `test`
USE `test`;

CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL default '',
`password` varchar(30) default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
打开 myeclipse database explore 透视图




右键单击左侧的空白区域 ,点击 new 按钮



单击 “configure database driver” 来配置数据库的驱动,你必须有 mysql jdbc 驱动 ,没有的到 mysql 的官方网站上下载。



测试数据库配置是否成功。




1     新建一个 myeclipse web 工程




2     引入 Spring
右键工程名







注意:这里为了省得以后再添加 spring 的相关包,所以一次性的选中了所有的包。选中
Copy 选项,它会把这些包拷贝到 /WebRoot/WEB-INF/lib 目录下,方便以后的实际部署。
3     添加 hibernate



系统会检测到该工程已经添加了 Spring 包,选择使用 Spring 的配置文件



点击 next



点击 next



点击 next



最后点击 Finish 按钮即可。
4 切换到 database explore 视图,右键 点击 user 表的 “Hibrnate Reverse Engineering”



弹出如下窗口



点击 “next”



再单击 finish
    在包视图中 可以看到 src 下多了一个名为 vo package 以及该包下的四个文件



为了更加直观地显示分层,我另建了一个名为 dao package, 并把 UserDAO.java 移到 dao



同时注意在 applicationContext.xml 中把对 UserDAO 的引用部分也作相应修改。
5     建立业务逻辑层代码
新建一个名为 service 的包,再在里面建立一个 Service 类,代码如下
package service;

import java.util.List;

import vo.User;
import dao.UserDAO;

public class Service {

    private UserDAO userDao;

    public UserDAO getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDAO userDao) {
        this.userDao = userDao;
    }

    public boolean isValid(User user) {// 判断用户是否合法

        List result = userDao.findByExample(user);

        if (result.size() > 0)
              return true;
        else
              return false;

    }

}
同时在 applicationContext.xml 中添加如下配置
<bean id="service" class="service.Service" singleton="false">
        <property name="userDao">
              <ref bean="userDao" />
        </property>
    </bean>
6 .配置 UI
添加 struts 包,方法同添加 spring 一样



配置 struts-config.xml 文件,在空白区域右键单击 new 一个 action ,actionForm ,jsp










下一步
forward 作设置 , 增加 succeed 转到 welcome.jsp,fail 转到 login.jsp

WebRoot 目录下建立一个 welcome.jsp 文件,显示用户登录成功后的欢迎信息。
6     struts spring 连接起来
6 1 修改 struts-config.xml 注意红色字体部分
<action
    attribute="loginForm"
    input="/login.jsp"
    name="loginForm"
    path="/login"
    scope="request"
    type="org.springframework.web.struts.DelegatingActionProxy">
    <forward name="fail" path="/login.jsp" />
    <forward name="succeed" path="/welcome.jsp" />
</action>

再在 strut-config.xml 中添加如下代码
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>>
6.2 修改 applicationContext ,增加以下内容
<bean name="/login" class="web.action.LoginAction"
        singleton="false">
        <property name="service">
              <ref bean="service" />
        </property>
</bean>
6.3 修改 LoginAction.java 部分代码,增加一个 service 变量,以及其 get/set 方法(主要用于 Spring IOC )。代码如下:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import web.form.LoginForm;
import service.Service;
import vo.User;

/**
* MyEclipse Struts Creation date: 09-27-2006
*
* XDoclet definition:
*
* @struts.action path="/login" name="loginForm" input="/login.jsp"
*           scope="request" validate="true"
* @struts.action-forward name="fail" path="/login.jsp"
* @struts.action-forward name="succeed" path="/welcome.jsp"
*/
public class LoginAction extends Action {
    /*
    * Generated Methods
    */

    /**
    * Method execute
    *
    * @param mapping
    * @param form
    * @param request
    * @param response
    * @return ActionForward
    */

    private Service service;

    public void setService(Service service) {
        this.service = service;
    }

    public Service getService() {
        return service;
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
                                                        // stub
        User user = new User();
        user.setPassword(loginForm.getPassword());
        user.setUsername(loginForm.getUserName());
        if (service.isValid(user))
              return mapping.findForward("succeed");
        else
              return mapping.findForward("fail");
    }
}
至此一个简单的登录已经做成。剩下的工作就是打包并发布你的应用了
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值