一个简单的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> 编辑新闻 </a> </td> <td><a href="findAllAction"> <b> 查看所有新闻 </a> </td> <td><a href="findAllAction?name=search"> <b> 查找新闻 </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 |
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> 请输入新闻信息 </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" /> </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进度,还不能正常的运行网站。具体的,下次再贴上吧。呵呵。。。。。。。。。。。。。
************************************************************************************************
读者注意一定要导入相关的包,相关的包可以官网进行下载,目前这个项目所需要的包如下:
==========================================================================================
上一篇: js实现人民币大写金额形式转换_javascript技巧
下一篇: JSTL-格式化标签