资源描述
JSP软件实验实验报告
——简易网站新闻管理系统
实验名称:简易网站新闻管理系统
班 级:计科0702班
完毕人:何传喜(1508)幺轶群(1535)
鲍张鹏(1501)张立明(1538)
完毕时间:-11-16
简易网站新闻管理系统
一、 系统总体设计
构建一种简易新闻管理系统,顾客可以通过浏览器访问系统、查看新闻。对于新闻管理也是通过浏览器完毕。这个系统具备操作以便、快捷长处。
1.1系统功能及模块
新闻管理系统应当具备如下功能:
(1) 浏览新闻
顾客可以通过浏览器查看新闻,如果有多条新闻,规定可以分页显示。
(2) 新闻发布
规定是通过浏览器来完毕,并且可以编辑新闻格式。
(3) 新闻修改
规定通过浏览器完毕。
(4) 删除新闻
依照需要,可以删除新闻。
(5) 系统验证
对系统进行管理前,必要通过登录系统验证。顾客不必登录就可以随便查看新闻,系统管理员必要要通过身份验证才干管理系统。
依照上述功能需求,系统涉及如下模块:
(1) 新闻浏览主页面
(2) 新闻浏览最后页面
(3) 系统管理主页面
(4) 发布新闻模块
(5) 修改新闻模块
(6) 删除新闻模块
1.2系统实现方案
本系统是通过网页浏览器进行访问,因此本系统采用B/S构造。B/S构造式一种以Web技术为基本数据库体系构造,它把老式C/S构造中服务器某些分解为一种数据服务器和与一种或各种应用服务器,从而构成一种三层构造客户服务器体系构造。本系统采用JSP技术,JSP容器采用Tomcat6.0,后台数据库管理系统采用MySqL。
二、 系统数据库设计
2.1数据库需求分析
依照本系统功能需求,新闻管理系统需要如下数据项。
(1) 新闻资料
新闻标题、新闻内容、发布日期、发布人。
(2) 顾客密码资料
顾客名、密码、与否为管理员、姓名。
2.2数据表设计
依照上面需求分析,共设计两个表,分别为新闻文章表和顾客表。
表2-1新闻文章表(article)
列名
数据类型
与否可空
备注
ID
Int
N
TITLE
Varchar(100)
N
文章标题
BODY
Varchar(8000)
N
文章内容
ADDDATE
Varhar(30)
N
发布日期
ADDUSER
Varchat(10)
Y
发布人
表2-2顾客表(userpassword)
列名
数据类型
与否可空
备注
ID
Int
N
USER_ID
Varchat(15)
N
顾客名
USER_PASSWORD
Varchar(15)
N
顾客密码
ISMASTER
Char(1)
N
与否为管理员
USER_NAME
Varchar(10)
Y
是
2.3数据库初始化
数据表和数据表建立后,就要初始化数据库。由于在使用新闻管理系统时,需要登录到管理页面,进行发布新闻等管理操作,这就需要一种管理员顾客,因此要在顾客表userpassword中添加一条记录。
图1.向数据库表userpassword中添加记录
三、 系统基本框架
新闻管理系统功能是顾客可以通过浏览器查看新闻,管理员也是通过浏览器发布和管理新闻。新闻管理系统基本构造图如图2所示。
图2 系统基本架构
为了重复使用代码,可以将许多页面都是用公共代码放在一种JSP文献夹中,当其她文献需要调用这些代码时,是用<jsp:include>操作标记将其包括进来。
公共模块中一共有4个JSP文献和一种CSS文献:“common.jsp”包括其她JSP文献中需要导入Java类和包。“connectdb.jsp”文献重要用来连接数据库。“codefilter.jsp”文献用于对新闻文章内容进行转换,将普通格式与HTML格式之间转换。“check.jsp”文献用于判断与否以系统管理员身份登录了系统,防止非法顾客直接进入系统管理后台对系统进行破坏。
普通顾客不需要登录就可以打开新闻浏览主页面:”index.jsp”查看新闻列表,单击其中某一条新闻标题,就可以打开新闻浏览最后界面“article.jsp”查看新闻。由于新闻标题和内容都存在数据库中,因此最后新闻页面时依照数据库中记录动态生成。
只有管理员才干输入对的顾客名和密码,通过登录系统:“login.jsp”和“chklogin.jsp”,才干登录到系统管理主页面“main.jsp”。在这个主页面中,管理员可以发布新闻、修改新闻和删除新闻。
在Tomcat服务器安装目录下webapps子目录下,创立系统应用目录news。在news目录下除了WEB-INF目录外,还应创立目录incoming、admin和images。其中,incoming下存储公共模块jsp文献。admin目录下存储与系统管理员管理操作有关jsp文献。images目录下存储本系统用到图片及图像资源。
四、 各功能模块设计和实现
4.1公共模块设计
公共模块是将系统其她页面中重复使用代码集合起来,成为一种或者各种文献,这样,要使用重复代码时,只需要将公共模块包括进来就行了。
公共模块一共有4个jsp文献和一种css文献:“common.jsp”、“connectdb.jsp”、“check.jsp”、“coderfiter.jsp”和“style.css”。前4个文献时纯粹嵌入式Java代码,没有HTML脚本,CSS文献用来定义样式表。
4.1.1“common.jsp”文献
“common.jsp”文献包括其她jsp文献中需要导入Java类和包。程序清单如下:
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
4.1.2“connectdb.jsp”文献
“connectdb.jsp”文献重要用来连接数据库以及声明有关变量。程序清单如下:
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost:3306/newsmanage";
Connection con= DriverManager.getConnection(url,"root","sa");
Statement smt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs;
String sql;
String title = "网站新闻管理系统";
%>
4.1.3“check.jsp”文献
“check.jsp”文献用来判断与否以系统管理员身份登录系统,防止非法顾客登录到系统管理后台对系统进行破坏,程序清单如下:
<%
if((String)session.getValue("Enter")!="true")
{
String errmsg="error2";
response.sendRedirect("login.jsp?errmsg="+errmsg);
}
%>
4.1.4“coderfiter.jsp”文献
“coderfiter.jsp”文献用于对新闻文章内容进行格式转换,即在普通格式与HTML格式之间转换。程序清单如下:
<%!
String Replace(String str_source,String str_original,String str_new) {
if(str_source == null) return null;
StringBuffer output = new StringBuffer();
int lengOfsource = str_source.length();
int lengOfold = str_original.length();
int posStart = 0;
int pos;
while((pos = str_source.indexOf(str_original,posStart)) >= 0) {
output.append(str_source.substring(posStart,pos));
output.append(str_new);
posStart = pos + lengOfold;
}
if(posStart < lengOfsource) {
output.append(str_source.substring(posStart));
}
return output.toString();
}
String toHtml(String s)
{
s = Replace(s,"<","<");
s = Replace(s,">",">");
s = Replace(s,"&","&");
s = Replace(s,"\t"," ");
s = Replace(s,"\r\n","\n");
s = Replace(s,"\n","<br>");
s = Replace(s," "," ");
s = Replace(s,"'","'");
s = Replace(s,"\\","\");
return s;
}
String unHtml(String s)
{
s = Replace(s," "," ");
s = Replace(s,"<br>","\n");
return s;
}
%>
4.1.5“style.css”文献
“style.css”文献中,可以定义本web应用程序用到所有样式表,其脚本如下:
A:link {
FONT-SIZE:9pt;
COLOR:#000000;
TEXT-DECORATION:underline
}
A:hover {
FONT-SIZE:9pt;
COLOR:#ff0000;
TEXT-DECORATION:underline
}
A:visited {
FONT-SIZE:9pt;
COLOR:#0000ff;
TEXT-DECORATION:underline
}
.text {
FONT-SIZE:9pt;
COLOR:#000000;
TEXT-DECORATION:none
}
.title {
FONT-SIZE:16px;
COLOR:#000000;
TEXT-DECORATION:none
}
.body {
FONT-SIZE:12pt;
COLOR:#000000;
TEXT-DECORATION:none
}
body {
background-image:url(../images/bg.jpg);
}
4.2新闻浏览主页面
新闻浏览主页面“index.jsp”是顾客浏览新闻主页面,该页面作用是将所有新闻标题以列表形式显示出来,代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@ include file="incoming/common.jsp"%>
<%@ include file="incoming/connectdb.jsp"%>
<html>
<head>
<title>网站新闻管理系统</title>
<link href="incoming/style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<table width=438 border=1 align=center cellPadding=0 cellSpacing=0 bordercolor="#999999" >
<tbody>
<tr bgcolor="#CCCCCC">
<td height="38" align=center bgcolor="#CCCCCC">
<font size="+6" face="隶书" color="#990000">网站新闻管理系统</font>
<font SIZE="3" COLOR="#ffffff"><B></B></FONT></TD>
</tr>
<tr align="center">
</tr>
<tr>
<td height="28">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<%
smt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
sql="SELECT * FROM article";
rs = smt.executeQuery(sql);
while(rs.next())
{
%>
<td width="11%" height="20" align="center"><div align="center"><SPAN class="text">●</SPAN></div></td>
<td width="86%"><a href="article.jsp?id=<%=rs.getInt("ID")%>" target="_blank"><%=rs.getString("TITLE")%></a></td>
</tr>
<%}%>
</table></td>
</tr>
</tbody>
</table>
</body>
</html>
图3 新闻浏览主页面运营效果
4.3新闻浏览最后页面
读者在新闻浏览主页面“index.jsp”中单击感兴趣新闻标题时,就会打开新闻浏览最后页面“article.jsp”,查看新闻内容;
“article.jsp”文献任务就是接受主页面传入新闻ID,然后以此ID在数据库新闻文章表article中查找符合条件记录,然后取出新闻标题、新闻内容等信息,并显示在“article.jsp”页面上。程序清单如下:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="incoming/common.jsp"%>
<%@ include file="incoming/connectdb.jsp"%>
<html><head>
<title>网站新闻管理系统</title>
<link href="incoming/style.css" rel="stylesheet" type="text/css">
<body bgcolor="#CCCCCC" text=#000000 leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<table height="710" cellSpacing=0 cellPadding=0 width=700 align=center
border=0>
<tbody>
<tr>
<td height="710" vAlign=top>
<table height=66 cellSpacing=0 cellPadding=0 width=775 border=0>
<tbody>
<tr>
<td colSpan=4 height=66> <div align=right>
<table width=774 height="60"
border=0 align=center cellpadding=0 cellspacing=0>
<tbody>
<tr>
<th height="60" bgcolor="#FFFFFF">
<font size="+6" face="隶书" color="#000000">网站新闻管理系统</font></th>
</tr>
</tbody>
</table>
<table cellSpacing=0 cellPadding=0 width=774 align=center border=0>
<tbody>
<tr>
<td bgColor=#990033 height=5></td>
</tr>
</tbody>
</TABLE>
</div></td>
</tr>
</tbody>
</table>
<table height=600 cellSpacing=0 cellPadding=0 width=774 align=center
bgColor=#FFFFFF border=0>
<tbody>
<tr align="center">
<%
int id =(null==request.getParameter("id")?1:(Integer.parseInt(request.getParameter("id"))));
sql="SELECT * FROM article WHERE ID="+id+"";
rs = smt.executeQuery(sql);
rs.next();
%>
<td vAlign=bottom width=13 height=600> ;</td>
<td vAlign=top width=749 height=600> <table width=749 height="654" border=0 cellpadding=0 cellspacing=0>
<tbody>
<tr>
<td width=749 height="76" align="center" class="title"><b><b>
<%=rs.getString("TITLE")%> <hr align="center" width="50%" noshade >
</td>
</tr>
<tr>
<td height="506" valign="top" class="body"><%=rs.getString("BODY")%></td>
</tr>
<tr>
<td height="72" valign="top"> </td>
</tr>
</tbody>
</table></TD>
<td vAlign=top width=12> </td>
</tr>
</tbody>
</table> </td>
</tr>
</tbody>
</table>
</body>
</html>
图4 新闻浏览最后页面运营效果
4.4管理员登录系统
新闻管理系统后台管理用来发布、修改、删除新闻。拥有相应权限管理员才干管理系统,因此新闻管理系统需要管理员登录系统。登录系统重要涉及两个JSP文献:“login.jsp”和“chklogin.jsp”。
4.4.1“login.jsp”文献
“login.jsp”文献重要用来让管理员输入顾客名和密码,其代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@ include file="../incoming/common.jsp"%>
<%@ include file="../incoming/connectdb.jsp"%>
<%
String errmsg = request.getParameter("errmsg");
request.getSession(true);
String chk = "false";
session.putValue("Enter",chk);
%>
<html>
<head>
<title>网站新闻管理系统管理员登录</title>
<body bgcolor="#FFFFFF">
<script language="JavaScript">
<!--
function checkdata() {
if( form.userid.value.length<1 || form.userid.value.length>15 ) {
alert("\请输入对的顾客名 !")
return false;
}
if( form.password.value.length<1 || form.password.value.length>15 ) {
alert("\请输入对的登录密码 !")
return false;
}
}
-->
</script>
<form action = chklogin.jsp name="form" method="post" onSubmit="return checkdata()">
<table width="350" height="151" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#6699CC">
<td width="20%" height="28"> </td>
<td width="49%" align="center" ><font size="2">管理员登录</font></td>
<td width="31%"> </td>
</tr>
<tr bgcolor="#6699CC">
<td height="26" align="right"><font size="2" class="depfont"> 顾客名: </font></td>
<td> <input name="userid" type="text" id="userid"></td>
<td rowspan="2"><input type="submit" name="Submit" value="登 录" ></td>
</tr>
<tr bgcolor="#6699CC">
<td height="26" align="right"><font size="2">密 码:</font></td>
<td> <input name="password" type="password" id="password"></td>
</tr>
<tr bgcolor="#6699CC" class="depfont">
<td height="31" colspan="3" align="center"><font size="2" color="#CC3333">
<%
if(errmsg != null && errmsg.equals("error1"))
out.print("您输入顾客名或者密码不对的!请重新输入!");
else if(errmsg != null && errmsg.equals("error2"))
out.print("请先登陆!");
%>
</font></td>
</tr>
</table>
</form>
</body>
</html>
图5 管理员登录系统页面运营效果
4.4.2“chklogin.jsp”文献
在图5所示页面中,管理员输入顾客名和密码后,单击“登录”按钮,提交表单,就会打开“chklogin.jsp“页面。检查输入顾客名和密码与否对的。代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@ include file="../incoming/common.jsp"%>
<%@ include file="../incoming/connectdb.jsp"%>
<%
String userid = request.getParameter("userid");
String password = request.getParameter("password");
sql = "SELECT * FROM userpassword WHERE USER_ID='"+userid+"' AND USER_PASSWORD='"+password+"'";
rs = smt.executeQuery(sql);
if (!rs.next())
{
String errmsg="error1";
response.sendRedirect("login.jsp?errmsg="+errmsg);
return;
}
request.getSession(true);
String chk="true";
session.putValue("Enter",chk);
session.putValue("username",rs.getString("USER_NAME"));
response.sendRedirect("main.jsp");
%>
图6 顾客名和密码输入错误
4.5系统管理主页面
当管理员输入对的顾客名和密码后,就进入了系统管理主页面“main.jsp“。系统管理主页面”main.jsp“是系统后台管理中心,通过该页面就可以发布、修改、删除新闻。
“main.jsp”代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@ include file="../incoming/common.jsp"%>
<%@ include file="../incoming/connectdb.jsp"%>
<%@ include file="../incoming/check.jsp"%>
<html>
<head>
<title>网站新闻管理系统管理</title>
<link href="../incoming/style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<table width=500 border=1 align=center cellPadding=0 cellSpacing=0 bordercolor="#999999" >
<tbody>
<tr bgcolor="#CCCCCC">
<td colspan=2 align=center><FONT SIZE="3" COLOR="#ffffff"><B><font color="#000000">系统管理后台</font></B></FONT></TD>
</tr>
<tr align="center">
<td colspan="2"><a href="addarticle.jsp">发布新闻</a>
<a href="javascript:this.location.reload()">刷新</a> <a href="../index.jsp">主页</a>
<%
Statement _smt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet _rs;
String _sql;
_sql="SELECT * FROM article";
_rs = _smt.executeQuery(_sql);
while(_rs.next())
{
%> <div align="right"></div> </td>
</tr>
<tr>
<td height="20"><div align="left"><SPAN class="text">●</SPAN><a href="editarticle.jsp?id=<%=_rs.getInt("ID")%>"><%=_rs.getString("TITLE")%></a></div></td>
<td align=center width=29%><a href="editarticle.jsp?id=<%=_rs.getInt("ID")%>">编辑新闻</a> <a href="javascript:del(<%=_rs.getInt("ID")%>)">删除新闻</a></td>
</tr>
<%}%>
</tbody>
</table>
<script language="JavaScript">
<!--
function del(id)
{
if (confirm("您确信要删除吗?") )
top.location="delarticle.jsp?id="+id
}
</script>
</body>
</html>
图7 系统管理主页面运营效果
4.6发布新闻模块
如果想发布新闻。可以在图7所示页面中,单击“发布新闻”,就会进入发布新闻模块。发布新闻模块。发布新闻模块由两个文献构成:“addarticle.jsp”和“savearticle.jsp”。顾客在“addarticle.jsp”页面中添加新闻,然后提交表单,通过“savearticle.jsp”页面将添加新闻保存到数据库news中数据表artice中。
4.6.1“addarticel.jsp”文献
程序代码如下:
<%@page contentType="text/html;charset=gb2312"%>
<%@ include file="../incoming/common.jsp"%>
<%@ include file="../incoming/connectdb.jsp"%>
<%@ include file="../incoming/check.jsp"%>
<html>
<head>
<title>网站新闻管理系统管理</title>
<link href="../incoming/style.css" rel="stylesheet" type="text/css">
</head>
<script Language="JavaScript">
function check_input(theForm)
{
if (theForm.newstitle.value == "")
{
alert("请输入新闻标题.");
theForm.newstitle.focus();
return (false);
}
if (theForm.newsbody.value == "")
{
alert("请输入新闻内容.");
theForm.newsbody.focus();
return (false);
}
if (theForm.newstitle.value.length > 100)
{
alert("新闻标题长度应不大于50个字.");
theForm.newstitle.focus();
return (false);
}
}
</script>
<body>
<table border="1" width=750 align=cen
展开阅读全文