`
zengbo0710
  • 浏览: 417036 次
社区版块
存档分类
最新评论

Struts+Hibernate入门实例(Eclipse版)

阅读更多

一、前言
二、相关概念与工具介绍
三、实例需求与总体设计
四、持久化层与业务层实践(Hibernate实践)
五、控制层与表示层实践(Struts实践)
六、发布与运行
七、写在最后

一、前言

J2EE和.NET是目前企业级运用的两大阵营,谁优谁劣各有说法。笔者是做J2EE方向的,觉得J2EE比起.NET最大的优势就是其经过长实践发展总结出来的大量模式和大量先进的框架。这些框架许多都是开源的——开源也是J2EE阵营的另一优势。本篇文章的主角就是目前J2EE web应用中最流行的两大开源框架——Hibernate和Struts。

二、相关概念与工具介绍

下面我将分别对本文“三大主角”所涉及到相关概念进行说明。

Hibernate及相关知识介绍
Hibernate:
中文意思是"冬眠“,呵呵,不知道设计者为何用这个名字。它是一个开源的ORM框架(关于ORM下文还会讲解),它是通过对JDBC API进行封装从而实现对java对象持久化的。有人可能要问:JDBC其实不难操作,为什么还要封装它哪?其实答案很简单,因为现在通用的数据库都是关系数据库,我们通过JDBC操作无法做到OOP,所以Hibernate将JDBC封装起来,并且提供了一套OO化的Hibernate API供顶层操作。Hibernate现在几乎已经成为ORM的公认标准了(刚推出的EJB 3.0标准中使用的ORM事实上就是Hibernate)

ORM:
这里解释下ORM。ORM是一种模式(关于模式,笔者之前在这里发表过一篇介绍工厂模式的文章,读者可以看看),它的英文是Object-Relation Mapping,中译为对象-关系映射,它指的是“在单个组建中负责所有实体域对象的持久化,封装数据访问细节”(注:此定义来自《精通Hibernate:java对象持久化技术详解》,孙卫琴,电子工业出版社)。笔者的觉得很容易理解:把关系数据库对象化。


Struts及相关知识介绍
Struts:
Struts是由著名的Apache基金会开发的开源项目。中译为“框架”,顾名思义,它就是一种MVC框架。众所周知,MVC是一种业务逻辑与表示分离的模式,在java web上的应用十分广泛。以前MVC的主要表现形式是JSP Model2,也就是JSP+Servlet+Javabean的应用,而近年来Struts的应用越来越广泛,目前已经是最流行的MVC框架了。

MVC:
Model-View-Controller,中译为模型-视图-控制器。MVC不是真正意义上的软件设计模式,而更是一种解决方案,它把软件系统的所有业务逻辑方面的编程交给了Model,把所有UI视图的设计和编程交给了View,再用Controller控制器控制Model并生成相应的View,从而真正实现了业务逻辑与用户界面的分离。


Eclipse介绍
Eclipse是由IBM公司开发出来,后来又免费捐献出来的开源工具,是一套主要用于Java开发的IDE(Eclipse通过添加某些插件可以实现对UML、C++等的开发)。Eclipse具有强大的扩展功能,加上其开源的特性,导致许多爱好者和公司为其开发了非常优秀的插件,Myeclipse就是其中之一。Myeclipse是面向J2EE开发者的Eclipse插件,功能强大,好用。本文的实例就是基于Eclipse+Myeclipse环境下开发出来的。

创建/运行本文实例除了安装以上工具和插件外还需要安装一个Web容器,本文使用的是Jboss,笔者可以自行选择使用Tomcat或Weblogic等,这些对运行本文实例影响不大。

本文选择的数据库是SQLServer2000,关于Mysql、Oracle等其他数据库的操作方法类似。

关于Eclipse下载和安装方法本文不做介绍,请读者自行在网上查找相关方法。

三、实例需求与总体设计
1、需求定义
由于本文的目的是介绍在Eclipse IDE下开发Struts+Hibernate的具体方法,而不是介绍项目开发/软件设计的技巧,所以本文实例需求非常简单。

本文实例是一个web留言簿,可以让匿名用户发表一些留言信息,并保存至数据库。做过web开发的朋友肯定做过这类实例,非常经典。由于实例简单并且容易理解,所以笔者也省去画用例图说明的步骤。

2、总体设计
本实例按传统J2EE web项目的设计方法,分为5层架构,自底向上分别是:数据库层 -> ORM层(Hibernate层) -> 业务逻辑层 -> 控制层(Struts Action) -> 视图表示层。

数据库的DDL语句如下:


四、持久化层与业务层实践(Hibernate实践)
好,戏肉开始。

1、先打开Eclipse。点击“新建项目”->“Web Project”,出现如下窗口,在窗口中Project Name填入“Memo”作为项目名:

代码:
create database memotest
create table Memo
(
ID int not null identity(1,1),
topic varchar(255),
content text,
guest varchar(50),
primary key(ID)
)

 



2、点击“窗口”->“打开透视图”->“其他”,出现如下窗口,双击“Myeclipse Database Explorer”,切换到如下视图:



3、在“DB Browser”控制面板点击“new”,新建一个数据库连接。在弹出的窗口中点击“new driver”新建一个数据库连接驱动。如下图:



4、上一步后回到以下视图,在列表中选择上一步创建的驱动,填入相关数据库资料,点击确定即可。(此步骤前必须已经打开数据库,最后已经按照本实例的DDL创建了库和表)



5、完成上一步后出现以下视图。点击“memo”的右键,点击“open connetion”->“确定”。如果上述步骤成功的话这里会连接到数据库,并显示相关的数据库结构。


成功后如下图:



6、点击“窗口”->“打开透视图”->“其他”->“Myeclipse”切换到项目控制视图。在项目名上点击右键->“myeclipse”->“Add Hibernate capabilites”,出现以下视图,并按下图填入相关信息:

点下一步后出现如下框图,按图片上内容填写:


提交后出现以下视图,按图片内容填写:



7、在项目名上点击右键->“myeclipse”->“Add Struts capabilites”,出现下面视图,按图中内容天下:



8、点击“窗口”->“打开透视图”->“其他”,出现如下窗口,双击“Myeclipse Database Explorer”,切换到数据库管理视图,找到我们为本次实例创建的表格,点右键->“create hibernate mapping”后出现下图,按图上内容填写:



9、至此Hibernate的创建工作已经完成,如下图,接下来我们写个DAO工厂类来操作Hibernate API。


点击com.woden包,新建个类,如下图:


输入以下代码:

代码:
package com.woden;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;



public class MemoDAOFactory {
        Session session;
    Transaction tx;
   
    public void add(Memo memo) throws HibernateException{
            try{
                    session = SessionFactory.currentSession();
                    tx = session.beginTransaction();
                    session.save(memo);
                    tx.commit();
            }catch(HibernateException e){
                    System.out.println(e.toString());
            }finally{
                    if(tx!=null){
                            tx.rollback();
                    }
                    SessionFactory.closeSession();
            }
    }

}

以上只有一个插入方法,如果读者需要更多方法可以在DAO中自行添加。

至此,数据库层、ORM层和业务层的代码已经完成。

五、控制层与表示层实践(Struts实践)

1、新建一个welcome.jsp文件,作为实例的首页。具体方法是在“webroot”文件夹图标点右键->new->“jsp”,接下来填写的东西很简单就不用介绍了吧。

2、在上一步骤的第7步中已经在myeclipse中导入了struts,我们下面就可以开始编辑设置我们的struts实例。打开webboot目录下WEB-INF中的struts配置文件“struts-config.xml”,如下图:



3、在屏幕空白处点右键->“new”->“new form,action and jsp”,会出现如下视图,按下图提示填写内容:

这里记得点击“jsp”标签条,出现以下界面,按下图设置:



4、上一步骤设置了form,点击下一步看到如下视图,按下图设置,具体步骤是:点击“foward”标签->“add”->name填“success”,path选择“welcome.jsp”,其他不用填->确定。



5、上一步骤点击了“完成”后出现下图:



6、这一步骤是设置资源文件,为了struts的国际化和错误提示做准备。找到项目文件夹中src(源文件夹),找到ApplicationResourse.properties,双击打开,如下图所示配置:(注:这里笔者安装了一个免费的ascii转unicode的插件)


如果读者没有安装ascii自动转unicode组建,可以直接copy我转换后的资源文件内容:

代码:
form.addmemo.err.content=\u7559\u8a00\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a\u3002

form.addmemo.err.guest=\u7559\u8a00\u8005\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a\u3002

form.addmemo.err.topic=\u7559\u8a00\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a\u3002

jsp.addmemo.content=\u8bf7\u8f93\u5165\u5185\u5bb9\uff1a

jsp.addmemo.guest=\u60a8\u7684\u59d3\u540d\uff1a

jsp.addmemo.pagetitle=\u7559\u8a00\u6dfb\u52a0

jsp.addmemo.reset=\u91cd\u8bbe

jsp.addmemo.submit=\u63d0\u4ea4

jsp.addmemo.topic=\u6807\u9898\uff1a

jsp.welcome.content=\u6b22\u8fce\u4f7f\u7528Hibernate+Struts\u5b9e\u4f8b\u3002

jsp.welcome.title=\u4f60\u597d\u3002\u3002\u3002

7、下面打开com.woden.form.MemoForm.java文件,输入以下代码:

代码:
package com.woden.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class MemoForm extends ActionForm {

        private String topic;
        private String content;
        private String guest;

        public ActionErrors validate(
                ActionMapping mapping,
                HttpServletRequest request) {
                ActionErrors errors = new ActionErrors();
               
                if(getGuest()==null||"".equals(getGuest()))
                {
                        errors.add("memoform.err.guest",new ActionMessage("form.addmemo.err.guest"));
                }
               
                if(getTopic()==null||"".equals(getTopic()))
                {
                        errors.add("memoform.err.topic",new ActionMessage("form.addmemo.err.topic"));
                }
               
                if(getContent()==null||"".equals(getContent()))
                {
                        errors.add("memoform.err.content",new ActionMessage("form.addmemo.err.content"));
                }
               
                return errors;
        }


        public void reset(ActionMapping mapping, HttpServletRequest request) {
                this.topic=null;
                this.content=null;
                this.guest=null;
        }

        public String getTopic() {
                return topic;
        }

        public void setTopic(String topic) {
                this.topic = topic;
        }

        public String getContent() {
                return content;
        }

        public void setContent(String content) {
                this.content = content;
        }

        public String getGuest() {
                return guest;
        }

        public void setGuest(String guest) {
                this.guest = guest;
        }
}

8、上面已经写出了ActionForm的代码,具体代码笔者在这里不解释,我想看过struts基础的朋友都应该很清楚了,下面贴处Action的代码:

代码:
package com.woden.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 com.woden.Memo;
import com.woden.MemoDAOFactory;
import com.woden.form.MemoForm;

public class MemoAction extends Action {

        public ActionForward execute(
                ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response) {
                MemoForm memoForm = (MemoForm) form;
               
                MemoDAOFactory memoDAO = new MemoDAOFactory();
                Memo memo = new Memo();
                memo.setTopic(memoForm.getTopic());
                memo.setContent(memoForm.getContent());
                memo.setGuest(memoForm.getGuest());
               
                try{
                        memoDAO.add(memo);               
                }catch(Exception e)
                {
                        System.out.print(e.toString());
                }
               
                return mapping.findForward("success");
        }
}

9、最后编辑下几个相关jsp文件的内容,分别如下:

代码:
welcome.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
  <head>
    <html:base />
    <title><bean:message key="jsp.welcome.title"/></title>
  </head>
  
  <body>
    <bean:message key="jsp.welcome.content"/>
  </body>
</html:html>


addmemo.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>

<html>
        <head>
                <title><bean:message key="jsp.addmemo.pagetitle"/></title>
        </head>
        <body>
                <html:form action="/memo">
                        <bean:message key="jsp.addmemo.guest"/><html:text property="guest"/><html:errors property="memoform.err.guest"/><br/>
                        <bean:message key="jsp.addmemo.topic"/><html:text property="topic"/><html:errors property="memoform.err.topic"/><br/>
                        <bean:message key="jsp.addmemo.content"/><html:textarea property="content"/><html:errors property="memoform.err.content"/><br/>
                        <html:submit><bean:message key="jsp.addmemo.submit"/></html:submit>
                        <html:reset><bean:message key="jsp.addmemo.reset"/></html:reset>
                </html:form>
        </body>
</html>

至此,本实例完成。

六、发布与运行
1、在项目文件点右键->“myeclipse”->“Add and remove project deployment”,如下图:



2、点击图标,选择“Jboss”->“start”(注:这里如果用的是tomcat也类似操作,关于服务器配置的方法这里不祥谈,请读者自行在网上查找相关资料),会发现控制台会输出类似如下信息:

打开浏览器,输入:http://localhost:8080/ 后如果出现下图证明启动成功:



3、输入网址:http://localhost:8080/Memo/addmemo.jsp ,会看到效果图如下图:



4、按照正常流程和非正常流程分别留言一次,呵呵,效果出来没有?如果没有出现预期效果请检查前面步骤。

七、写在最后

在本文最后,笔者再次强调,本文的目的是介绍Eclipse IDE关于创建Struts+Hibernate应用的方法,而不是介绍j2ee框架的概念和运用,更不是介绍java设计与模式。本文对IDE的配置、服务器配置的方法也没做详细介绍,因为这都不是本文重点。对以上知识想了解多点的读者可以google一下。

本文的实例只是一个入门,强调的是一种方法,而不是强调功能,所以本文的实例只有一个简单的录入功能。在看完本文后读者可以添加更多的功能(我想,当这一架构搭建起来后,添加功能已经是相当容易的事情了)。

 

分享到:
评论

相关推荐

    struts+hibernate入门实例(eclipse版)

    ### Struts + Hibernate 入门实例(Eclipse 版) #### 一、开发环境搭建 在本章节中,作者朱千平将引导我们完成开发环境的搭建,包括以下几个步骤: 1. **下载安装Eclipse**: Eclipse 是一个开源的集成开发环境...

    Java Web整合开发完全自学手册:Struts+Hibernate+Spring+Eclipse源码

    《JavaWeb整合开发完全自学手册》介绍如何整合Struts+Hibernate+Spring+Eclipse进行J2EE开发,所有实例都基于MyEclipseIDE开发,引领读者快速进入基于JavaWeb的J2EE应用领域。《JavaWeb整合开发完全自学手册》主要...

    Struts+Hibernate入门实例(eclipse版)

    在"Struts+Hibernate入门实例(eclipse版).doc"文档中,应该详细阐述了以上步骤的实施细节,包括每一步的具体配置和代码示例。学习这个实例,开发者将能更好地理解如何在实际项目中结合使用Struts和Hibernate,提升...

    struts+hibernate入门实例

    在这个"struts+hibernate入门实例"中,数据库选择了Oracle 10g,这是一款功能强大的关系型数据库管理系统。开发者需要配置Hibernate的连接池和数据源,以便应用程序能够正确地访问Oracle数据库。 开发环境Eclipse ...

    Struts+Hibernate入门实例(eclipse版).doc

    ### Struts+Hibernate入门实例(eclipse版)知识点详解 #### 一、前言与背景介绍 随着企业级应用的发展,J2EE 和 .NET 成为了两大主流技术栈。本文主要聚焦于 J2EE 方向,特别是其中两个重要的开源框架:Hibernate ...

    Struts+Hibernate+Spring入门教程及实例.rar

    这个“Struts+Hibernate+Spring入门教程及实例”压缩包提供了学习这三大框架基础知识和实践操作的资源。 **Struts框架**: Struts是一个开源的MVC(Model-View-Controller)框架,主要用于构建基于Java EE的Web应用...

    struts+spring+hibernate入门实例

    这个"struts+spring+hibernate入门实例"旨在帮助初学者理解这三者如何协同工作,创建一个功能完整的Web应用。 Struts 是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于控制视图与模型之间的...

    Maven+Struts2+Hibernate入门实例

    【标题】"Maven+Struts2+Hibernate入门实例"是一个综合性的开发教程,旨在帮助初学者理解并掌握这三个核心技术在Java Web开发中的应用。这个实例项目通过集成Maven、Struts2和Hibernate,展示了如何构建一个功能完备...

    Struts2+Hibernate+Spring课件 张志峰版

    3. **Hibernate入门**:理解实体类、配置文件、Session工厂和Session接口的基本使用,以及如何进行CRUD(创建、读取、更新、删除)操作。 4. **Hibernate与Spring整合**:学习Spring的Hibernate模板或者JPA,实现对...

    struts2+hibernate入门实例

    在这个入门实例中,我们将深入理解如何将Struts2与Hibernate结合使用,来管理学生信息。首先,你需要了解Struts2的基本架构和配置。Struts2的核心是Action类,它处理HTTP请求并调用相应的业务逻辑。在配置文件struts...

    Struts+Hibernate+Spring入门教程及实例

    这个“Struts+Hibernate+Spring入门教程及实例”很可能是为初学者设计的一个综合学习资源,旨在帮助他们理解这三大框架的集成使用。 **Struts** 是一个MVC(Model-View-Controller)框架,主要处理HTTP请求和响应,...

    struts+spring+hibernate经典整合入门myeclipse实例

    Struts、Spring和Hibernate是Java开发中非常经典的三大框架,它们的整合应用,通常被称为SSH框架集成。这个实例是专为初学者设计的,旨在帮助理解如何在MyEclipse环境中进行SSH的集成与应用。 首先,Struts是MVC...

    spring+struts+hibernate(简单入门实例)

    在"spring+struts+hibernate(简单入门实例)"这个项目中,你可能已经实践了以下关键知识点: 1. **Spring框架**: - **依赖注入(Dependency Injection, DI)**:通过配置文件或注解实现对象之间的依赖关系,使得...

    struts2+spring+hibernate 入门实例

    这个入门实例旨在帮助初学者快速理解这三个框架如何协同工作,实现一个基本的学生信息管理系统。 首先,Struts2是基于MVC(Model-View-Controller)模式的Web框架,它主要负责处理HTTP请求,控制应用程序流程,以及...

    Struts+Spring+Hibernate入门级实例

    这个入门级实例将引导初学者了解如何整合这三个框架来实现基本的CRUD(创建、读取、更新和删除)操作。 首先,我们来看Struts框架。Struts是基于Model-View-Controller(MVC)设计模式的,它提供了一个用于处理用户...

    struts+spring+hibernate架构实例

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个...

    webwork+spring+hibernate入门实例

    《webwork+spring+hibernate入门实例》 在当今的Web开发领域,Spring、Hibernate和WebWork(现称为Struts 2)是三个极为重要的框架。本实例将引导初学者深入理解这三大框架的集成与应用,以及如何与MySQL数据库进行...

Global site tag (gtag.js) - Google Analytics