WEB开发课程设计-新闻发布系统

更新时间:2023-06-09 04:04:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

新闻发布系统

《WEB开发技术课程设计》报告

——新闻发布系统

班 级:姓 名:学 号:指导教师 时 间:

新闻发布系统

目 录

第一章 需求分析 ......................................... 1

1.1 项目概述..................................................... 1 1.2 需求分析..................................................... 1

第二章 概要设计 ......................................... 2

2.1 开发与设计的总体思想 ......................................... 2 2.2 系统模块结构图 ............................................... 2 2.3 模块设计 ..................................................... 2 2.4 功能图 ........................................................ 4 2.5 数据库设计 .................................................... 4

第三章 详细设计 ......................................... 6

3.1 数据库访问 .................................................... 6 3.2 新闻浏览 ...................................................... 7 3.3 新闻管理 ...................................................... 7 3.4 上传管理 ..................................................... 11 3.5 留言管理 ..................................................... 14 3.6 用户管理 ..................................................... 15 3.7 建立数据库 ................................................... 16

第四章 软件设计结构..................................... 17

4.1 MVC模式概述: ............................................... 17 4.2 Strut2的MVC模式: ......................................... 17

第五章 设计结果评价与总结 ............................... 19

5.1设计结果 ..................................................... 19 5.2系统部分运行结果 ............................................. 21 5.3总结 ......................................................... 23

新闻发布系统

第一章 需求分析

1.1 项目概述

当今社会是一个信息化的社会,新闻作为信息的一部分,有着信息量大、类别繁多、形式多样等特点。新闻发布系统由此提出,简单地说,新闻发布系统就是充当一个网络新闻媒介的功能,主要对新闻的管理功能。随着网络的快速发展和普及,越来越多的用户习惯上网浏览新闻。本系统的主要目的就是为用户提供一个方便、及时的网上新闻发布、浏览平台。利用本系统,用户可以直接在网上发布新闻信息并根据自己的需要对新闻进行检索。

1.2 需求分析 1.2.1 功能需求描述

新闻发布系统的主要目的是为用户提供一个方便的、可快速浏览当前最新新

闻的界面,并且也可以随时发布最新的讯息以达到信息共享的目的。因此要为用户提供方便易用的使用界面,同时也为具有更高权限的管理用户提供添加、删除新闻的系统维护功能。

1.2.2 基本功能

1 查看新闻功能:任何用户均可以使用查看新闻功能。首页显示不同栏目的最新几条新闻,用户通过在系统导航栏上单击“新闻中心”超链接,可以进入查看所有新闻的页面,查看新闻,并且使用分页显示的效果,每页显示20条新闻,用户可通过单击下方的上下页及首尾页按钮来跳转到任意一页浏览。并且显示的所有新闻按发布的时间降序排列,以保证最新发布的新闻位于最前面。用户通过单击每条新闻的标题可以查看到新闻的详细内容。

2新闻搜索功能:任何用广均可以使用新闻搜索功能。通过在“查询类别”下拉列表框中选择按新闻的标题、内容、作者和发布日期等不同的查询方式来搜索符合条件的新闻。这里提供的是模糊搜索功能,即只要在查询字段中包含用户输入的关键字内容就认为是符合查询条件的记录。查询结果同样以分页的方式显示。

3 下载中心:任何用户均可以使用下载功能。用户通过在系统导航栏上单击“下载中心”超链接可以进入下载页面。该页面显示所有可供浏览者下载的文件,点击文件名即可下载相应的文件

4留言功能:为了了解网站访问者对站点的意见,本系统提供留言功能,所有用户都可以通过导航栏上的“我要留言”链接进入留言板系统进行留言,无需注册,只需填写留言内容、主题、用户名即可进行留言。

5后台管理功能:当管理员登录后台管理后,可以进行新闻管理操作,包括发布新闻,对现有新闻的修改和删除;对文件的管理操作,包括文件上传、下载、删除等;用户管理操作,对管理员用户的增加、删除及修改个人信息等;图片管理操作,包括对图片的上传、删除等;留言管理操作,包括对留言的回复、审核、删除等操作。管理员可通过单击“安全退出”按钮来安全退出。

新闻发布系统

第二章 概要设计

在前面对用户需求的分析和研究的过程中,对于本系统中几个主要的功能模块大致有了一个抽象的认识。下面将通过概要设计,给出新闻发布系统的模块结构、流程描述和用户界面布局。

2.1 开发与设计的总体思想

新闻发布系统面向各个层次的网络用户,为了使它适合更多的用户使用,系统的界面设计应该尽量做到简洁、友好、方便、易用,用户不需要专门的学习便可熟练操作。

首页主要分为七个板块:图片新闻、热点新闻、最新公告、图片掠影、天气预报、下载中心、友情链接。首页头部logo有自动切换功能,管理员进入后台后,左边为导航条,分别有:用户管理、新闻管理、文件管理、图片管理、留言管理,右边为相应操作界面。

本系统采用B/S模式,服务器端使用JSP进行动态网页的开发。并使用struts2的MVC模式,使用第三方文本编辑插件fckeditor。

2.2 系统模块结构图

依据需求分析结果,新闻发布系统可以分为六个模块:数据库访问模块、新闻查看模块、新闻管理模块、上传管理模块、留言管理模块和用户管理模块,如图2—1所示。

2-1系统模块结构图

2.3 模块设计

1、数据库访问模块:利用JavaBean封装对数据库的操作,主要包括连接数据库、添加、修改、删除、查询数据表、关闭连接等功能。当JSP页面中需要访

新闻发布系统

问数据库时直接调用这个JavaBean即可。数据库访问模块功能树如图2—2所示。

2-2数据库访问模块

2、新闻查看模块:新闻查看模块提供分页显示全部新闻的功能,用户通过单击每条新闻的标题可以查看到本条新闻的详细内容。还可以通过输入查询类别和查询关键字来选择符合条件的新闻浏览。新闻查看模块功能树如图

2—3所示。

2-3新闻查看模块

3、新闻管理模块:新闻管理模块包括修改新闻和删除新闻的功能。在进入管理模块前,需要以合法的管理员身份登录。新闻管理模块功能树如图2—4所示。

4、上传管理模块:上传管理模块包括文件上传、下载、删除功能,需以管理员身份进入系统才能操作。

5、 留言管理模块:留言管理模块包括留言查看、审核、回复、删除功能需

新闻发布系统

以管理员身份进入系统才能操作。

6、用户管理模块:用户管理模块包括对系统管理员得添加、删除及个人信息修改功能,需提供管理员权限才能进行操作。

2.4 功能图

根据以上分析,可得系统功能图如下所示:

2.5 数据库设计

本系统主要涉及四张表:管理员表(admin)、新闻表(news)、文件表(upload)、留言表(messages)。采用MySql数据库。

新闻:主要属性有Id、类别、关键字、发布人、文章来源、新闻内容、浏览次数、新闻标题以及发布时间。

管理员表:主要属性有Id、姓名、密码。

上传文件表:主要属性有Id、文件存放路径、文件名称、上传时间。 留言表:主要属性有Id、主题、内容、回复内容、留言时间、留言人、心情、头像、父级留言Id、留言人Email

新闻发布系统

存储新闻信息的news表。表结构如表2-1所示。

存储上传文件的信息upload表,表结构如2-3所示。

存储留言信息的表

新闻发布系统

第三章 详细设计

3.1 数据库访问 功能:连接数据库

实现:使用JDBC驱动,写一个工具类,提供加载驱动、建立连接、释放资源的静态方法,要用时直接通过类名.方法名调用。 package com.king.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet;

import java.sql.SQLException; import java.sql.Statement;

public final class DBConnector {

private static String url=”jdbc:mysql://localhost:3306/newssys”; private static String user = "root";

private static String password = "root"; static{ try {

Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } }

public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url,user,password); }

public static void free(ResultSet rs,Statement st,Connection con){ try {

if(rs!=null) rs.close();

} catch (SQLException e) { e.printStackTrace(); } finally { try {

if(st!=null) st.close();

} catch (SQLException e) { e.printStackTrace(); } finally{ try {

if(con!=null) con.close();

新闻发布系统

}

} }

} catch (SQLException e) { e.printStackTrace(); } }

3.2 新闻浏览

功能:通过点击新闻查看新闻的详细内容 实现:点击新闻后根据新闻ID查询出新闻详细内容,封装至新闻的JavaBean中,传至JSP页面,取出数据显示 public News getNewsDetail(String news_id){ News news = new News(); try {

con = DBConnector.getConnection();

ps = con.prepareStatement("select * from news where news_id=?");

ps.setString(1, news_id); rs = ps.executeQuery(); while(rs.next()){

news.setNews_id(rs.getInt(1));

news.setNews_type(rs.getString(2)); news.setNews_keys(rs.getString(3)); news.setNews_author(rs.getString(4)); news.setNews_origin(rs.getString(5)); news.setNews_content(rs.getString(6)); news.setNews_title(rs.getString(7)); news.setNews_read(rs.getShort(8)); news.setNews_time(rs.getString(9)); }

ps = con.prepareStatement("update news set news_read=? where news_id=?");

ps.setInt(1, news.getNews_read()+1);//将阅读次数加1 ps.setString(2, news_id); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return news; }

3.3 新闻管理

新闻发布系统

3.3.1 发布新闻:

功能:管理员在后台发布新闻。

实现:将新闻的信息存入数据库,添加成功则返回true,否则返回false public boolean addArticle(String news_type, String news_title, String news_keys, String news_author, String news_content,

String news_origin, String news_time, int news_read){ boolean b = false;

String sql = "insert into news values (null,?,?,?,?,?,?,?,?)"; try {

con = DBConnector.getConnection(); ps = con.prepareStatement(sql); ps.setString(1, news_type); ps.setString(2, news_keys); ps.setString(3, news_author); ps.setString(4, news_origin); ps.setString(5, news_content); ps.setString(6, news_title); ps.setInt(7, news_read); ps.setString(8, news_time);

int result = ps.executeUpdate(); if (result != 0) { b = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return b; }

3.3.2 编辑新闻:

功能:修改新闻内容

实现:根据新闻的ID,修改新闻信息。成功则返回true,否则返回false public boolean editArticle(String news_type, String

news_title,String news_keys, String news_author, String news_content,String news_origin, String news_time, int news_read,String news_id){ boolean b = false;

String sql = "update news set

news_type=?,news_keys=?,news_author=?,news_origin=?,news_content=?,news_title=?,news_read=?,news_time=? where

新闻发布系统

news_id=?"; try {

con = DBConnector.getConnection(); ps = con.prepareStatement(sql); ps.setString(1, news_type); ps.setString(2, news_keys); ps.setString(3, news_author); ps.setString(4, news_origin); ps.setString(5, news_content); ps.setString(6, news_title); ps.setInt(7, news_read); ps.setString(8, news_time); ps.setString(9, news_id);

int result = ps.executeUpdate(); if (result != 0) { b = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return b; }

3.3.3 删除新闻:

功能:删除指定新闻

实现:根据该新闻ID删除记录,成功返回true,否则返回false. public boolean deleteNews(String news_id){ boolean b = false; try {

con = DBConnector.getConnection();

ps = con.prepareStatement("delete from news where news_id=?");

ps.setString(1, news_id); if(ps.executeUpdate()!=0){ b=true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return b;

新闻发布系统

3.3.3 搜索新闻:

功能:根据关键字搜索新闻

实现:接收搜索关键字,对新闻进行模糊搜索,并将搜索结果封装到一个PageModel的Bean中,该Ban存放了搜索结果的所有信息,返回至JSP页面后即可取出相应信息并显示。

public PageModel<News> searchNews(String key,int pageNow){ PageModel<News> newsModel = new PageModel<News>(); ArrayList<News> newsList = new ArrayList<News>(); int totalRecord=0; try {

con = DBConnector.getConnection();

ps = con.prepareStatement("select count(*) from news where news_title like ?");

ps.setString(1, "%"+key+"%"); rs = ps.executeQuery(); if(rs.next()){

totalRecord = rs.getInt(1); }

ps = con.prepareStatement("select * from news where news_title like ? limit ?,?");

ps.setString(1, "%"+key+"%");

ps.setInt(2, pageSize*(pageNow-1)); ps.setInt(3, pageSize); rs = ps.executeQuery(); while(rs.next()){

News news = new News();

news.setNews_id(rs.getInt(1));

news.setNews_type(rs.getString(2)); news.setNews_keys(rs.getString(3)); news.setNews_origin(rs.getString(5)); news.setNews_title(rs.getString(7)); news.setNews_time(rs.getString(9));

newsList.add(news); }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

newsModel.setList(newsList);

newsModel.setPageNow(pageNow);

新闻发布系统

newsModel.setTotalRecords(totalRecord); return newsModel; }

3.4 上传管理 3.4.1 上传文件

功能:实现文件上传,可一次上传多个文件,并对文件大小、类型进行过滤 实现:使用apache的common-fileupload组件实现,将文件上传至服务器,同时在数据库中存储相应文件的信息。 1、上传至服务器:

package com.king.action; import java.io.File;

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.List;

import org.apache.struts2.ServletActionContext; import com.king.dao.UploadManager; import com.king.utils.DateFormatEditor;

import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport {

private List<File> file; //file对应于表单的file private List<String> fileFileName; private List<String> fileContenType; private String savePath; private int id;

UploadManager uploadManager = new UploadManager(); public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getSavePath() { return savePath; }

public void setSavePath(String savePath) { this.savePath = savePath; }

public List<File> getFile() {

新闻发布系统

return file; }

public void setFile(List<File> file) { this.file = file; }

public List<String> getFileFileName() { return fileFileName; }

public void setFileFileName(List<String> fileFileName) { this.fileFileName = fileFileName; }

public List<String> getFileContenType() { return fileContenType; }

public void setFileContenType(List<String> fileContenType) { this.fileContenType = fileContenType; }

@SuppressWarnings("deprecation") @Override

public String execute(){ try{

for(int i = 0;i < file.size();++i){ if(file.get(i).length()!=0){

InputStream is = new FileInputStream(file.get(i)); String root = ServletActionContext.getRequest().getRealPath(this.getSavePath()); File destFile = new File(root,this.getFileFileName().get(i)); String time = new DateFormatEditor().dateEditor2(new Date());

if(uploadManager.savePath(null,this.getFileFileName().get(i), time)){

OutputStream os = new FileOutputStream(destFile);

int length = 0;

byte[] buffer = new byte[400];

while((length = is.read(buffer)) >0){ os.write(buffer, 0, length); }

is.close(); os.close();

ServletActionContext.getRequest().setAttribute("state", "uploadFileSucc");

return SUCCESS;

新闻发布系统

}else{

return ERROR; } }else{

return ERROR; } }

}catch(Exception e){ e.printStackTrace(); return ERROR; }

return SUCCESS; } }

2、文件信息存入数据库:

public boolean savePath(String filePath,String name,String time) { boolean flag = false;

String sql = "insert into upload values (null,?,?,?)"; try {

con = DBConnector.getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, filePath); pstmt.setString(2, name); pstmt.setString(3, time);

int result = pstmt.executeUpdate(); if(result != 0) { flag = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, pstmt, con); }

return flag; }

3.4.2 删除文件

功能:删除服务器中供下载的文件

实现:删除服务器中供下载的文件,并删除数据库中相应的记录 package com.king.action; import java.io.File;

import org.apache.struts2.ServletActionContext; import org.omg.CORBA.Request;

import com.king.dao.UploadManager;

新闻发布系统

import com.opensymphony.xwork2.ActionSupport; public class DeleteFileAction extends ActionSupport { private int id;

public int getId() { return id; }

public void setId(int id) { this.id = id; }

@Override

public String execute() throws Exception {

UploadManager manager = new UploadManager(); String path = ServletActionContext.getRequest().getRealPath("/upload/file");

System.out.println(manager.getFileNameById(this.getId())); File file = new File(path,manager.getFileNameById(this.getId())); try{

if(manager.deleteFile(this.getId())){ file.delete();//删除磁盘上的文件

ServletActionContext.getRequest().setAttribute("state", "deleteFileSuc"); }

}catch(Exception e){ e.printStackTrace();

ServletActionContext.getRequest().setAttribute("state", "deleteFileFail");

return ERROR; }

return SUCCESS; } }

3.5 留言管理

功能:删除留言

实现:根据后台指定要删除留言的Id,在数据库中删除留言及其下级留言 public boolean deleteMessage(String id){ boolean b = false; try {

con = DBConnector.getConnection();

ps =con.prepareStatement("delete from messages where pid=?");

ps.setString(1, id); ps.executeUpdate();

新闻发布系统

ps = con.prepareStatement("delete from messages where Id=?");

ps.setString(1, id);

if(ps.executeUpdate()==1){ b = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, null, con); }

return b; }

3.6 用户管理 3.6.1 添加用户

public boolean addUser(String username,String password){ boolean b = false; try {

con = DBConnector.getConnection(); ps = con.prepareStatement("insert into admin(name,password) values(?,?)"); ps.setString(1, username); ps.setString(2, password); if(ps.executeUpdate()==1){ b = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return b; }

3.6.2 删除用户

public boolean delUser(String userid){ boolean b = false; try {

con = DBConnector.getConnection();

ps = con.prepareStatement("delete from admin where Id=?");

ps.setString(1, userid);

新闻发布系统

}

if(ps.executeUpdate()==1){ b = true; }

} catch (SQLException e) { e.printStackTrace(); }finally{

DBConnector.free(rs, ps, con); }

return b;

3.7 建立数据库

本系统采用MySql6.0数据库

3.7.1 表admin:

CREATE TABLE `admin` (

`Id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT '', `password` varchar(30) DEFAULT NULL, PRIMARY KEY (`Id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk; 3.7.2 表news:

CREATE TABLE `news` (

`news_id` int(11) NOT NULL AUTO_INCREMENT, `news_type` varchar(10) NOT NULL, `news_keys` varchar(50) DEFAULT '', `news_author` varchar(30) DEFAULT '', `news_origin` varchar(80) DEFAULT '', `news_content` longtext NOT NULL, `news_title` varchar(100) NOT NULL, `news_read` int(11) DEFAULT '0', `news_time` varchar(20) NOT NULL, PRIMARY KEY (`news_id`)

) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=gbk; ` 3.7.3 表upload:

CREATE TABLE `upload` (

`id` int(11) NOT NULL AUTO_INCREMENT, `path` varchar(100) DEFAULT NULL, `name` varchar(30) NOT NULL, `time` varchar(30) NOT NULL, PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=gbk;

新闻发布系统

第四章 软件设计结构

本系统采用Struts2框架的MVC模式实现,系统架构如图所示:

4.1 MVC模式概述:

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。

4.2 Strut2的MVC模式:

本系统采用Struts2的MVC模式,视图、模型、控制器分别如下: 持久层:Model部分

由JavaBean组成,ActionForm用于封装用户的请求参数,封装成

ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。 JavaBean则封装了底层的业务逻辑,包括数据库访问等。

新闻发布系统

视图层:View部分

该部分采用JSP实现。

Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应下图的JSP部分。

控制层:Controller组件

Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。

系统核心控制器,对应下图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。 业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。

新闻发布系统

第五章 设计结果评价与总结

5.1设计结果

首页:

新闻中心:

本文来源:https://www.bwwdw.com/article/dd21.html

Top