JSP 新闻发布系统实例.docx
《JSP 新闻发布系统实例.docx》由会员分享,可在线阅读,更多相关《JSP 新闻发布系统实例.docx(35页珍藏版)》请在冰豆网上搜索。
JSP新闻发布系统实例
摘要
现在是一个科学技术飞速发展、信息更替日新月异的世纪。
计算机已深入到各个领域,并且形成了功能强大、覆盖全球的信息传输网络。
各个领域都向系统化、规范化、自动化的方向发展,使得工作效率、工作成绩和生活水平都日益提高。
新闻网站也是绝大多数人了解时事的渠道,新闻信息管理系统包括对新闻网站信息的查询、删除、更新等,
本文详细论述了运用JavaWeb技术《新闻发布系统》的开发、设计环境及其具体的实现。
该系统采用模块化程序设计方法,便于系统功能的各种组合和修改。
可以及时根据企业需求进行新闻信息的添加、删除、修改等操作。
本系统采用oracle数据库,进一步提高系统安全性。
本系统符合新闻发布的规定,能够满足新闻网站日常更新,并达到操作过程中的直观、方便、实用、安全等要求。
关键字:
JavaWeb;新闻发布;新闻查询;新闻浏览;新闻编辑;新闻更新。
第一章系统概述
1.1需求分析
目前,网页制作如火如荼,网站建设热火朝天,及社会的竞争是越来越激烈,各厂家及生产公司都在不断的提高生产的产品质量,特别是电子上午的发展正在关键的时刻,各商家都在最后的冲刺、网页月月改版,信息日日更新,这时他们就得借助媒体来提高他们的产品的知名度,而网络新闻发布信息就是一种很好、很现代的工具。
JSP是一种简单的、安全的,性能非常之高的、动态的脚本语言。
JSP可以用来开发Web应用程序,JSP具有较高的执行效率,强大的数据库支持和网络支持,具有多平台特性和极大的开放性和扩充性,拥有广泛的应用前景。
1.2目标设计
用JSP完成网络新闻发布系统的总体设计及各个细化模块的具体编程实现所开发的新闻发布网站系统必须具有新闻发布、新闻修改系统、各类新闻显示及相关内容浏览等功能。
在新闻浏览之前,要对新闻进行发布。
在发布的时候,出点错误和遗漏是在所难免,这时就需要对新闻进行修改。
因为新闻是直接与广大浏览者进行会面的,所以必须对所发布的新闻做到尽可能的正确、准确,这样浏览者才会经常浏览我们所发布的新闻。
第二章系统设计
2.1系统整体设计
此系统主要是内部新闻发布系统应用管理系统。
而系统的功能模块划分既要注重各个部分本身的功能,又要注重各个功能模块之间的联系,形成一套高效、快捷的新闻发布系统。
这就要求从管理需要和系统开发两个方面进行综合考虑,各个模块既有较强的独立性,又要留有适当的接口,以便日后对功能进行扩充和完善求。
2.2管理员模块
企业用户管理管理员可以对企业用户发送信息,可以查看他的基本资料,还可以删除这个用户.
结束
开始
查看新闻
Y
登陆
登陆成功?
功能选择
添加新闻
更新新闻
修改新闻
删除
新闻
评论新闻
N
2.3常用数据库介绍
2.3.1Oracle数据库
Oracle公司是第一个推出基于SQL标准的关系数据库产品的公司。
它推出的Oracle数据库系统支持多种硬件平台及操作系统,用户的Oracle应用可以很方便地从一种计算机配置移植到另一种计算机配置上。
Oracle数据库系统具有以下特点:
严格遵守数据存取语言,操作系统,用户接口和网络通信协议的工业标准;适合于大型数据库和多用户的事务处理;支持分布式处理。
2.3.2数据库的连接
在Java的函数库中,有一组专门处理与数据库有关的API:
JDBC(JavaDatabaseConnection).我们主要利用JDBC这组API来和数据库沟通。
JDBC最主要完成的事情有:
与数据库创建连接;送SQL命令给数据库,操作数据库及数据表;接受及处理数据库所执行的结果。
不过在创建数据库连接前,我们必须合适的数据库连接的驱动程序。
目前JDBC根据数据库连接的方式,将驱动程序分成四种类型:
Type1,Type2,Type3,Type4。
我使用第一种类型Type1来连接数据库。
Type1的驱动程序是通过与ODBC的连接来与数据库沟通(JDBC-ODBCBridge),也就是JDBC会将所有要与数据库沟通的SQL命令通知ODBC,由ODBC来负责与数据库沟通。
由于JDBCAPI内部已经有这种驱动程序的存在,我们不用考虑太多驱动程序问题,只要将ODBC设置完成即可,而且不论是何种数据库,只要支持ODBC连接方式就可以连上,所以是一种简单又方便的方式。
不过利用此种方式有一定的缺点。
当项目很大或者用户很多时,维护的ODBC连接是一件麻烦又恼人的工作。
再者由于需要在JDBC与ODBC之前做数据传递及转换,许多时间浪费在这上面,造成性能上的不良后果。
2.4数据库的逻辑设计
在本新闻发布系统发布系统数据库中,本论文所描述的模块所涉及到的表有用户信息表PERSON、新闻信息表NOTE等。
分别对各个表进行设计说明,在用户信息表中,个人的ID为主键,这是字段的数据类型为自动编号,用自动编号做主键可以加快数据的读取速度,而且ID号是由oracle自动分配不可能出现重复的,所以选择个人的ID号为主键。
用户信息表用来保存用户的基本信息,关键字为用户的ID号。
设计如表3-4所示:
用户信息表:
表3-4
新闻信息表:
表3-5
第三章系统实现
3.1开发工具选择
新闻发布系统作为提供新闻信息,必须具备一些基本的条件。
首先,它应该具有友好的界面,方便的操作,与用户之间有很好的沟通;其次,它对数据的处理,数据的交换有着较高的要求。
它应该具有速度快,容量大,便于管理的特点。
正是因为这些因素,我们选择了MyEclipse,Oracle作为本次系统开发的工具。
JavaWeb是Java技术的一个分支,主要是JSP,JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。
插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
3.2开发平台
基于MyEclipse和oracle对运行环境的要求,并考虑到目前学校的计算机硬件设备的实施情况,本系统采用Tomcat6.0服务器,MyEclipse8.5作为开发测试和运行平台。
3.3分页技术问题
3.3.1JDBC和分页
在使用数据库的过程中,不可避免的需要使用到分页的功能,可是JDBC的规范对此却没有很好的解决。
对于这个需求很多朋友都有自己的解决方案,比如使用Vector等集合类先保存取出的数据再分页。
但这种方法的可用性很差,与JDBC本身的接口完全不同,对不同类型的字段的支持也不好。
这里提供了一种与JDBC兼容性非常好的方案。
Sun的JDBC规范的制定,在JDBC1.0中,对于一个结果集(ResultSet)你甚至只能执行next()操作,而无法让其向后滚动,这就直接导致在只执行一次SQL查询的情况下无法获得结果集的大小。
所以,如果你使用的是JDBC1.0的驱动,那么是几乎无法实现分页的。
好在Sun的JDBC2规范中很好的弥补了这一个不足,增加了结果集的前后滚动操作,虽然仍然不能直接支持分页,但我们已经可以在这个基础上写出自己的可支持分页的ResultSet了。
有一些数据库,如MySQL(和PHP搭配之最佳组合),比如MySQL(和PHP搭配之最佳组合)可以使用limit子句,Oracle(大型网站数据库平台)可以使用ROWNUM来限制结果集的大小和起始位置。
这里以Oracle(和JAVAWEB搭配之最佳组合)为
所进行的更新,添加,删除,查询操作,成功后都会2秒后自动跳到新闻列表页
创建person表的语句:
createtableperson
(idvarchar2(20),
namevarchar2(20),
passwordvarchar2(20)
);
插在person表中的用户名和密码如下:
insertintopersonvalues('luxiang','luxiang','luxiang');
insertintopersonvalues('yangsi','yangsi','yangsi');
insertintopersonvalues('liaofangjie','liaofangjie','liaofangjie');
insertintopersonvalues('licuiting','licuiting','licuiting');
insertintopersonvalues('zhangchunyan','zhangchunyan','zhangchunyan');
commit;
创建note表的语句:
createtablenote
(
idvarchar2(10),
titlevarchar2(20),
authorvarchar2(20),
contentvarchar2(200)
);
在插入新闻时note表中的主键是由序列生成
创建序列的语句:
createsequencenote_sequ;
3.4程序几个功能模块的主要代码
1.用户登录
Login.jsp
登陆界面,用户登录的表单.
<%
//判断是否有错误信息,若有则打印
//如果没些代码,则显示时会直接打印null
if(request.getAttribute("err")!
=null)
{
%>
<%=request.getAttribute("err")%>
<%
}
%>
用户登陆
|
用户名: | |
密码: | |
|
Login_conf.jsp
用户登录后的处理页面,连接到数据库中person表中的记录,用以验证用户名和密码是否正确:
<%
//声明一个boolean变量,用于用户是否合法的状态
booleanflag=false;
//接收数据
Stringid=request.getParameter("name");
Stringpassword=request.getParameter("password");
%>
<%
Stringsql="selectnamefrompersonwherename=?
andpassword=?
";
try
{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,password);
rs=pstmt.executeQuery();
if(rs.next())
{
//用户合法
flag=true;
//将用户名在session之中
session.setAttribute("name",rs.getString
(1));
}
else
{
//保证错误信息
request.setAttribute("err","错误的用户名及密码");
}
rs.close();
pstmt.close();
conn.close();
}
catch(Exceptione)
{}
%>
<%
if(flag)
{
%>
forwardpage="login_success.jsp">
forward>
<%
}
else
{
%>
forwardpage="login.jsp">
forward>
<%
}
%>
2.添加新闻功能,可以对数据库进行插入记录。
Insert.jsp
添加新闻
标题: | |
作者: | |
内容: | |
|
回到新闻列表页面
<%}
else
{
//用户未登录,提示请登陆
response.setHeader("refresh","2;url=login.jsp");
%>
您还未登陆,请先登陆!
!
两秒后自动跳转到登陆窗口
如果没有跳转,请点这里!
Insert-do.jsp
添加新闻处理页面:
<%//进行乱码处理
request.setCharacterEncoding("gb2312");
%>
<%if(session.getAttribute("name")!
=null)
{%><%!
StringDBDRIVER="oracle.jdbc.driver.OracleDriver";
StringDBURL="jdbc:
oracle:
thin:
@127.0.0.1:
1521:
lfj";
StringDBUSER="scott";
StringDBPASSWORD="tiger";
Connectionconn=null;
PreparedStatementpstmt=null;
//ResultSetrs=null;
%><%
//声明一个boolean变量,用于用户是否合法的状态
booleanflag=false;
//接收数据
Stringtitle=request.getParameter("title");
Stringauthor=request.getParameter("author");
Stringcontent=request.getParameter("content");
%>
<%
//现在note表中的主键是sequence生成
Stringsql="insertintonotevalues(note_sequ.nextVal,?
?
?
)";
try
{Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,title);
pstmt.setString(2,author);
pstmt.setString(3,content);
pstmt.executeUpdate();
pstmt.close();
conn.close();
//如果插入成功,则肯定能执行到此代码
flag=true;
}
catch(Exceptione)
{}%><%
response.setHeader("refresh","2;url=list_notes.jsp");
if(flag)
{%>
新闻添加成功,两秒后跳转到新闻列表页!
如果没有跳转,请点这里
<%}
else
{
%>
新闻添加失败,两秒后跳转到新闻列表页!
如果没有跳转,请点这里
<%
}%><%}
else
{
//用户末登录,提示请登陆
response.setHeader("refresh","2;url=login.jsp");
%>
您还末登陆,请先登陆!
!
两秒后自动跳转到登陆窗口
如果没有跳转,请点这里!
3.删除功能,可以删除数据库中note表的记录
Delete.jsp
<%if(session.getAttribute("name")!
=null)
{}
else
{//用户末登录,提示请登陆
response.setHeader("refresh","2;url=login.jsp");
%>
您还末登陆,请先登陆!
!
两秒后自动跳转到登陆窗口
如果没有跳转,请点这里!
Delete-do.jsp
删除处理功能
//声明一个boolean变量,用于用户是否合法的状态
//booleanflag=false;
//接收数据
Stringtitle=request.getParameter("title");
Stringauthor=request.getParameter("author");
Stringcontent=request.getParameter("content");
intid=0;
try{
id=Integer.parseInt(request.getParameter("id"));}
catch(Exceptione)
{}
%>
<%//若有内容,则删除id号对应的内容。
Stringsql="deletefromnotewhereid=?
";
booleanflag=false;
try
{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
pstmt=conn.prepareStatement(sql);
//pstmt.setString(1,id);
//pstmt.setString(2,password);
pstmt.setInt(1,id);
pstmt.executeUpdate();
flag=true;
pstmt.close();
conn.close();
}
catch(Exceptione)
{}
%>
<%
response.setHeader("refresh","2;url=list_notes.jsp");
if(flag)
{
%>
新闻删除成功,两秒后跳转到新闻列表页!
如果没有跳转,请点这里
<%
}
else
{
%>
新闻删除失败,两秒后跳转到新闻列表页!
如果没有跳转,请点这里
<%}%>
<%}
else
{
//用户末登录,提示请登陆
response.setHeader("refresh","2;url=login.jsp");
%>
您还末登陆,请先登陆!
!
两秒后自动跳转到登陆窗口
如果没有跳转,请点这里!
4.显示所有新闻及查询新闻功能,可以对数据库的记录进行查询。
List-notes.jsp
if(session.getAttribute("name")!
=null)
{%>
<%!
StringDBDRIVER="oracle.jdbc.driver.OracleDriver";
StringDBURL="jdbc:
oracle:
thin:
@127.0.0.1:
1521:
lfj";
StringDBUSER="scott";
StringDBPASSWORD="tiger";
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
%>
<%//若有内容,则
inti=0;
Stringsql=null;
Stringkeyword=request.getParameter("keyword");
if(keyword==null)
{//没有任何查询条件
sql="selectid,title,author,contentfromnote";
}
else
{//有查询条件
sql="selectid,title,author,contentfromnotewheretitlelike?
orauthorlike?
orcontentlike?
";
}
try{Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
pstmt=conn.prepareStatement(sql);
//pstmt.setString(1,id);
//pstmt.setString(2,password);
//如果存在查询内容,则要设置查询条件
if(keyword!
=null)
{//存在查询条件
pstmt.setString(1,"%"+keyword+"%");
pstmt.setString(2,"%"+keyword+"%");
pstmt.setString(3,"%"+keyword+"%");
}
rs=p