作者主页:编程千纸鹤
作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
项目编号:BS-PT-109
前言:
随着电脑、智能手机等能够连接网络设备的家庭化和大众化,各种网站开始被设计和开发出来,功能多种多样,涉及的领域也各有不同,生活、商业、科技等等。而信息的发布是网络的一大特点,人们上网的主要需求就是汲取自己想要的信息或者感兴趣的信息,因此新闻发布及管理系统也就此诞生。
从近几年WEB网站如春笋般出现不难看出人们对外界信息了解很大程度上依赖于信息类发布网站,由于智能手机的普及会导致该需求在日益增长,人们都开始依赖于这些信息类发布网站,对信息的阅读也不仅仅只限于几个信息发布网站,而是越多越好,只要是能够满足他们对信息了解的需求的网站都能够孕育而生,这些信息类发网站的出现影响了我们这一代人的生活习惯和信息获取方式,也为人们茶前饭后的业余生活增添了色彩。
上述就是我会选择《新闻发布及管理系统》作为我的毕业设计题目的原因。
本文所描述的《新闻发布及管理系统》的设计和开发技术,前端设计方面运用了B/S技术,只为了给用户最完美的用户操作体验。本应用的后台开发运用的是java开发技术,数据库采用了MySQL数据库进行数据的存储操作。
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:JSP,Servlet,JDBC
二,项目简介
新闻推荐系统,在充分了解新闻业务流程的基础上,采用一系列最新的信息处理技术,对新闻进行科学化管理,实现了新闻信息的最广泛共享,使新闻可以通过计算机网络完成发布。而用户则随时随地都可以通过计算机浏览该网站。
新闻发布系统别称消息管理和信息编辑管理系统,它能够将网站上的好多消息,消息管理者等主要知识实现集中的操作,以信息的内容类别进行分类,然后整体化,标准化,规范化整到网上再放到网站上供人们查阅的的一类网络信息的管理程序,它可以使用网络互联网为开发组件组件消息发布系统,页面内的消息透过这个简单的插入项加入数据,最后把设计制作的网页的例子插入进去这样就可以发布到网站供浏览者观看。利用互联网数据库,把网站的管理方法简化到至用录入文字就可以完成,进而使站点可以更快速调用实时信息,通过新闻发布系统可以有效减少站点管理维护的工作量,对消息的发展速率有了非常可观提高。
科学技术日新月异发展的今天,生活节奏加快导致的人民需求也提高。人们渴望获得更加及时性,简单明确的新闻消息。传统的以报纸期刊,杂志已经不能满足人们期待获得第一手消息的愿望。因此,以互联网为传媒单位的新闻发布管理系统开始逐步替代原有的落后的消息,而成为当代新的潮流方式。新闻采编发布系统以最迅速便捷的方式,使得人们不需要出门而获得分享世界各地的资源,进行交流。而新闻网站的时效性,让所有的评论和阅读可以实时更新。新闻采编发布系统,是通过管理网上发布的新闻和评论,将变动的信息进行有效的管理,网络用户因此可以获得新闻的多媒体显示。 论文介绍了新闻发布管理系统的研究背景、项目意义和目前的研究与应用现状,明确了论文研究的内容和主要工作;进行业务分析的过程后,系统存在的问题、整体结构、原来的业务流程等都做了进一步的研究,由此得到了改造后的业务流程;模块的功能分析,用例分析和用例描述,并确定了系统的功能,该系统图和包图和子功能的整体功能,包括新闻发布和其他包图;最后的数据分析环节中,整个系统每个功能模块所需要处理的数据都有被分析讨论,根据这些数据之间的关系,实体类关系图和数据库表结构建立起来;文章最后的部分是新闻发布管理系统研究与分析工作进行了总结,提出了分析中存在的问题,对将来的深入工作投入更多的努力和细致的研究,做出了新的展望。
本系统的目的是实现新闻发布系统的基本功能。新闻发布系统提供了不同类型新闻(如社会新闻、娱乐新闻和技术前沿新闻等) 满足不同用户需求;系统将用户分为:普通用户,系统管理员和新闻管理员。 普通用户能在本系统中进行新闻浏览,阅读,新闻搜索。每条新闻的标题被做成一个链接,用户点击它们就能跳转页面进行新闻阅读;新闻阅读页面,每条新闻的详细信息将被取出,包括内容、标题等;用户能根据自己的需要搜索新闻,如可以通过新闻标题或新闻内容对新闻进行搜索,这样可以快速地找到符合条件的新闻,并输出搜索结果;用户能对新闻进行被评论(允许匿名评论)。 系统管理员可以进行新闻分类管理、添加新闻、修改新闻、新闻审核和删除新闻,同时系统管理员能完成用户管理如包括系统用户管理、添加用户和更改账号。 新闻管理员拥有添加新闻和更改账号的权限。根据用户不同,给予不同权限,这样加强系统的管理,同时加强系统的安全性。
普通用户的用例图如图3-1,普通用户可以浏览新闻,用户登入,新闻评论的功能;
图3-1普通用户用例图
管理员用户用例图3-2管理员拥有用户登入,评论管理,新闻栏目管理,新闻管理这些权限。
图3-2管理员用户用例图
为了确保正确的数据在系统中能够客观真实地反映世界,其中的一些完整性规则通过一些控制的标准作业应用程序来实现。数据库要具有安全性,这数据库系统重要的一个方面,它是指保护数据库以防止非法使用,包括破坏和未授权访问等行为。
但是由于本次设计开发的系统涉及到的数据都不具备保密性的数据,因此不需要采取特别复杂的安全措施,只须防止数据被人随意改动即可。根据系统要求,可以列出以下数据项和数据结构,下面用E-R图2-4来表示实体模型
为了确保正确的数据在系统中能够客观真实地反映世界,其中的一些完整性规则通过一些控制的标准作业应用程序来实现。数据库要具有安全性,这数据库系统重要的一个方面,它是指保护数据库以防止非法使用,包括破坏和未授权访问等行为。
但是由于本次设计开发的系统涉及到的数据都不具备保密性的数据,因此不需要采取特别复杂的安全措施,只须防止数据被人随意改动即可。根据系统要求,可以列出以下数据项和数据结构,下面用E-R图2-4来表示实体模型
图2-4实体模型
三,系统展示
首页
用户注册
用户登录
新闻浏览
后台管理
栏目管理
新闻管理
四,核心代码展示
package com.action;
/*** 管理员登陆 增加 修改 删除 删除登陆日志*/
import java.io.IOException;
import java.util.List;
import java.util.StringTokenizer;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.bean.AdminBean;
import com.bean.SystemBean;
import com.util.Constant;
import com.util.MD5;public class AdminServlet extends HttpServlet {/*** Constructor of the object.*/public AdminServlet() {super();}/*** Destruction of the servlet. <br>*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(Constant.CONTENTTYPE);request.setCharacterEncoding(Constant.CHARACTERENCODING);try{String method=request.getParameter("method").trim();AdminBean loginbean = new AdminBean();HttpSession session = request.getSession();session.setMaxInactiveInterval(1200);SystemBean systembean = new SystemBean();String sysdir = systembean.getDir();if(method.equals("one")){//管理员登录String username = request.getParameter("username");String password = request.getParameter("password");if(username == null||username.trim().equals("")){request.setAttribute("message", "请正确输入用户名!");request.getRequestDispatcher(sysdir+"/login.jsp").forward(request, response);}else if(password == null||password.trim().equals("")){request.setAttribute("message", "请输入密码!");request.getRequestDispatcher(sysdir+"/login.jsp").forward(request, response);}else{String md5password = MD5.MD5(password);String agent = request.getHeader("user-agent"); StringTokenizer st = new StringTokenizer(agent,";"); String useros=st.nextToken();String loginip = request.getRemoteAddr(); int flag = loginbean.adminLogin(username,md5password, password,useros,loginip);switch (flag){case Constant.SUCCESS:List list = loginbean.getAdminInfo(username);session.setAttribute("user", username);session.setAttribute("list", list);request.getRequestDispatcher(sysdir+"/").forward(request, response);break;case Constant.NAME_ERROR:request.setAttribute("message", "用户名错误!请确认管理权限!");request.getRequestDispatcher(sysdir+"/login.jsp").forward(request, response);break;case Constant.PASSWORD_ERROR:request.setAttribute("message", "密码错误,请确认管理权限!");request.getRequestDispatcher(sysdir+"/login.jsp").forward(request, response);break;}}}else if(method.equals("editpwd")){//修改密码String username2 = (String)session.getAttribute("user");if(username2 == null){request.getRequestDispatcher("error.jsp").forward(request, response);}else{String oldpwd = MD5.MD5(request.getParameter("oldpwd").trim());String newpwd = MD5.MD5(request.getParameter("newpwd").trim());String username = (String)session.getAttribute("user");int flag = loginbean.editPassword(username, oldpwd, newpwd);switch (flag){case Constant.SUCCESS:request.setAttribute("message", "密码修改成功!");request.getRequestDispatcher(sysdir+"/system/editpwd.jsp").forward(request, response);break;case Constant.PASSWORD_ERROR:request.setAttribute("message", "原始密码错误,请确认权限!");request.getRequestDispatcher(sysdir+"/system/editpwd.jsp").forward(request, response);break;case Constant.SYSTEM_ERROR:request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher(sysdir+"/system/editpwd.jsp").forward(request, response);break;}} }else if(method.equals("exit")){//退出String username2 = (String)session.getAttribute("user");if(username2 == null){request.getRequestDispatcher("error.jsp").forward(request, response);}else{session.removeAttribute("user");session.removeAttribute("list");System.gc();request.getRequestDispatcher("index.jsp").forward(request, response);} }else if(method.equals("manager")){//增加管理员String username2 = (String)session.getAttribute("user");if(username2 == null){request.getRequestDispatcher("error.jsp").forward(request, response);}else{String ra = request.getParameter("ra").trim();if(ra.equals("add")){String username = request.getParameter("username").trim();String password = MD5.MD5(request.getParameter("password").trim());String isuse = request.getParameter("isuse").trim();if(isuse.equals("在用"))isuse = "1";elseisuse = "2";int flag = loginbean.addManager(username, password, "2", isuse);if(flag == Constant.SUCCESS){request.setAttribute("message", "增加管理员成功!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);}else if(flag == Constant.SAME_NAME){request.setAttribute("username", username);request.setAttribute("message", "该用户名已经存在!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);} }else if(ra.equals("update")){String username = request.getParameter("username").trim();String password = request.getParameter("password").trim();String isuse = request.getParameter("isuse").trim();if(!password.equals("")){password = MD5.MD5(password);}if(isuse.equals("在用"))isuse = "1";elseisuse = "2";int flag = loginbean.updateManager(username, password, "2", isuse);if(flag == Constant.SUCCESS){request.setAttribute("message", "修改管理员信息成功!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);} else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);} }}}else if(method.equals("delm")){//删管理员String username2 = (String)session.getAttribute("user");if(username2 == null){request.getRequestDispatcher("error.jsp").forward(request, response);}else{int id = Integer.parseInt(request.getParameter("id").trim());if(id == 1){request.setAttribute("message", "不能删除原始帐号!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);}else{int flag = loginbean.delManager(id);if(flag == Constant.SUCCESS){request.setAttribute("message", "删除成功!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);} else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher(sysdir+"/system/user.jsp").forward(request, response);} }} }else if(method.equals("dellog")){//delete login noteString username2 = (String)session.getAttribute("user");if(username2 == null){request.getRequestDispatcher("error.jsp").forward(request, response);}else{String check[] = request.getParameterValues("checkit");if(check == null){request.setAttribute("message", "请选择要删除的记录!");request.getRequestDispatcher(sysdir+"/system/log.jsp").forward(request, response);}else{int id[]= new int[check.length];for(int i = 0;i<check.length;i++){int s = Integer.parseInt(check[i]); id[i] = s;}int flag = loginbean.delLog(id);if(flag == Constant.SUCCESS){request.setAttribute("message", "删除记录成功!");request.getRequestDispatcher(sysdir+"/system/log.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher(sysdir+"/system/log.jsp").forward(request, response);}}} }else{//无参数传入转到错误页面request.getRequestDispatcher("error.jsp").forward(request, response);}}catch(Exception e){e.printStackTrace();request.getRequestDispatcher("error.jsp").forward(request, response);}}/*** Initialization of the servlet. <br>** @throws ServletException if an error occure*/public void init() throws ServletException {// Put your code here}}
package com.action;/*** 会员注册、修改资料等* @author Administrator**/import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.bean.MemberBean;
import com.bean.SystemBean;
import com.util.Constant;
import com.util.Filter;
import com.util.MD5;public class MemberAction extends HttpServlet {/*** Constructor of the object.*/public MemberAction() {super();}/*** Destruction of the servlet. <br>*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(Constant.CONTENTTYPE);request.setCharacterEncoding(Constant.CHARACTERENCODING);HttpSession session = request.getSession();MemberBean memberBean = new MemberBean();String method = Filter.escapeHTMLTags(request.getParameter("method").trim());/********************************************** 会员注册通用(检查用户名 修改密码 reg2.jsp页面跳转)*********************************************/if(method.equals("reg2")){//会员注册 reg2.jspString username = Filter.escapeHTMLTags(request.getParameter("username").trim());String password = Filter.escapeHTMLTags(request.getParameter("password").trim());String reg_type = Filter.escapeHTMLTags(request.getParameter("reg_type").trim());request.setAttribute("username", username);request.setAttribute("password", password);request.setAttribute("reg_type", reg_type);if(username.trim().equals("admin")){request.setAttribute("username", username);request.setAttribute("message", "非法的用户名,请重新选择!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}else{int flag = memberBean.checkRegName(username);if(flag == Constant.SUCCESS){if(reg_type.equals("person")){//如果是个人会员request.getRequestDispatcher("personreg.jsp").forward(request, response);}else if(reg_type.equals("co")){//如果是企业会员request.getRequestDispatcher("coreg.jsp").forward(request, response);}else{request.getRequestDispatcher("index.jsp").forward(request, response);}}else if(flag == Constant.SAME_NAME){request.setAttribute("username", username);request.setAttribute("message", "对不起,该用户名已存在,请重新选择!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}}}else if(method.equals("checksame")){//检查注册名是否可用String username = Filter.escapeHTMLTags(request.getParameter("username").trim());if(username.trim().equals("admin")){request.setAttribute("username", username);request.setAttribute("message", "非法的用户名,请重新选择!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}else{int flag = memberBean.checkRegName(username);if(flag == Constant.SUCCESS){request.setAttribute("username", username);request.setAttribute("message", "恭喜您,这个名字可以使用!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}else if(flag == Constant.SAME_NAME){request.setAttribute("username", username);request.setAttribute("message", "对不起,该用户名已存在,请重新选择!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher("reg2.jsp").forward(request, response);}}}else if(method.equals("Editpwd")){//会员修改登陆密码String member=(String)session.getAttribute("member");String type=(String)session.getAttribute("type");if(member==null||type==null){response.sendRedirect("error.jsp");}else{String oldpwd = MD5.MD5(request.getParameter("oldpwd").trim());String newpwd = MD5.MD5(request.getParameter("newpwd").trim());int flag = memberBean.editPassword(member, oldpwd, newpwd);switch (flag){case Constant.SUCCESS:request.setAttribute("message", "密码修改成功!");request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response);break;case Constant.PASSWORD_ERROR:request.setAttribute("message", "原始密码错误,请确认权限!");request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response);break;case Constant.SYSTEM_ERROR:request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response);break;}}}/********************************************** 个人会员注册、修改资料 *********************************************/else if(method.equals("PREG")){//个人会员详细资料String username = Filter.escapeHTMLTags(request.getParameter("username").trim());String password = Filter.escapeHTMLTags(request.getParameter("password").trim());String type = "person";String realname = Filter.escapeHTMLTags(request.getParameter("realname").trim());String sex = Filter.escapeHTMLTags(request.getParameter("sex").trim());String sheng = Filter.escapeHTMLTags(request.getParameter("sheng").trim());String city = Filter.escapeHTMLTags(request.getParameter("city").trim());String bir = Filter.escapeHTMLTags(request.getParameter("bir").trim());String telphone = Filter.escapeHTMLTags(request.getParameter("telphone").trim());String email = Filter.escapeHTMLTags(request.getParameter("email").trim());String question = Filter.escapeHTMLTags(request.getParameter("question").trim());String answer = Filter.escapeHTMLTags(request.getParameter("answer").trim());String address = Filter.escapeHTMLTags(request.getParameter("address").trim());String lastip = request.getRemoteAddr();int off = 1;int flag = memberBean.personReg(username, password, type, realname, sex, bir,sheng,city, telphone, email, question, answer, lastip, off,address);if(flag == Constant.SUCCESS){List siteList = new SystemBean().getSiteInfo();String sitename = siteList.get(0).toString();request.setAttribute("message", "注册成功!恭喜您成为"+sitename+"的注册会员!");request.getRequestDispatcher("login.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher("personreg.jsp").forward(request, response);}}else if(method.equals("UPREGINFO")){//个人会员修改资料String member=(String)session.getAttribute("member");String type=(String)session.getAttribute("type");if(member==null||type==null){response.sendRedirect("error.jsp");}else{String realname = Filter.escapeHTMLTags(request.getParameter("realname").trim());String sex = Filter.escapeHTMLTags(request.getParameter("sex").trim());String sheng = Filter.escapeHTMLTags(request.getParameter("sheng").trim());String city = Filter.escapeHTMLTags(request.getParameter("city").trim());String bir = Filter.escapeHTMLTags(request.getParameter("bir").trim());String telphone = Filter.escapeHTMLTags(request.getParameter("telphone").trim());String email = Filter.escapeHTMLTags(request.getParameter("email").trim());String question = Filter.escapeHTMLTags(request.getParameter("question").trim());String answer = Filter.escapeHTMLTags(request.getParameter("answer").trim());String address = Filter.escapeHTMLTags(request.getParameter("address").trim());int flag = memberBean.uppersonReg(member, realname, sex, bir, sheng, city, telphone, email, question, answer,address);if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!");request.getRequestDispatcher("member/info/info.jsp").forward(request, response);}else{request.setAttribute("message", "系统维护中,请稍后再试!");request.getRequestDispatcher("member/info/info.jsp").forward(request, response);}}}else if(method.equals("lostpwd")){String username=request.getParameter("username");String question=request.getParameter("question");String answer=request.getParameter("answer");String reg_type=request.getParameter("reg_type");String info=memberBean.returnPwd(username, question, answer, reg_type);if(info.trim().equals("error")){request.setAttribute("message", "信息错误!");request.getRequestDispatcher("login.jsp").forward(request, response);}else{request.setAttribute("message", "您的新密码为"+info+",请登录后修改!");request.getRequestDispatcher("login.jsp").forward(request, response);}}else{request.getRequestDispatcher("index.jsp").forward(request, response);}}/*** Initialization of the servlet. <br>** @throws ServletException if an error occure*/public void init() throws ServletException {// Put your code here}}
五,项目总结
该系统的优点在于将系统一分为二,分为新闻发布系统前台和后台,分工明确,前台是给用户提供的能是用户更好的浏览新闻,后台界面是管理员管理,更新新闻,管理评论和用户信息等,其中普通用户登录前台新闻发布系统进行新闻的搜索、浏览和留言等操作,管理员登录后台新闻发布系统,进行新闻的发布、编写、修改删除等操作,对用户进行管理,能看到用户评论,对有些评论过激的用户进行删除,能一定程度上减少新闻发布系统前台的访问压力,前后台的分工也更加清楚明了,更利于各种用户的使用。
该系统使用的是MVC架构模式,能对系统的功能进行分离,对系统分成三个层次其中Model是应用程序中用于处理应用程序数据逻辑的部分是系统的模型也是核心层,View应用程序中处理数据显示的部分是系统的视图层,Controller是应用程序中处理用户交互的部分是系统的控制层,用户通过系统对数据的访问通过控制层对数据的控制之后通过模型处理再返回数据给控制层之后反馈给用户就能获取信息。
通过编写新闻发布系统我能更好的了解编程语言的强大,通过一些设计模式能是我们编写的系统更能更加强大和兼容性更加完美可拓展性更强,一款强大系统应该具有拓展性好,兼容性强,我们进行系统的设计时候多使用一些现在流行的设计模式可以是系统更加完善。