1、新闻发布系统绪言近年来,Internet技术得到迅速地发展,已经成为计算机产业的一个技术热点。促成Internet高速发展的因素之一就是Web技术。Web技术的发展使得那些具有交互动态页面、有条理的数据库查询、丰富信息内容的页面成为最吸引人的网页。浏览Web有着执行Window程序一样的感觉和操作性。随着Internet技术的发展,它已经成为一种操作平台为用户提供强大的服务。例如网上购物、网上电子商务、社会信息数据库服务等。作为计算机发展最迅速的领域之一,数据库技术已经形成了一整套独有的理论,并广泛地应用于人们日常的生产和生活中。数据库技术与网站的结合是当今Web技术的一个热点。有了数据库的支
2、持,可以扩展网页的功能,可以方便地设计交互式页面,可以构造功能强大的后台管理系统,可以为网站的更新、维护提供极大地方便。因此,作为网络开发者或管理者,数据库知识是必不可少的。21世纪是信息的时代,是网络的时代,进入信息社会高速发展的时代,数字化革命给所有领域带来新的改变,信息技术的发展使得整个世界越来越小,这也意味着企业的竞争环境由区域化向全球化发展,经济全球化是大趋势。企业所处的环境实际上已经不仅仅是通过信息技术员连接起来的狭义的网络,而应该是将技术环境与经济环境结合在一起考虑,形成一个大网络的概念,企业对信息的掌握程度,信息获取是否及时,信息能否得到充分利用,对信息的反应是否敏感、准确,已
3、越来越成为衡量一个企业市场竞争能力的重要因素,所以建立动态的新闻发布系统适应社会和企业发展的要求,其意义是巨大的。随着Internet的普及,无论人们相隔多远都有天涯若比邻的感觉,足不出户便可知天下新近之大事,便可与大洋彼岸的朋友畅谈无阻。随着互联网的进一步发展,网络媒体在人们心中的地位进一步提高,新闻发布系统作为网络媒体的核心系统,其重要性是越来越明显:一方面,它提供一个新闻管理和发布的功能;另一方面,现在的新闻发布要求与普通用户实现交互,用户可以很方便地参加一些调查和相关新闻的评论,这一点也是其他一些媒体现在无法做到的。同时,Internet发展到现今,可以说,只要你上Internet你就
4、会接触到新闻发布系统,新闻发布系统的用户量是相当惊人的,其重要性也是不容置疑的。当然这也对新闻发布系统的开发提出了更高的要求。基于这种考虑网络开发者提出了一种基于Web的新闻发布系统,该系统能够实现在线更新最新新闻,设置新闻分类导航等功能,此外,网站管理员也可以在线对后台进行管理,例如新闻的修改、删除等操作,以保证新闻的及时性、准确性。1 Web项目系统开发工具1.1集成开发和运行环境MyEclipseMyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、
5、发布,以及应用程序服务器的整合方面极大地提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。在结构上,MyEclipse的特征可以被分为7类:1.J2EE模型2.WEB开发工具3.EJB开发工具4.应用程序服务器的连接器5.J2EE项目部署服务6.数据库服务7.MyEclipse的整合帮助对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现他们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任
6、一模块进行单独的扩展和升级。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及出错。本系统则是基于J2EE模型,应用WEB开发工具,集合数据库服务等进行开发和发布的。1.2数据库SQlServer2005SQLServer是一个关系数据库。它最初是由Microsoft Sybase和Ashton-Tate三家公司共同开发的。SQLServer的四大基本特征:1.高可用性SQLServer 2005的失败转移集群和数据库镜像技术确保企业向员工、客户和合作伙伴提交高度可靠和可用的应用系统。2.管理工具SQLServer 2005
7、引进了一套集成的管理工具盒管理应用编程接口(APIs),以提供易用性、可管理性、及对大型 SQLServer配置的支持。3.安全性增强SQLServer 2005旨在通过数据库加密。更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特征,为企业数据提供最高级别的安全性。4.可伸缩性SQLServer 2005可伸缩性的先进性包括表格分区、复制能力的增强和64位支持。这使得SQLServer 2005成为企业数据管理和分析平台,包括电子商务、数据仓库和业务流解决方案所需的基本功能。本系统主要利用数据库来存储必要的数据,用数据库来管理数据,避免因数据量过大而造成数据紊乱无章的局面
8、。2 系统分析及模块分析2.1功能需求分析本系统需要具有以下功能(1)由于一项新的软件在使用之前,对于使用者来说是陌生和崭新的,所以要求系统具有良好的人机界面。(2)能够实现新闻发布的各项功能,能成功的对用户各种信息进行管理。(3)增删改查数据方便,数据的稳定性和可靠性好。系统采用B/S模式。整个系统最关键的就是数据库系统,一个强大的数据库可以支持完善一个优秀的软件开发,通过软件系统与数据库系统的连接来实现通过软件界面观察和处理操作数据。系统采用MVC(module view controller)三层架构,在客户端用户通过浏览器完成数据下载与模拟操作,浏览器端的表现逻辑通过JSP网页完成。而
9、系统内部复杂的业务逻辑主要通过JavaBean的组件实现,JavaBean组件在WWW服务器上运行,通过JSP返回到客户浏览器。通过表现逻辑和业务逻辑的分离,使网页内容简洁,系统的可维护性和可扩充性增强。在服务器端,系统使用JDBC中间件访问数据库,数据库服务器定义了本系统所需要的事物逻辑和数据逻辑。本系统使用JSP技术作为表现手段,服务器采用Tomcat作为JSP引擎,系统业务逻辑由JavaBean组件完成,使用JDBC驱动程序访问数据库。由于系统测试需要成熟的数据库支持,因此系统采用SQLServer2005数据库作为数据库服务器。以下为系统模式图数据库JDBC中间件JavaBeanJSP
10、网页2.2本系统采用的关键技术数据库业务逻辑服务器Browser表示逻辑2.2.1 JSP技术2.2.2JavaBean技术业务服务器数据库服务器Client2.2.3JDBC技术2.2.4用JDBC访问数据库2.2本系统采用的关键技术2.2.1 JSP技术JSP是由Sun公司倡导,许多公司参与一起建立的一种动态网页技术标准,JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入JAVA程序段(script)和JSP标记(tag),从而形成JSP文件(.jsp)。用JSP开发的WEB应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类
11、XML的tags和scriptlets来封装产生动态网页的处理逻辑。JSP将网页逻辑与网页设计和显示分离开来,支持可重用的基于组件的设计,使基于WEB的应用程序的开发变得迅速和容易,插入的Java程序段可以操作数据库,重新定向网页等,以实现建立动态网页所需要的功能。JSP技术在多个方面加速了动态Web页面的开发JSP技术的强势:1.开放的技术JSP技术基于平台和服务器的相互独立,技术支持来自广泛地、专门的、各种工具包,有服务器组件和数据库产品开发商提供。2.平台和服务器的独立性JSP编写的代码可运行在任何符合JAVA语法结构的环境中。这样JSP就能够运行在多种WEB服务器上并支持来自多家开发商
12、提供的各种工具包。3.开放的开发过程,开放的源码自1995年以来,Sun用开放过程方法同国际JAVA组织合作开发和修改JAVA技术和规范。4.JSP标记可扩充性JSP技术能够为开发者扩展JSP标记,充分利用与XML兼容的标记技术强大的功能,大大减少对脚本语言的依赖。5.JSP跨平台的可重用性JSP组件(EJB,JavaBean或定制的JSP标记)都是跨平台可重用的。2.2.2JavaBean技术JSP作为一个很好的动态网站开发语言得到了越来越广泛地应用,在各类JSP应用程序中,JSP+JavaBean的组合成为了一种事实上最常见的JSP程序的标准。JavaBean是描述JAVA的软件组件模型,
13、有点类似于Microsoft的COM组件概念。在JAVA模型中,通过JAVABean可以无限扩充JAVA程序的功能,通过JavaBean的组合可以快速的生成一个全新的组织不同功能的应用程序。如果将一个应用程序比作一个空房间,JavaBean就好比房间中的家具。对于程序员来说最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。JavaBean通过JAVA虚拟机(Java Virtual Machine)可以得到正确的执行,具有平台无关性。一个JavaBean有三个部分组成:1.属性(Property)Bean的属性就是对象的属性,但提供属性读取和设置
14、的接口支持。例如一个时钟Bean可以有时区和振铃属性,日历Bean可以有年份和月份属性。每个属性通常遵守简单的方法命名规则。这样可以很方便地找出Bean提供的属性,然后查询属性值或改变属性值,对Bean进行操作。2.方法(Method)由于Bean本身是JAVA对象,调用这个对象的方法是与其相互作用的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外界访问其任何实例字段(没有public字段)。这样方法的调用是接触Bean的唯一途径。3.事件(Event)Bean和其他软件组件交流信息的主要方式是发送和接受事件。这与对象之间通过消息通信类似。JavaBean传统的应用在于可视化领域
15、,如AWT下的应用。自从JSP诞生后,JavaBean更多的应用在非可视化领域,在服务器端应用方面表现除了越来越强的生命力。利用非可视化JavaBean来封装事物逻辑、数据库操作等等,可以很好地实现业务逻辑和前台程序(如JSP)的分离,使得系统具有更好的健壮性和灵活性。2.2.3JDBC技术JDBC是JAVA开发者Sun的JavaSoft公司制定的JAVA数据库连接JavaDataBaseConnectivity技术的简称,是为各种常用的数据库提供无缝连接的技术。JDBC在WEB和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。JDBC有一个非常独特的动
16、态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:JAVA的应用程序、JDBC驱动器管理器、驱动器和数据源。简单地说,JDBC能完成下面三件事:1.同一个数据库建立连接2.向数据库发送SQL语句3.处理数据库返回的结果JDBC是一种可用于执行SQL语句的JavaAPI(应用程序设计接口)。它由一些Java语言写成的类、界面组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可用用Java语言编写完整的数据库应用程序。通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一个数据库。也就是说,开发人员可
17、以不用写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!”。Java具有健壮、安全、易用等特性,而且支持自动网上下载,是一种很好的与数据库线连接而使用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连
18、接的关键。JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以公布一个WEB网页,页中带有能访问远端数据库的Applet。或者企业可以通过JDBC让全部的职工在Intranet上连接到几个全球数据库上,而这几个全球数据库可以是不同的。2.2.4用JDBC访问数据库所有的数据库的对象和方法都在java.sql.*里面,所以首先要import java.sql.*,要想连接数据库,首先要将驱动程序调入。Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”),这是JDBC的驱动程序。要想连接一个指定的数据库,必须创建C
19、onnection类的一个实例。String url=“jdbc:sqlserver:/localhost:1433;database=master”;String username=“sa”;String password=“123”;Connection conn=DriverManager.getConnection(url,username,password);具体实现如下:public class JDBCutil private static ThreadLocal t1=new ThreadLocal();private static Properties ps;static p
20、s=new Properties();try ps.load(JDBCutil.class.getResourceAsStream(./config/config.properties);Class.forName(ps.getProperty(driver); catch (IOException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace();/建立连接public static Connection getConnection()Connection conn=t1.get();tr
21、y if(conn=null)conn=DriverManager.getConnection(ps.getProperty(url),ps.getProperty(username),ps.getProperty(password);t1.set(conn);return conn;elsereturn conn; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return null;/关闭流public static void close(ResultSet rs,Statement
22、stm,Connection conn)if(rs!=null)try rs.close(); catch (SQLException e) e.printStackTrace();if(stm!=null)try stm.close(); catch (SQLException e) e.printStackTrace();if(conn!=null)try conn.close(); catch (SQLException e) e.printStackTrace();2.3可行性分析首先,技术可行性。本系统仅需要一台装有Office软件的计算机即可,对机器本身没有太高要求,一般当前学校和
23、个人电脑完全可以满足要求。对于软件技术要求,现在的程序设计语言已经非常成熟,要运用HTML样式,图形图像制作工具制作生动活泼的网页及美观的图形文件或动画文件。其次,经济可行性。由于本系统是为学生学习使用的系统,装上该应用软件,即可使用系统,系统成本主要集中在系统软件的开发上,当系统投入运行后可以为学校节约大量的人力和物力。带来的效益远远大于系统软件的开发成本。在经济上完全可行。第三,操作可行性。界面设计时充分考虑管理人员的习惯,使得操作简单;数据录入迅速、规范、可靠;系统准确;制表灵活;适应力强;容易扩充。管理员登陆新闻管理新闻类别管理网上新闻发布系统2.4模块分析管理员在线留言新闻搜索用户系
24、统角色:1.游客:可以搜索、浏览新闻,可以评论新闻,默认为游客,输入昵称时可以显示昵称2.管理员:可以对新闻进行编辑、发布,可以增加删除和修改新闻及新闻类别前台:首页: 1.新闻类别(娱乐,时尚,社会等) 新闻类别从数据库中动态取出,点击新闻类别可以显示相应的新闻,有分页功能 2.新闻搜索 有根据标题和内容两种搜索方式,采用模糊查询搜索,有分页功能 3.热点新闻 按新闻点击率显示前10条 4.最新新闻 显示最新添加的新闻新闻主页:用户可以对新闻进行评论,匿名用户显示为游客,有昵称用户显示昵称后台:新闻类别管理:1.分类列表(删除,修改新闻类别)2.添加类别新闻管理:1.新闻类表(删除和修改新闻
25、)2.添加新闻(类别选择)系统采用了敏捷开发的思想,结合跨平台的J2EE技术架构,数据库采用了SQLServer;使得系统具有易用性、个性化、跨平台等特点;同时又保证数据的安全、稳定、快速和完整;使得运行高速、安全、稳定。3数据库结构设计与实现3.1数据库设计为了满足系统存储数据需要,方便进行插入、更新、统计和查询分析等操作,数据一共设为两个部分,第一部分为满足插入、更新、删除较多的数据存储。第二部分为满足查询和统计分析。为了方便进行数据库之间的迁移,数据库中不建议采用存储过程,触发器等数据库特征明显的代码,所有表建立,操作SQL均采用标准语句。数据库表结构如下:设计表“admin”列名数据类
26、型长度允许空idInt4否nameVarchar20否passwordVarchar20否设计表“news”列名数据类型长度允许空IdInt4否TitleVarchar100否ContentText否publishDateDatetime否AuthorVarchar20SourceVarchar100ClickInt4newsTypeInt4否设计表“newstype”列名数据类型长度允许空IdInt4否TypenameVarchar20否设计表“comment”列名数据类型长度允许空IdInt4否WriterVarchar20ContentTextcommentDateDatetimenew
27、sIdInt4否3.2处理流程设计系统登录界面错误信息3.2.1系统操作流程输入用户名及密码数据库密码错误检查密码正确功能界面功能处理3.2.2数据增加流程添加信息时,编号字段由系统自动生成,且不能修改,其他信息由用户输入,之后对信息进行合法判断,合法则写入保存至数据库,不合法则重新输入数据。数据增加流程图:开始自动生成编号输入数据是否合法写入数据库结束3.2.3数据修改流程在修改信息时,先选中其中一条要修改的记录,然后输入修改数据,判断其合法性,合法则存至数据库,不合法则重新输入。数据修改流程图:开始选择需要修改的记录输入数据是否合法写入数据结束3.2.4数据修改流程当用户要删除一条数据时,
28、单击该条记录所对应的删除按钮,删除该条记录相关的数据库内容。数据删除流程图:开始选择要删除的记录是否删除更新数据库通过以上介绍我们熟悉了数据库中对数据进行增、删、改时的基本流程,在下一章会介绍如何用SQL语句来实现这些功能。4系统的软件设计与实现4.1系统后台模块设计与实现4.1.1管理员登陆在登陆界面,管理员应输入相应的用户名和密码,点击登陆,如果判断正确则进入功能界面,判断不正确则回到登陆界面,给出相应提示。具体实现:1. 输入:用户名和密码2. 处理:校验字符的有效性。用户登陆本系统需要提供用户名和密码,在这里需要对其进行检验,用户名是否为空,密码是否正确。3. 输出:登陆成功后,进入功
29、能界面,不成功则显示错误信息。登陆界面如下:主要代码如下:1.查询数据库中存在的数据public Admin selectAdmin(Admin admin) Admin a=null;try Connection conn=JDBCutil.getConnection();String sql=select*from admin where name=+admin.getName()+;Statement sta=conn.createStatement();ResultSet rs=sta.executeQuery(sql);if(rs.next()a=new Admin(rs.getSt
30、ring(name),rs.getString(password);return a; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return a;2.调用上述方法public Admin login(String name, String password) Admin a=new Admin();Admin aa=new Admin();try JDBCutil.getConnection().setAutoCommit(false);a.setName(name);a.setPa
31、ssword(password);aa=admin.selectAdmin(a);if(aa.getPassword().equals(password)return aa; catch (SQLException e) e.printStackTrace();return null;3.实现跳转public String execute(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException String name=req.getParameter(username);Stri
32、ng password=req.getParameter(password);Bgbiz bgbiz=new BgbizImpl();Admin admin=bgbiz.login(name, password);if(admin!=null)req.getSession(true).setAttribute(bgbiz, bgbiz);req.getSession(true).setAttribute(admin, admin);return /news/Manager/index.jsp;return /news/Manager/login.jsp;4.1.2新闻管理功能描述:该模块实现对
33、新闻的管理功能,管理员可以对新闻进行增加删除和修改操作。1. 增加新闻信息:点击添加新闻按钮,进入增加界面,添加需要添加的新闻内容。包括新闻类型、新闻标题、新闻内容 检验所填内容是否符合要求,符合则存至数据库,返回新闻列表;不符合则返回新闻添加页2. 修改新闻信息:点击修改新闻按钮,进入修改页面,包括新闻的标题、内容和分类检验用户输入的新闻标题、内容和分类是否符合要求,符合则更新数据库,返回新闻列表;不符合则返回修改界面。添加界面如下:主要代码如下:1.添加新闻public void addNews(News news) try Connection conn=JDBCutil.getConn
34、ection();String sql=insert into news values(?,?,?,?,?,?,?);PreparedStatement pst=conn.prepareStatement(sql);pst.setString(1,news.getTitle();pst.setString(2,news.getContent();pst.setDate(3,new java.sql.Date(news.getPublishDate().getTime();pst.setString(4,news.getAuthor();pst.setString(5,news.getSourc
35、e();pst.setInt(6,news.getClick();pst.setInt(7, news.getType().getId();pst.execute();pst = conn.prepareStatement(select identity);/返回新闻的idResultSet rs = pst.executeQuery();if(rs.next()news.setId(rs.getInt(1);/设置新闻的id catch (SQLException e) e.printStackTrace();2.调用上述方法public void addNews(NewsType news
36、Type, String title,String content) Date c=new Date();Date publishDate=c;News news=new News();news.setContent(content);news.setTitle(title);news.setPublishDate(publishDate);news.setType(newsType);try JDBCutil.getConnection().setAutoCommit(false);newsDao.addNews(news);JDBCutil.getConnection().commit()
37、; catch (SQLException e) e.printStackTrace();3. 跳转到添加页面public String execute(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException Bgbiz bgbiz=(Bgbiz)req.getSession(true).getAttribute(bgbiz);List newstype=bgbiz.getAllNewsType();req.getSession(true).setAttribute(type,
38、newstype);return /news/Manager/News/NewsAdd.jsp;4. 添加完成后跳转到新闻列表public String execute(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException Bgbiz bgbiz=(Bgbiz)req.getSession(true).getAttribute(bgbiz);String type=req.getParameterValues(column);/得到下拉框的value值,即新闻类型的idStri
39、ng title=req.getParameter(header);/得到文章标题String content=req.getParameter(my);/得到文章内容for(String typeid:type)Integer tid=Integer.parseInt(typeid);/获取新闻类型的idNewsType newsType=bgbiz.getNewsTypeById(tid);/获取新闻类型对象bgbiz.addNews(newsType, title,content);return /news/NewsList.do;修改界面如下:主要代码如下:1. 更新新闻public
40、void modifyNews(News news) try Connection conn=JDBCutil.getConnection();String sql=update news set title=?,content=?,publishDate=?,author=?,source=?,click=?,newsTypeId=? where id=+news.getId();PreparedStatement pst=conn.prepareStatement(sql);pst.setString(1, news.getTitle();pst.setString(2, news.get
41、Content();pst.setDate(3, (Date) news.getPublishDate();pst.setString(4, news.getAuthor();pst.setString(5, news.getSource();pst.setInt(6, news.getClick();pst.setInt(7, news.getType().getId();pst.execute(); catch (SQLException e) e.printStackTrace();2.调用上述方法public void modifyNews(int id, NewsType newsT
42、ype, String title,String content) News news=new News();try JDBCutil.getConnection().setAutoCommit(false);news.setId(id);news.setType(newsType);news.setTitle(title);news.setContent(content);newsDao.modifyNews(news);JDBCutil.getConnection().commit(); catch (SQLException e) e.printStackTrace();3.跳转到更新页面public String execute(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException Integer id=Integer.parseInt(req.getParameter(id);/得到要修改的新闻的id传递过去req.getSession(true).setAttribute(newsid, id);Bgbiz bgbiz=(Bgbiz)req.getSession(true).getAttribu