新闻发布系统ME.doc_第1页
新闻发布系统ME.doc_第2页
新闻发布系统ME.doc_第3页
新闻发布系统ME.doc_第4页
新闻发布系统ME.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告学院:信息工程学院专业名称:计算机网络技术课程设计科目Web 程序设计实训 学生姓名:裴英博指导教师:缪勇完成时间:2015年11月26日实训目的:(1)掌握MVC设计模式(2)掌握EL和JSTL(3)熟悉使用EasyUI第三方框架(4)熟练使用MyEclipse开发工具编程、调试实训任务:(1)任务1:搭建项目开发环境(2)任务2:前台新闻列表分页显示(3)任务3:新闻阅读功能(4)任务4:管理员登录功能(5)任务5:管理员后台首页面admin.jsp(6)任务6:后台新闻列表页面newslist.jsp(7)任务7:添加新闻(8)任务8:删除新闻(9)任务9:修改新闻新闻发布系统是一个信息传播平台,系统主要功能包括:新闻浏览功能、新闻发布功能和新闻管理功能。任何用户都可以通过本系统来阅读新闻信息。管理员登录系统后,可以使用新闻管理功能,新闻管理包括主题和新闻的添加、修改和删除。方案设计与论证:通过本系统后台添加的新的新闻,前台的新闻自动发生变化。主要分为两个部分:前台与后台。在前台,未登录用户可以通过选择主题,分页查看该主题的所有新闻标题,单击新闻标题可浏览新闻详细内容;在后台,管理员可以对主题和新闻进行管理。具体包括主题添加、修改和删除,新闻的查询、添加、修改和删除。根据系统需求分析,可以得到系统的模块结构: 新闻发布系统管理员功能未登录用户功能管理主题管理新闻登录与退出添加主题查看新闻标题查看主题浏览新闻添加新闻查询新闻新闻发布系统模块结构图数据库设计是系统设计中非常重要的一个环节,数据是设计的基础,直接决定系统的成败。如果数据库设计不合理、不完善,将在系统开发中,甚至到后期的维护时,引起严重的问题。根据系统需求,创建了3张表,如下所示:l 主题表(topic):用于记录新闻主题。l 新闻信息表(newsinfo):用于记录新闻相关信息。l 管理员信息表(admin):用于记录管理员登录名和密码。其中,主题表(topic)的字段说明如表26-1所示。表26-1 主题表(topic)字段名类型说明Idint(4)主题编号,主键,自增Namevarvhar(10)主题名称新闻信息表(newsinfo)的字段说明如表26-2所示。表26-2 新闻信息表(newsinfo)字段名类型说明Idint(4)新闻编号,主键,自增Titlevarchar(100)新闻标题名Authorvarchar(10)新闻发布人CreateDatedatetime发布时间Contentvarchar(10000)新闻内容Summaryvarchar(500)新闻摘要Tidint(4)所属主题,外键管理员信息表(admin)的字段说明如表26-3所示。表26-3管理员信息表(admin)字段名类型说明Idint(4)编号,主键,自增LoginNamevarchar(20)登录名LoginPwdvarchar(20)登录密码创建数据表后,设计数据表之间的关系,如图26-4所示。图26-4 系统数据表之间关系图内容:任务1 搭建项目开发环境任务2 前台新闻列表分页显示页面效果:实现步骤:(1)在com.news.entity包中创建新闻信息实体类Newsinfo.java在实体类Newsinfo.java中添加如下属性,并使用向导生成get和set方法。private int id;private String title;private String createdate;private String author;private String content;private String summary;private int tid;(2)在com.news.dao包中创建接口NewsinfoDAO,声明如下方法:public List getNewsinfoByPage(int pageIndex, int pageSize);public int getTotalPages(int pageSize);(2)在com.news.dao.impl包中创建接口NewsinfoDAO的实现类NewsinfoDAOImpl,如下所示:public List getNewsinfoByPage(int pageIndex, int pageSize) List newsList=new ArrayList();try st=conn.createStatement();String sql=SELECT * FROM newsinfo LIMIT + (pageIndex - 1) * pageSize + , + pageSize;rs=st.executeQuery(sql);while (rs.next() Newsinfo ni=new Newsinfo();ni.setId(rs.getInt(id);ni.setTitle(rs.getString(Title);ni.setAuthor(rs.getString(Author);ni.setContent(rs.getString(Content);ni.setSummary(rs.getString(Summary);ni.setTid(Integer.parseInt(rs.getString(Tid);ni.setCreatedate(rs.getString(createdate);newsList.add(ni); catch (Exception e) e.printStackTrace(); finally / con.close();return newsList;public int getTotalPages(int pageSize) int count=0;int totalPages=0;try st=conn.createStatement();String sql=SELECT count(*) as num FROM newsinfo;rs=st.executeQuery(sql);if(rs.next()count=rs.getInt(num);totalPages=(count % pageSize = 0) ? (count / pageSize): (count / pageSize + 1); catch (Exception e) e.printStackTrace(); finally/ con.close();return totalPages;(3)在com.news.servlet包中创建NewsinfoServlet,代码如下所示:public class NewsinfoServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=UTF-8);PrintWriter out = response.getWriter();String flag=request.getParameter(flag);NewsinfoDAO nd=new NewsinfoDAOImpl();if(list.equals(flag)int pageIndex=1;if(request.getParameter(pageIndex) != null) pageIndex=Integer.parseInt(request.getParameter(pageIndex);int tid=0;if(request.getParameter(tid)!=null)tid=Integer.parseInt(request.getParameter(tid);List newsList=null;int totalPages=0;if (tid0) newsList=nd.getNewsinfoByPage(tid, pageIndex, 5); totalPages=nd.getTotalPages(tid, 5);elsenewsList=nd.getNewsinfoByPage(pageIndex, 5);totalPages=nd.getTotalPages(5);(4)编辑新闻显示页index.jsp页面头部代码如下所示:页面中循环显示新闻列表的代码如下所示:$ni.title 1 首页上一页c:if test=$requestScope.pageIndex下一页尾页任务3 新闻阅读功能页面效果:实现步骤:(1)在接口NewsinfoDAO中声明如下方法:public Newsinfo getNewnewsinfoById(int id);(2)在接口NewsinfoDAO的实现类NewsinfoDAOImpl中实现该方法:public Newsinfo getNewnewsinfoById(int id) Newsinfo ni=new Newsinfo();try st=conn.createStatement();String sql=SElECT * FROM newsinfo where id= + id;rs=st.executeQuery(sql);if(rs.next()ni.setId(rs.getInt(Id);ni.setTitle(rs.getString(Title);ni.setContent(rs.getString(Content);ni.setCreatedate(rs.getString(Createdate); catch (Exception e) e.printStackTrace(); finally/ con.close();return ni;(3)在接口NewsinfoServlet中,编写else if(detail.equals(flag)部分代码,如下所示:else if(detail.equals(flag)int id=Integer.parseInt(request.getParameter(id);Newsinfo ni=nd.getNewnewsinfoById(id);request.setAttribute(ni, ni);request.getRequestDispatcher(news_read.jsp).forward(request, response);(4)编辑news_read.jsp页面页面头部代码:页面中显示新闻详细内容的代码如下: $requestScope.ni.title $requestScope.ni.createdate sport $requestScope.ni.content 任务4 管理员登录功能实现步骤:(1)在com.news.entity包中创建实体类Admin,添加如下属性private int id;private String loginName;private String loginPwd;使用向导生成上述属性的get和set方法。(2)在com.news.dao包中创建接口AdminDAO,并声明如下方法:public boolean checkLogin(Admin admin);(3)在com.news.dao.impl包中创建接口AdminDAO的实现类AdminDAOImpl,并实现该方法:public class AdminDAOImpl extends SuperOpr implements AdminDAO Overridepublic boolean checkLogin(Admin admin) try psmt=conn.prepareStatement(select * from admin + where LoginName=? and LoginPwd=?);psmt.setString(1, admin.getLoginName();psmt.setString(2, admin.getLoginPwd();rs=psmt.executeQuery();if(rs.next()return true;elsereturn false; catch (Exception e) return false;(4)在com.news.servlet包中创建LoginServletpublic class LoginServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=UTF-8);PrintWriter out = response.getWriter();String username=request.getParameter(username);String password=request.getParameter(password);Admin admin=new Admin();admin.setLoginName(username);admin.setLoginPwd(password);AdminDAO adminDAO = new AdminDAOImpl();boolean flag=adminDAO.checkLogin(admin);if (flag) request.getRequestDispatcher(admin.jsp).forward(request, response);elseresponse.sendRedirect(NewsinfoServlet?flag=list);(5)在index.jsp页面,登录部分的代码如下所示: 登录名 密码 任务5 管理员后台首页面admin.jsp页面效果:实现步骤:(1)给项目添加EasyUI框架将Easyui文件夹复制到项目的WebRoot目录下,复制后如下图所示:注意:这里出现的错误是个假象,其实并没有错误。(2)在admin.jsp页面中引入EasyUI框架打开admin.jsp文件,先将页面编码设置为:pageEncoding=utf-8。然后在标签中添加如下脚本:(3)admin.jsp页面布局先将tree_data2.json文件复制到WebRoot目录下,然后在部分编辑如下:logo版权$(#tt).tree(url:tree_data2.json);$(#tt).tree(onClick:function(node)if (新闻列表=node.text)/向Tabs中添加一个标签页tab,该标签页用于显示新闻列表页面newslist.jsp$(#tabs).tabs(add,title:node.text,href:newslist.jsp,closable:true);else if(主题列表=node.text)$(#tabs).tabs(add,title:node.text,href:newslist.jsp,closable:true););任务6 后台新闻列表页面newslist.jsp页面效果:实现步骤:(1)创建并编辑newslist.jsp文件,将页面编码设置为:pageEncoding=utf-8。在部分添加如下代码:添加 删除并在部分添加如下脚本:$(function() $(#dg1).datagrid(toolbar : #ft1,pagination : true,pageSize : 10,pageList : 10, 15, 20 ,rownumbers : true,fitColumns : true,url : NewsManagerServlet?flag=list,columns : title : 序号,field : id,checkbox : true, title : 新闻标题,field : title,width : 200, title : 作者,field : author,width : 60, title : 摘要,field : summary,width : 200, title : 内容,field : content,width : 200, title : 发布日期,field : createdate,width : 200 ););(2)在NewsinfoDAO中添加用于计算总记录数的方法getTotalCount,代码如下:public int getTotalCount() int count = 0;int totalPagas = 0;try st = conn.createStatement();String sql = SELECT count(*) as num FROM newsinfo;rs = st.executeQuery(sql);/ 将记录集中的数据包装到List中if (rs.next() count = rs.getInt(num); catch (Exception e) e.printStackTrace(); finally / con.close();return count;(3)为了解析json格式数据,需要先将第三方jar包fastjson-1.1.1.jar复制到WebRoot/WEB-INF/lib目录下。然后创建包com.news.json,将文件JsonUtil.java拷贝到其中。(4)在实体类Newsinfo中,添加如下属性:private String author;private String summary;private int tid;并使用向导给这些属性添加get和set方法。然后在NewsinfoDAO类中的getNewsinfoByPage方法的while代码部分添加如下语句:ni.setAuthor(rs.getString(Author);ni.setContent(rs.getString(Content);ni.setSummary(rs.getString(Summary);ni.setTid(Integer.parseInt(rs.getString(Tid);(5)创建并编写控制器NewsManagerServlet.java文件public class NewsManagerServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=UTF-8);PrintWriter out = response.getWriter();NewsinfoDAO nd = new NewsinfoDAOImpl();String flag = request.getParameter(flag);if (list.equals(flag) int pageIndex = 1;if (request.getParameter(page) != null) pageIndex = Integer.parseInt(request.getParameter(page);int pageSize = Integer.parseInt(request.getParameter(rows);int totalCount = nd.getTotalCount();List newsList = nd.getNewsinfoByPage(pageIndex, pageSize);/调用SERIALIZE方法将List序列化为json/String jsonNews=new JsonUtil().serialize(newsList);/out.println(total:+totalCount+,rows:+jsonNews+);System.out.println(total + : + newsList.size()+ ,rows: + new JsonUtil().serialize(newsList) + );out.println(total + : + totalCount + ,rows:+ new JsonUtil().serialize(newsList) + );else if (delete.equals(flag) /从页面获取要删除的包含多个id的字符串,传递过来的格式为1,3,4String id=request.getParameter(id);id=(+id.substring(0, id.length()-1)+);nd.DeleteNewsinfo(id);String str=success:true,message:删除成功!;out.println(str);该Servlet输出结果形如:total:10,rows:author:admin,content:中新社长沙5月30日电 湖南省防汛抗旱指挥部30日最新透露,今年入汛以来,该省因洪灾死亡人数已升至16人,另有1人失踪。,createDate:1401456616000,id:1,jsonDate:2014-05-30 21:30:16.0,summary:湖南洪灾死亡人数升至16人,另有1人失踪,tid:1,title:湖南省洪灾死亡人数升至16人 另有1人失踪, ,任务7 添加新闻0页面效果:实现步骤:(1)在newslist.jsp中创建新闻添加的对话框主题:国内新闻国际新闻娱乐新闻科技新闻社会新闻标题:作者:摘要:内容:保存 清空(2)在newslist.jsp中为“”图标添加onclick事件:添加 a href=javascript:void(0)(4)编写newNews()脚本function newNews() $(#dlg).dialog(open).dialog(setTitle, New User); $(#dlg).form(clear); urls = AddNewsinfo;/为saveNews方法准备访问url,注意是全局变量 (5)编写处理“新闻添加”对话框中保存按钮onclick事件的处理程序saveNews()function saveNews() $(#ff).form(submit, success:function(result)/此处success代表服务器成功响应客户端请求,返回200 var result=eval(+result+); if(result.success)/表示添加成功 /重新加载datagrid控件 $(#dg1).datagrid(reload); /关闭添加新闻对话框$(#dlg).dialog(close); /在页面右下角脚通过弹窗提示添加成功$.messager.show(title : 提示信息,msg : result.message); );(6)在NewsinfoDAO接口中声明方法:public void addNewsinfo(Newsinfo ni);(7)在NewsinfoDAO接口的实现类NewsinfoDAOImpl中实现addNewsinfo方法public void addNewsinfo(Newsinfo ni) try String sql=insert into Newsinfo(Title,Author,CreateDate,+Content,Summary,Tid) values(?,?,?,?,?,?);psmt=conn.prepareStatement(sql);psmt.setString(1, ni.getTitle();psmt.setString(2, ni.getAuthor();psmt.setString(3, ni.getCreatedate();psmt.setString(4, n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论