基于SSH的Java EE新闻发布系统
项目介绍
基于Struts + Spring + Hibernate + Bootstrap 技术开发的新闻发布系统。
代码已经上传github,下载地址: Github
项目分为两个模块:用户模块 管理员模块
设计指标:
1)使用Struts2、Hibernate和Spring框架实现新闻管理系统的前台和后台。
前台功能(用户模块):
a)首页按新闻类型分块列表显示每类新闻;
每条新闻显示的内容包括新闻标题和发布时间,要求对标题设置超链接,点击该链接后新开一个页面显示该新闻标题、发布时间、内容和来源。
b)在首页中还可以实现标题的模糊查询以及发布时间的范围查询。
后台功能管理员模块():
a)后台必须具有权限的用户才可以登录。
b)进入后台的用户,可以管理新闻类型和新闻。
c)新闻类型管理包括:发布新闻类型、新闻类型查看。点击新闻类型后打开新闻类型列表。在列表中的每条类型可以执行删除和更新操作。
d)新闻管理包括:发布新闻、新闻查看。点击新闻类型后打开新闻类型列表。在列表中的每条类型可以执行删除和更新操作。
e)新闻列表显示时可分页显示(可选)
f)要求用户登录以及发布新闻类型时进行非空校验;发布新闻时进行标题、内容等项目的非空校验,另外要求新闻必须属于某个类型。
2)要求使用连接池和事务管理。
功能比较简单 意在熟悉使用ssh框架
进入正题
新建一个Web项目导入 hibernate5、Struts2、spring5 的jar包
系统功能:
前台主要是时事新闻的浏览,用户注册及登录,用户评论新闻等功能。后台为管理员对新闻以及新闻栏目的CRUD操作,新闻审核,权限以及角色的控制等。
技术选型
后端技术:
Struts
Spring
Hibernate
EhCache——缓存框架
JSP
前端技术:
jQuery
Bootstrap
UEditor——在线HTML编辑器
模块介绍
公共类设计
Web.xml中配置Struts及初始化Spring容器,制定WEB-INF路径下applicationContex.xml文件作为Spring配置文件,在Spring中定义数据源Bean,使用C3P0数据源,定义Hibernate的SessionFactory,并依赖注入数据源。
magicgis.newssystem.models
实体类及Hibernate持久化配置文件。
magicgis.newssystem.dao
DAO层。
magicgis.newssystem.services
Service层。
magicgis.newssystem.actions
web层。
magicgis.newssystem.cache
EhCache缓存键值生成器。
magicgis.newssystem.constant
常量类。
magicgis.newssystem.listener
ApplicationListener监听。
magicgis.newssystem.interceptor
Struts拦截器。
magicgis.newssystem.filter
Struts过滤。
magicgis.newssystem.aware
管理权限接口。
JSP模块
WEB-INF/views、WEB-INF/admin、WebRoot/admin。
数据模型
数据模型
环境搭建
开发工具
MySQL: 数据库
Tomcat: 应用服务器
SVN: 版本管理
MyEclipse: 开发IDE
PowerDesigner: 建模工具
开发环境
Jdk8
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>后台管理</title>
<script type="text/javascript" src='<s:url value="/js/jquery-1.10.2.min.js" />' /></script>
<script type="text/javascript" src='<s:url value="/js/admin.js" />' /></script>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="147" background='<s:url value="/images/top02.gif" />'><img
src='<s:url value="/images/top04.gif" />' width="776" height="147" /></td>
</tr>
</table>
<table width="562" border="0" align="center" cellpadding="0"
cellspacing="0" class="right-table03">
<tr>
<td width="221"><table width="95%" border="0" cellpadding="0"
cellspacing="0" class="login-text01">
<tr>
<td><table width="100%" border="0" cellpadding="0"
cellspacing="0" class="login-text01">
<tr>
<td align="center"><img
src='<s:url value="/images/ico13.gif" />' width="107"
height="97" /></td>
</tr>
<tr>
<td height="40" align="center"> </td>
</tr>
</table></td>
<td><img src='<s:url value="/images/line01.gif" />' width="5"
height="292" /></td>
</tr>
</table></td>
<td><table width="100%" border="0" cellspacing="0"
cellpadding="0">
<s:form action="AdminAction_doneLogin" method="post" theme="simple">
<legend class="top-font01">管理员登录</legend>
<br>
<tr>
<td width="31%" height="35" class="login-text02">用户名:<br /></td>
<td width="69%"><input id="username" name="username"
type="text" size="30" /></td>
</tr>
<tr>
<td width="31%" height="35" class="login-text02">密 码:<br /></td>
<td width="69%"><input id="password" name="password"
type="password" size="31" /></td>
</tr>
<tr>
<td height="35" class="login-text02">验证图片:<br /></td>
<td width="92" valign="bottom"><img
src="AdminAction_getRandomPictrue" width="100" height="40"
οnclick="adminChangeValidateCode(this)" /><span
class="login-text02">(点击图片更换验证码)</span></td>
</tr>
<tr>
<td height="35" class="login-text02">请输入验证码:</td>
<td><input id="validationCode" name="validationCode"
type="text" size="30" /></td>
</tr>
<tr>
<td width="100%" height="35" class="login-text02" colspan="2"><font
color="red"><s:actionerror></s:actionerror></font></td>
</tr>
<tr>
<td height="35"> </td>
<td><input type="submit" class="right-button01" value="登陆" /></td>
</tr>
</s:form>
</table></td>
</tr>
</table>
</body>
</html>