一个简单的Struts2+Hibernate整合应用(一)

     经常看到网上许多人发表了许多很精彩,很有用的博文,我一直也想写写博文,发发心情。
     平时很少玩博客,这是我第一次写博文,有不好的地方,希望读者多多给建议,非喜勿喷!

    这是一篇技术博文,一个简单网站框架的搭建,不关心界面的优化,以后台程序技术实现的可能为主,主要功能需求如下:
     1、写一个简单的新闻消息网站,该网站包含内容插入、检索、以及修改等操作;
     2、插入几条新闻到数据库中
     3、查询所有新闻,并在页面中显示新闻的标题、发布时间,要求对标题设置超链接,点击该链接后新开一个页面显示该新闻标题、发布时间、内容和来源;
     4、能够修改和删除新闻显示页面中指定的新闻 ;支持对消息内容的模糊查询,也可根据发布时间查询对应新闻消息;
     5、要求使用Struts2 校验框架按以下要求进行有效性校验:

        1) 对新闻标题、新闻内容作非空校验;2) 对新闻标题、新闻来源作长度校验
    
==================================================================================================
好,下面我们来进行技术实现的可能:
    首先来看一下整个项目文件:
   
    从上面可以看出,整个项目的实现并不复杂,只包含了四个独立的页面,所应用到的Java文件也就那么5个。呵呵,虽然看起来不复杂,可是整个逻辑思维并不容易实现,当然如果读者就是这个行业的,那就多多包含啦,呵呵,小小项目,不成文章,愿意与各位一起交流学习!

    一、首先,咱们来写个简单的首页,笔者的首页很简单,就头部三个连接标题



    以上首页的代码如下:
   
 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>新闻主页</title>
<style type="text/css">
a:hover {
    background-color: yellow;
    font-size: 15pt;
}
td {
    padding-bottom: 3pt;
    padding-top: 3pt;
}
a {
    text-decoration: none;
}
</style>
</head>

<body style="background-image: url('images/huo.jpg');">
    <table align="center" border="1" style="background-color: white;">
        <tr align="left">
            <td><a href="news_index.jsp"> <b>&nbsp;编辑新闻&nbsp;
            </a>
            </td>
            <td><a href="findAllAction"> <b>&nbsp;查看所有新闻&nbsp;
            </a>
            </td>
            <td><a href="findAllAction?name=search"> <b>&nbsp;查找新闻&nbsp;
            </a>
            </td>
        </tr>
    </table>
</body>
</html>




   二、现在咱们来实现第一个简单的功能模块“编辑新闻
       该模块主要实现新闻的插入,将数据插入数据库,并实现插入校验,不允许空插入和限制标题长度,先来实现客户端界面,客户端如下:
   

   1、插入数据前,先搭建数据库和表格,笔者我就采用Hibernate框架技术来实现
       首先配置好hibernate.cfg.xml文件,该文件放置在源文件目录下,即src目录下:

     

     以上配置的代码读者根据自己本机环境进行修改,具体可根据笔者代码的注释进行理解,小豪童鞋采用的是MySQL数据库,关于其他数据库的配置这里不做详解,大同小异!
   
     2、好,数据库的连接的框架,我们这里已经基本搭建好了,这里建议读者可以考虑c3p0连接池技术,通过连接池可以更加高效、快捷的进行数据库的相关操作。从上面可以看出,我们建立了一个名为“hibernate ”的数据库,这个数据库需要读者自己通过MySQL命令进行建立。

     接下来我没来建议一个名为news的表
    
      学习过的SSH框架技术的娃都应该明白,SSH框架搭建时,命名一定要严格的按照命名规范。
      我们需要建立一个名为“ news ”的数据表,该表包含的字段如下:
     

字段名

类型

长度

说明

id

int

 

主键,自动递增

title

varchar

扫描二维码关注公众号,回复: 647606 查看本文章

60

新闻标题

content

text

 

新闻内容

source

varchar

30

来源

issue_time

date

 

发布时间


       注意:这里的表格我们在hibernate.cfg.xml文件里已经申明了,当程序运行时会自动建立表格,所以这里我们不需要手动建立,只需要配置好接下来的持久化类OK了。
   

    下面贴出持久化类(POJO)的代码,( 注意类的命名 )
 


持久化类的建立相当简单,注意属性一定要和数据库的字段名匹配才能正确的插入。我们可以讲持久化类简单的理解为一张数据表,里面的每个属性都是一个字段。

     3、 写好持久化类的代码后,接下来如何将持久化类和数据库表联系起来呢,所以,接下来我们还需要配置一个映射文件,用来提供提供持久化类与数据库表之间的映射关系。(Hibernate本身就是一个面向Java环境的对象/关系数据库映射工具)。
      好,下面我们建立这样的一个映射文件,把它规范的命名为“ News.hbm.xml
 



    

关于这个映射文件配置的规范,读者有不明白的可以提问或者去学习或者百度,因为看起来这个代码量不多,但是这个配置文件共能十分的强大,知识量并不少。
--------------------------------------------------------------------------------------------------
注意:我们必须要将持久化类和映射文件放在同一个目录下:


      4、好了,后台的程序也弄得差不多了,下面,咱们来书写页面的代码,为了大家方便,直接贴代码
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>新闻插入页面</title>
<style type="text/css">
.tdLabel {
    background-color: yellow;
    font-weight: bold;
    width: 50pt;
    padding-left: 10pt;
}

a {
    text-decoration: none;
}

a:hover {
    background-color: #bb0;
    font-weight: bold;
}

.sd {
    border-top-style: none;
}

.a1,.a2 {
    border-style: none;
}
.errorMessage{
  color: red;
  font-weight: bold;
}
</style>
<script type="text/javascript">
    function con() {
        b = document.getElementById_x_x_x_x("ct").value.trim();
        a = "请输入内容信息...";
        if (a == b) {
            document.getElementById_x_x_x_x("ct").value = "";
        }

    }
    function con2() {
        b = document.getElementById_x_x_x_x("ct").value.trim();
        if (b == "") {
            document.getElementById_x_x_x_x("ct").value = "请输入内容信息...";
        }
    }
    function modify(){
        tForm=document.forms[0];
        id=document.getElementById_x_x_x_x("InsertNewsAction_newsID").value;
        tForm.action="ModifyAction?modify="+id;
    }
</script>
</head>

<body style="background-image: url('images/liu.jpg');">
   <div align="right"><a href="index.jsp">
   <img alt="home_icon" src="images/home_icon.png" width="30" height="30" /></a>
   <br /><a href="index.jsp" style="margin-right: 6px;font-size: 8;"><b>首页</b></a>
   </div>
  
    <s:form action="InsertNewsAction">
        <table border="1" align="center" style="margin-top: 30pt;" class="sd">
            <tr>
                <td align="left" class="a1"><a href="findAllAction">查看新闻</a>
                </td>
                <td align="right" class="a2"><a href="findAllAction?name=search">检索新闻</a>
                </td>
            </tr>

            <tr align="center">
                <td align="center" colspan="2"><h2>&nbsp;&nbsp;请输入新闻信息&nbsp;&nbsp;</h2>
                </td>
            </tr>

            <s:if test="#parameters.modify!=null" >
                <s:iterator value="news" id="n" >
                    <s:set name="ids"><s:property value="#n.id" /></s:set>
                    <s:set name="title" ><s:property value="#n.title" /></s:set>
                    <s:set name="content"><s:property value="#n.content" /></s:set>
                    <s:set name="source"><s:property value="#n.source" /></s:set>
                    <s:textfield name="title" label="标题" value="%{title}" />
                    <s:textarea name="content" cols="50" rows="10" label="内容"
                    value="%{content}" />
                    <s:textfield name="source" label="来源" value="%{source}" />
                    <s:hidden name="newsID" value="%{ids}" />
                </s:iterator>
                <td colspan="2" align="center"><s:submit value="提交"
                    theme="simple" onclick="modify()" /> <s:reset value="重置" theme="simple" /></td>
                   
            </s:if>
            <s:else>
                <s:textfield name="title" label="标题" />
                <s:textarea name="content" cols="50" rows="10" label="内容" id="ct"
                    value="请输入内容信息..." onclick="con()" onblur="con2()" />
                <s:textfield name="source" label="来源" />
               
                <td colspan="2" align="center"><s:submit value="提交"
                    theme="simple" /> <s:reset value="重置" theme="simple" /></td>
            </s:else>

            <tr align="center">
                <td align="right" colspan="2" style="color:#0000CD;font-weight: bold;">当前时间: <s:bean var="now"
                        name="java.util.Date" /> <s:date name="#now" />&nbsp;</td>
            </tr>
        </table>
        <c:if test="${param.mess=='success' }">
            <div align="center"
                style="color: red;padding-top: 3pt;font-weight: bold;">插入成功</div>
        </c:if>
       
        <c:if test="${param.mess=='error' }">
            <div align="center"
                style="color: red;padding-top: 3pt;font-weight: bold;">插入失败,请重新提交数据</div>
        </c:if>
    </s:form>

</body>
</html>


好了,晕,这么迟了?好吧,今天就先写到这了,上面的程序已经完成了整个项目的1/4进度,还不能正常的运行网站。具体的,下次再贴上吧。呵呵。。。。。。。。。。。。。

************************************************************************************************
读者注意一定要导入相关的包,相关的包可以官网进行下载,目前这个项目所需要的包如下:





==========================================================================================




猜你喜欢

转载自yisam.iteye.com/blog/1738387