【精品毕设】基于JavaEE的小区门户网站后台管理系统(包含源码+论文)

点击获取源码+论文word

摘    要

随着计算机技术、通信技术和网络技术的迅速发展,信息高速公路的建设与利用为大规模的信息系统、小区门户网站的发展提供了环境和条件。目前,网络信息管理技术、数字化处理技术和数字式信息资源建设已成为国际竞争的焦点。各国都为此投入了相当的实力进行研究和开发小区门户网站系统这一新概念、新模式应运而生,并被视为21世纪信息产业主要的发展方向之一。

本文主要介绍了小区门户网站系统的设计,本系统主要采用JSP为编程语言,实现了社区服务中的新闻资讯、社区共享、在线影院等功能。本系统操作简单,使用方便。

本系统使用 SUN公司的JSP开发工具,数据库为MYSQL。利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进。

关键词: 小区门户网站  网络信息  JSP

After community network service, steady pipe principle

Abstract

Along with the computer technology, the communication and networking's rapidly expand, information superhighway's construction and the use the development which for the large-scale information system, the community network served have provided the environment and the condition. At present, the network information management technology, the digitized processing technology and the digital information resource construction has become the international competition the focal point. Various countries for this reason invested the suitable strength to conduct the research and development community network service system this new concept, the new pattern arise at the historic moment, and regarded as one of the 21st century information industries main development directions.

This article mainly introduced the community network service system's design, this system mainly uses JSP is the programming language, realized in the community services news information, the community to share, functions and so on online theater. This system operation is simple, easy to operate.

This system uses SUN Corporation's JSP development kit, the database is MYSQL. Each kind of object-oriented development kit which provides using it, particularly the data window this can convenient and the succinct operation database intellectualized object, first establishes the system application prototype in a short time, then, carries on the demand iteration to the initial prototype system, revises unceasingly and improves.

Key wordCommunity network service   Network information  JSP

   

1、绪论----------------------------------------------------------------------------------------------------1

1.1 课题研究目的----------------------------------------------------------------------------------------1

1.2 课题意义---------------------------------------------------------------------------------------------1

1.3 可行性分析-----------------------------------------------------------------------------------------2

1.3.1技术可行性----------------------------------------------------------------------------------------2

1.3.2 经济可行性---------------------------------------------------------------------------------------2

1.3.3 操作可行性----------------------------------------------------------------------------------------2

2、相关技术简介---------------------------------------------------------------------------------------2

2.1 JSP----------------------------------------------------------------------------------------------------2

2.2 数据库MYSQL介绍------------------------------------------------------------------------------3

2.3 JDBC 介绍------------------------------------------------------------------------------------------4

3、系统分析--------------------------------------------------------------------------------------------5

4、系统设计---------------------------------------------------------------------------------------------6

4.1 进入操作及登录界面的设计---------------------------------------------------------------------7

4.1.1 身份验证模块------------------------------------------------------------------------------------7

4.1.2 功能链接和主窗口设计------------------------------------------------------------------------7

4.2 模块的设计------------------------------------------------------------------------------------------7

4.2.1 系统管理模块------------------------------------------------------------------------------------7

4.2.2 新闻资讯管理模块------------------------------------------------------------------------------9

4.2.3 公告管理模块----------------------------------------------------------------------------------10

4.2.4 社区影院管理模块----------------------------------------------------------------------------11

4.2.5 会员上传下载管理模块----------------------------------------------------------------------13

4.2.6 留言管理模块----------------------------------------------------------------------------------13

4.3 添加功能------------------------------------------------------------------------------------------15

4.4 删除功能------------------------------------------------------------------------------------------16

5、系统调试与测试----------------------------------------------------------------------------------16

5.1 程序调试-----------------------------------------------------------------------------------------16

5.2 程序的测试---------------------------------------------------------------------------------------17

5.2.1 测试的重要性及目的------------------------------------------------------------------------17

5.2.2 测试的步骤------------------------------------------------------------------------------------18

5.2.3 测试的主要内容------------------------------------------------------------------------------18

6、安全性问题---------------------------------------------------------------------------------------20

结论----------------------------------------------------------------------------------------------------21

致谢----------------------------------------------------------------------------------------------------22

参考文献----------------------------------------------------------------------------------------------23

1、绪论

Internet网是目前全球最大的计算机通信网,它遍及全球几乎所有的国家和地区。www系统是一个大型的分布式超媒体信息数据库,它极大的推动了Internet的发展,己经成为Internet中最流行、最主要的信息服务方式。www技术之所以能在全球普及,一个重要的原因就是它与数据库管理系统相互融合,成为一个处理和共享信息的强大工具。一方面,数据库是一种强大的信息管理工具,另一方面,www提供了共享数据的方法。两者强强联合取长补短,发挥各自优势,使用户可以在Web浏览器上方便地检索数据库的内容。

数据库是从60年代初发展起来的计算机技术。经过四十来年的发展,数据库技术己经趋于成熟。Web数据库在新的Internet环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web数据库技术提出了更多、更高的要求。同时,随着国内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

1.1 课题研究目的

建设小区门户网站系统,是现代化建设的客观要求。建设以计算机为核心的社区服务网络,实现社区服务的自动化,更好地为工作服务。

1.2 课题意义

小区门户网站系统是信息管理不可缺少的部分, 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对选课信息进行管理,有着手工管理所无法比拟的优点.例如:可靠性高、存储量大、寿命长、成本低等。这些优点能够极大地提高小区门户网站的效率,也是社区服务的科学化、正规化管理,与世界接轨的重要条件。 因此,开发这样一套软件成为很有必要的事情。

1.3 可行性分析

1.3.1技术可行性

本系统仅需要一台装有mysql数据库和jsp运行环境的计算机即可,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求。对于软件技术要求,现在的程序设计语言已非常成熟,要运用HTML样式,图形图象制作工具来制作生动活泼的网页及美观的图形文件或动画文件,数据库使用MYSQL中提供的数据库桌面工具JDBC。

1.3.2 经济可行性

由于本系统是为社区服务系统,装上配套应用软件,即可使用系统,系统成本主要集中在系统软件的开发上,当系统投入运行后可以为学校节约大量的人力,物力。所带来的效益远远大于系统软件的开发成本。在经济上完全可行。

1.3.3 操作可行性

界面设计时充分考虑管理人员的习惯,使得操作简单;数据录入迅速、规范、可靠;统计准确;制表灵活;适应力强;容易扩充。

2、相关技术简介

2.1 JSP

JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似JSP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

JSP主要优先如下:

(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比JSP/PHP的局限性是显而易见的。

(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

(4)多样化和功能强大的开发工具支持。这一点与JSP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

2.2 数据库MYSQL介绍

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL不支持视图(已经被列入5.1版的开发计划)、事件等)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。

目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这四个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。

2.3 JDBC 介绍

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。

 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。  

3、系统分析

管理员可进后台进行管理员设置、社区留言管理、社区公告管理、新闻资讯管理、会员上传文件管理、在线影院管理等。

功能模块图

主控流程图

4、系统设计

本人主要负责的是后台管理功能的模块,此功能模块的设计是整个系统设计的重要部分,它决定怎么实现系统的功能,不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。

4.1 进入操作及登录界面的设计

对于一个完整的小区门户网站系统,不仅要求功能强大、操作简单,还要有良好的设计风格和另人爽目的界面。登录界面对于整个系统来说是非常重要的,因为它设置了进入本系统的用户和口令,防止非法用户进入系统,破坏系统安全和所保存的数据,只有合法的用户在输入正确的密码后方可进入系统,否则将提示密码或用户名输入错误,并询问用户是否重新输入。这样就对使用者有了限制,增加了系统的安全性和保密性,便于控制和管理,本系统只有管理员有权进入,所以在权限的设置中为他设置了密码口令,这样就更有利于系统的维护了。

4.1.1 身份验证模块

从登陆界面得到当前用的的用户名及密码,传给内部参数。用户ID与密码共同组成身份认证内容,密码要以*显示。对登陆的用户名及密码进行检验,如果通过验证则返回ture,进入系统主菜单,否则返回faulse,调用错误处理程序。给出错误提示,并引导用户转入系统登陆界面。

4.1.2 功能链接和主窗口设计                       

链接是整个系统的基础,该系统的各项功能都是通过链接来调用的,并通过它将各个窗口模块连接起来。设置链接的任务是在其中规定了系统所要完成的功能,使用户很方便的调用系统的各项功能。本系统的主要模块共有四个,其中每个模块又都有自己的子模块,其中的子模块还有其对应的功能,所以作为功能模块出现,和功能相应的链接,这就形成了多级模式的系统。

4.2 模块的设计

4.2.1 系统管理模块

系统管理模块是小区门户网站系统中一个基础的部分,在本模块中包括管理员对自身密码的重新设置,可以定时更换密码,确保资料的安全;同时还有登陆日志模块,记录每一次登陆信息,如果出现特殊情况,可以查询登陆日志查询,增加了系统的安全性和保密性,便于控制和管理。要实现本模块的功能,需要建立两个子功能块。

(1)密码设置

具体代码如下:

<TABLE width="100%" border=0 align="center" cellPadding=3 cellSpacing=1 class=tablewidth>

               <TBODY>

               <TR align="center" class=head>

                     <TD height=23>序号</TD>

                     <TD>管理员名</TD>

                     <TD>创建时间</TD>

                     <TD>状态</TD>

                     <TD>登录次数</TD>

                     <TD>删除</TD>

               </TR>

             <%

             if(list2.size()!=0){

                     for(int i = 0; i<list2.size(); i++){

                             List list3 = (List)list2.get(i);

             %>

               <TR onClick=OnclikeTable(this) align="center" bgColor=#ffffff>

                     <TD width="30" id=map><%=i+1 %></TD>

                     <TD id=map><%=list3.get(1).toString() %></TD>

                     <TD id=map><%=list3.get(2).toString() %></TD>

                     <TD id=map><%=Integer.parseInt(list3.get(4).toString())==1?"在用":"冻结" %></TD>

                     <TD id=map><%=list3.get(5).toString() %></TD>

                     <TD id=map><%if(Integer.parseInt(list3.get(0).toString())==1){out.print("删除");}else{%><a href="<%=basePath %>Admin.shtml?method=delm&id=<%=list3.get(0).toString()%>">删除</a><%} %></TD>

               </TR>

             <%}}else{%>

               <TR align="center" bgColor=#ffffff>

                     <TD colspan=8 align=center id=map>当前还没有添加管理员</TD>

               </TR>

             <%} %> 

               </TBODY>

       </TABLE><br>

       <TABLE width="40%" border=0 align="center" cellPadding=3 cellSpacing=1>

       <TR><TD>

       <TABLE width="100%" border=0 align="center" cellPadding=3 cellSpacing=1 class=tablewidth>

               <TBODY>

               <TR align="center" class=head>

                     <TD height=23 colspan="2">增加/修改管理员</TD>

               </TR>

               <TR  align="center" bgColor=#ffffff>

                     <TD width="40%" align="right" id=map>管理员名:</TD><input type=hidden name=ra value="">

                     <TD width="60%" align="left" id=map><input type="text" name="username" value="<%=request.getAttribute("username")==null?"":request.getAttribute("username")%>" maxlength="10" size="18" class=input  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

                              οnkeyup="value=value.replace(/[\W]/g,'')"/>&nbsp;字母或数字6-10位</TD>

               </TR>

               <TR align="center" bgColor=#ffffff>

                     <TD align="right" id=map>登录密码:</TD>

                     <TD align="left" id=map><input type="text" name="password" maxlength="16" size="18" class=input  onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

                              οnkeyup="value=value.replace(/[\W]/g,'')"/>&nbsp;字母或数字6-16位</TD>

               </TR>

               <TR align="center" bgColor=#ffffff>

                     <TD align="right" id=map>当前状态:</TD>

                     <TD align="left" id=map><select name="isuse">

                                                                       <option value="">--请选择--</option>

                                                                       <option value="在用">在用</option>

                                                                       <option value="冻结">冻结</option>

                                                                       </select></TD>

               </TR>

               <TR align="center" bgColor=#ffffff>

                     <TD align="right" id=map>操作类型:</TD>

                     <TD align="left" id=map><input type="radio" name="add" value="add" checked>增加&nbsp;<input type="radio" name="update" value="update"  disabled=true>修改</TD>

               </TR>

               <TR align="center" bgColor=#ffffff>

                     <TD colspan="2" align="center" id=map><input type="submit" value="确定">&nbsp;&nbsp;<input type="reset" value="重填"></TD>

                     </TR>

               </TBODY>

       </TABLE>

(2)后台登陆日志

具体实现代码如下:

<table width='100%' cellspacing='1' cellpadding='3' bgcolor='#CCCCCC' class="tablewidth">

     <tr class="head">

      <td width="5%" align="center">ID </td>

      <td  align="center">标题</td>

      <td  align="center">缩略图</td>

      <td  align="center">发布时间</td>

      <td  align="center">发布人</td>

      <td  align="center">是否显示</td>

      <td  align="center">点击率</td>

      <td  align="center">修改</td>

      <td  align="center">选择</td>

    </tr>

    <%

                         newsb.setEVERYPAGENUM(12);

                         int cou = newsb.getMessageCount();//得到信息总数                          

                         String page1=request.getParameter("page");

                         if(page1==null){

                                  page1="1";

                         }

                         session.setAttribute("busMessageCount", cou + "");

                         session.setAttribute("busPage", page1);

                         List pagelist1 = newsb.getMessage(Integer.parseInt(page1));

                         session.setAttribute("qqq", pagelist1);

                         int pageCount = newsb.getPageCount(); //得到页数 

                         session.setAttribute("busPageCount", pageCount + "");

                         List pagelist3=(ArrayList)session.getAttribute("qqq");

                         %>

        <script type="text/JavaScript">

        function allch()

        {

                 for(i=0;i<<%=pagelist3.size()%>;i++)

                 {

                   document.pageform.checkit(i).checked=document.pageform.checkall.checked;

                 }

        }

        </script>

                  <form action="<%=basePath %>Common.shtml?method=DELNEWS" method="post" name="pageform">

                         <%

                                  if(!pagelist3.isEmpty()){

                                  for(int i=0;i<pagelist3.size();i++){

                                          List pagelist2 =(ArrayList)pagelist3.get(i);

                         %>

        <tr  class="trA" onMouseOver="this.className='trB'" onMouseOut="this.className='trA'">

      <td width='5%' align="center" style="border-bottom:1px dotted #ccc;"><%=i+1 %></td><input type="hidden" name="id<%=i %>" value="<%=pagelist2.get(0).toString()%>" >

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>newsinfo.jsp?id=<%=pagelist2.get(0).toString()%>" target="_blank"><%=pagelist2.get(1).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>newsinfo.jsp?id=<%=pagelist2.get(0).toString()%>" target="_blank"><%=pagelist2.get(2).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(3).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(4).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>Common.shtml?method=HIDENEWS&id=<%=pagelist2.get(0).toString()%>"><%=Integer.parseInt(pagelist2.get(5).toString())==1?"显示":"隐藏" %></a></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(6).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath+dir+"/" %>news/edit.jsp?method=editnews&id=<%=pagelist2.get(0).toString()%>" >修改</a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><input type="checkbox" name="checkit" value="<%=pagelist2.get(0).toString()%>"></td>

    </tr>

       

<%

        }}

4.2.2 新闻资讯管理模块

新闻资讯管理模块是小区门户网站系统中的一个部分,本模块主要实现主页新闻部分的后台管理,包括添加、删除、修改新闻,添加新的新闻后,主页新闻部分利用数据库倒序方法自动把最新添加的文章放到最上方,但是始终显示固定的新闻条数。

(1)发布新闻资讯

(2) 修改及删除新闻资讯

<BODY οnlοad="document.form1.infoContent.value=document.form1.content.value" >

<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>

  <TBODY>

  <TR>

    <TD align="left" vAlign=top >

<table width='100%' cellspacing='1' cellpadding='3' bgcolor='#CCCCCC' class="tablewidth">

<tr class="head">

      <td colspan="2">    

<%

      if(method.trim().equals("ADDNEWS")){

%>

        添加新闻 (新闻内容不能超过5000个字符)

<%}else{%>

         修改新闻 (新闻内容不能超过5000个字符)

<%} %>

      </td>

    </tr>

      <form name="form1" action="<%=basePath %>News.shtml" method="post"  enctype="multipart/form-data" >

  <tr bgcolor='#FFFFFF'> <input type="hidden" name="method" value="<%=method %>"> <input type="hidden" name="id" value="<%=id %>">

    <td width='30%'><div align="right">标&nbsp;&nbsp;&nbsp;&nbsp;题:</div></td>

    <td ><input name="title" type="text" id="title" size="40" maxlength="100" value="<%=title %>"></td>

  </tr>

  <tr bgcolor='#FFFFFF'>

    <td width='30%'><div align="right">缩&nbsp;略&nbsp;图:</div></td>

    <td ><input name="pic" type="file" contentEditable=false  size="40" maxlength="150" >&nbsp;<font color=red>300K以下gif或jpg格式图片<%=s %></font></td>

  </tr>

  <tr bgcolor='#FFFFFF'>

      <td width='30%'>

        <div align="right">是否显示: </div>

      </td>

      <td bgcolor='#FFFFFF' >

        <input type="radio" name="ifhide" value="1" <%=str1 %>>

        显示

        <input type="radio" name="ifhide" value="0" <%=str2 %>>

        不显示 </td>

    </tr>

  <tr bgcolor='#FFFFFF'>

    <td colspan="2" valign="top"><TEXTAREA style="display:none" NAME="content" ROWS="20" COLS="70"><%=content %></TEXTAREA> 

        <FCK:editor id="infoContent" basePath="/Sqwl/FCKeditor/"

              width="100%"

              height="400"

              skinPath="/Sqwl/FCKeditor/editor/skins/silver/"

              defaultLanguage="zh-cn"

              tabSpaces="8"

              imageBrowserURL="/Sqwl/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"

              linkBrowserURL="/Sqwl/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"

              flashBrowserURL="/Sqwl/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"

              imageUploadURL="/Sqwl/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"

              linkUploadURL="/Sqwl/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"

              flashUploadURL="/Sqwl/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash">

      </FCK:editor>    

     </td>

    </tr>

  <tr bgcolor='#FFFFFF'>

      <td colspan="2" align="center">

        <input class=mmcinb type='button' name='button' value='提交数据' οnclick='sub()'>

      </td>

    </tr>

      </form>

</table>

   </TD>

      </TR>

  </TBODY>

</TABLE>

</BODY>

<%} %>

</HTML>

4.2.3 公告管理模块

文章管理模块是小区门户网站系统中一个部分,本模块主要实现主页公告部分的后台管理,包括添加、删除、修改公告,添加新的公告后,主页公告部分利用数据库倒序方法自动把最新添加的公告放到最上方。

(1)发布社区公告

<%@ page language="java" import="java.util.*"  contentType="text/html;charset=gb2312"%>

<jsp:useBean id="sn" scope="page" class="com.bean.SystemBean" />

<jsp:useBean id="ab" scope="page" class="com.bean.AfficheBean" />

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

String dir=sn.getDir();

%>

<HTML><HEAD><TITLE>后台操作区</TITLE>

<LINK href="<%=basePath %><%=dir %>/images/Admin_Style.css" type=text/css rel=stylesheet>

<LINK href="<%=basePath %><%=dir %>/images/style.css" type=text/css rel=stylesheet>

<SCRIPT language=JavaScript src="<%=basePath %><%=dir %>/images/Common.js"></SCRIPT>

<STYLE type=text/css>

BODY {

      MARGIN-LEFT: 0px; BACKGROUND-COLOR: #ffffff

}

.STYLE1 {color: #ECE9D8}

</STYLE>

</HEAD>

<script  language="javascript" >

function del()

{

      pageform.submit();

}

</script>

     

<%

String message = (String)request.getAttribute("message");

      if(message == null){

             message = "";

      }

      if (!message.trim().equals("")){

             out.println("<script language='javascript'>");

             out.println("alert('"+message+"');");

             out.println("</script>");

      }

      request.removeAttribute("message");

%>

(2) 修改及删除公告

<BODY οncοntextmenu="return false;" onselectstart="return false;" leftMargin=0

background=<%=basePath %><%=dir %>/images/MainBg.gif topMargin=0 scroll=no

marginheight="0" marginwidth="0">

<TABLE  cellSpacing=0 cellPadding=0 width="100%" border=0>

  <TBODY>

  <TR>

    <TD align="left" vAlign=top >

<table width='100%' cellspacing='1' cellpadding='3' bgcolor='#CCCCCC' class="tablewidth">

     <tr class="head">

      <td width="5%" align="center">ID </td>

      <td  align="center">标题</td>

      <td  align="center">发布时间</td>

      <td  align="center">发布人</td>

      <td  align="center">是否显示</td>

      <td  align="center">选择</td>

    </tr>

    <%

                    List pagelist3=ab.getAllAfficheManage();

                    %>

      <script type="text/JavaScript">

      function allch()

      {

             for(i=0;i<<%=pagelist3.size()%>;i++)

             {

             document.pageform.checkit(i).checked=document.pageform.checkall.checked;

             }

      }

      </script>

              <form action="<%=basePath %>Affiche.shtml?method=delaffiche" method="post" name="pageform">

                    <%       

                           if(!pagelist3.isEmpty()){

                           for(int i=0;i<pagelist3.size();i++){

                                  List pagelist2 =(ArrayList)pagelist3.get(i);

                    %>

      <tr  class="trA" onMouseOver="this.className='trB'" onMouseOut="this.className='trA'">

      <td width='5%' align="center" style="border-bottom:1px dotted #ccc;"><%=i+1 %></td><input type="hidden" name="id<%=i %>" value="<%=pagelist2.get(0).toString()%>" >

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %><%=dir %>/affiche/edit.jsp?method=editAffiche&id=<%=pagelist2.get(0).toString()%>" ><%=pagelist2.get(1).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(2).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(3).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>Affiche.shtml?method=hideAffiche&id=<%=pagelist2.get(0).toString()%>"><%=Integer.parseInt(pagelist2.get(4).toString())==1?"显示":"隐藏" %></a></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><input type="checkbox" name="checkit" value="<%=pagelist2.get(0).toString()%>"></td>

    </tr>

     

<%

      }}

4.2.4 社区影院管理模块

社区影院模块是小区门户网站系统中重要部分之一,在本模块中包括所有视频的添加、删除、修改。包括:影片名、导演、主演、片长等。

(1)发布在线视频

             List pagelist3=ab.getAllAfficheManage();

                    %>

      <script type="text/JavaScript">

      function allch()

      {

             for(i=0;i<<%=pagelist3.size()%>;i++)

             {

             document.pageform.checkit(i).checked=document.pageform.checkall.checked;

             }

      }

      </script>

              <form action="<%=basePath %>Affiche.shtml?method=delaffiche" method="post" name="pageform">

                    <%       

                           if(!pagelist3.isEmpty()){

                           for(int i=0;i<pagelist3.size();i++){

                                  List pagelist2 =(ArrayList)pagelist3.get(i);

                    %>

      <tr  class="trA" onMouseOver="this.className='trB'" onMouseOut="this.className='trA'">

      <td width='5%' align="center" style="border-bottom:1px dotted #ccc;"><%=i+1 %></td><input type="hidden" name="id<%=i %>" value="<%=pagelist2.get(0).toString()%>" >

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %><%=dir %>/affiche/edit.jsp?method=editAffiche&id=<%=pagelist2.get(0).toString()%>" ><%=pagelist2.get(1).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(2).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(3).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>Affiche.shtml?method=hideAffiche&id=<%=pagelist2.get(0).toString()%>"><%=Integer.parseInt(pagelist2.get(4).toString())==1?"显示":"隐藏" %></a></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><input type="checkbox" name="checkit" value="<%=pagelist2.get(0).toString()%>"></td>

    </tr>

     

<%

(2) 修改及删除在线视频

             List pagelist3=ab.getAllAfficheManage();

                    %>

      <script type="text/JavaScript">

      function allch()

      {

             for(i=0;i<<%=pagelist3.size()%>;i++)

             {

             document.pageform.checkit(i).checked=document.pageform.checkall.checked;

             }

      }

      </script>

              <form action="<%=basePath %>Affiche.shtml?method=delaffiche" method="post" name="pageform">

                    <%       

                           if(!pagelist3.isEmpty()){

                           for(int i=0;i<pagelist3.size();i++){

                                  List pagelist2 =(ArrayList)pagelist3.get(i);

                    %>

      <tr  class="trA" onMouseOver="this.className='trB'" onMouseOut="this.className='trA'">

      <td width='5%' align="center" style="border-bottom:1px dotted #ccc;"><%=i+1 %></td><input type="hidden" name="id<%=i %>" value="<%=pagelist2.get(0).toString()%>" >

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %><%=dir %>/affiche/edit.jsp?method=editAffiche&id=<%=pagelist2.get(0).toString()%>" ><%=pagelist2.get(1).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(2).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(3).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>Affiche.shtml?method=hideAffiche&id=<%=pagelist2.get(0).toString()%>"><%=Integer.parseInt(pagelist2.get(4).toString())==1?" " %></a></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><input type="checkbox" name="checkit" value="<%=pagelist2.get(0).toString()%>"></td>

    </tr>

     

<%

4.2.5 会员上传下载管理模块

会员上传下载管理模块是小区门户网站系统中重要部分之一,在本模块中包括所有会员上传下载文件的审核与删除。

<table width='100%' cellspacing='1' cellpadding='3' bgcolor='#CCCCCC' class="tablewidth">

     <tr class="head">

      <td width="5%" align="center">ID </td>

      <td  align="center">文件名称</td>

      <td  align="center">上传会员</td>

      <td  align="center">上传时间</td>

      <td  align="center">审核</td>

      <td  align="center">删除</td>

    </tr>

    <%

                         List pagelist3=newsb.getAllFiles();

                                  if(!pagelist3.isEmpty()){

                                  for(int i=0;i<pagelist3.size();i++){

                                          List pagelist2 =(ArrayList)pagelist3.get(i);

                         %>

        <tr  class="trA" onMouseOver="this.className='trB'" onMouseOut="this.className='trA'">

      <td width='5%' align="center" style="border-bottom:1px dotted #ccc;"><%=i+1 %></td><input type="hidden" name="id<%=i %>" value="<%=pagelist2.get(0).toString()%>" >

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>fileinfo.jsp?id=<%=pagelist2.get(0).toString()%>" target="_blank"><%=pagelist2.get(1).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(4).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><%=pagelist2.get(5).toString() %></td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath%>Common.shtml?method=shfile&id=<%=pagelist2.get(0).toString()%>" ><%=pagelist2.get(6).toString() %></a> </td>

      <td align="center" bgcolor="#FFFFFF"  style="border-bottom:1px dotted #ccc;"><a href="<%=basePath %>Common.shtml?method=admindelfile&id=<%=pagelist2.get(0).toString()%>" >删除</a> </td>

    </tr>

       

<%

        }}

%> 

  </TBODY>

4.2.6 留言管理模块

留言管理模块是小区门户网站系统中重要部分之一,在本模块中包括所有留言的回复、删除。

(1)留言管理

<script  language="javascript" >

function top(){

     form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page=1";

    form3.submit();

}

function last(){

    if(form3.pageCount.value==0){//如果总页数为0,那么最后一页为1,也就是第一页,而不是第0页

    form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page=1";

    form3.submit();

        }else{

        form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page="+form3.pageCount.value;

            form3.submit();

        }

}

function pre(){

  var page=parseInt(form3.page.value);

  if(page<=1){

    alert("已至第一页");

  }else{

    form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page="+(page-1);

    form3.submit();

  }

}

function next(){

  var page=parseInt(form3.page.value);

  var pageCount=parseInt(form3.pageCount.value);

  if(page>=pageCount){

    alert("已至最后一页");

  }else{

    form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page="+(page+1);

    form3.submit();

  }

}

function bjump(){

      var pageCount=parseInt(form3.pageCount.value);

      if( fIsNumber(form3.busjump.value,"1234567890")!=1 ){

                 alert("跳转文本框中只能输入数字!");

                 form3.busjump.select();

                 form3.busjump.focus();

                 return false;

        }

        if(form3.busjump.value>pageCount){//如果跳转文本框中输入的页数超过最后一页的数,则跳到最后一页

          if(pageCount==0){    

          form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page=1";

          form3.submit();

        }

        else{

                 form3.action="<%=basePath%><%=dir %>/guestbook/index.jsp?page="+pageCount;

                 form3.submit();

        }

}

(2) 回复留言

<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>

  <TBODY>

  <TR>

    <TD align="left" vAlign=top >

       <form action="<%=basePath %>GuestBook.shtml" method="post" name="form1" onSubmit="return check()">

       <TABLE width="100%" border=0 align="center" cellPadding=3 cellSpacing=1 class=tablewidth>

                <TBODY>

                <TR align="center" class=head>

                     <TD colspan="2" height=23>回复留言</TD>

                </TR>

               <TR align="center" bgColor=#ffffff><input type="hidden" name="id" value="<%=id %>" ><input type="hidden" name="method" value="<%=method %>" >

                     <TD width="30%" align="right" >留言内容:</TD><TD width="70%" align="left" id=map><textarea name="reasons" cols="50" rows="5" readonly><%=content %></textarea></TD>

                </TR>

                <TR align="center" bgColor=#ffffff>

                     <TD width="30%" align="right" >回&nbsp;&nbsp;&nbsp;&nbsp;复:</TD><TD width="70%" align="left" id=map><textarea name="replay" cols="50" rows="5" ><%=replay %></textarea></TD>

                </TR>

                <TR align="center" bgColor=#ffffff>

                     <TD colspan="2" align="center" ><input type="submit" value="提交">&nbsp;&nbsp;<input type="reset" value="重填"></TD>

                </TR>

                </TBODY>

          </TABLE>

4.3 添加功能

具体流程如下图所示:

4.4 删除功能

5、系统调试与测试

5.1 程序调试

在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。

5.2 程序的测试

5.2.1 测试的重要性及目的

(1)测试的重要性

软件的测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。

事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

① 认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

② 以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

③ 测试工作枯燥无味,不能引起人们的兴趣;

④ 测试工作是艰苦而细致的工作;

⑤ 对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。

(2)测试的目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。

① 软件测试是为了发现错误而执行程序的过程;

② 测试是为了证明程序有错,而不是证明程序无错误;

③ 一个好的测试用例是在于它能发现至今未发现的错误;

④ 一个成功的测试是发现了至今未发现的错误的测试。

这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。

首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。

5.2.2 测试的步骤

与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

(1)模块测试 在这个测试步骤中所发现的往往是编码和详细设计的错误。

(2)系统测试 在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。

(3)验收测试 在这个测试步骤中发现的往往是系统需求说明书中的错误。

5.2.3 测试的主要内容

为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。

(1)单元测试

单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。

身份认证时候要保证在以下输入情况时候系统能够健康运行:

① 输入用户ID时候键入非法字符,如:•#¥%……等

② 在操作员编码框输入非数字字符,如abc,!•#¥《》

③ 输入的用户ID,或者操作员编码不存在。

④ 输入的用户ID,或者操作员编码与密码不相符合。

⑤ 输入的用户ID,操作员编码不能登陆本模块。

⑥ 输入的信息超过规定字符长度

⑦ 输入的信息有一项为空。

(2)集成测试

集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

(3)确认测试

确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。

(4)系统测试

软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。

单独对系统的测试主要从以下几方面入手:

① 功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。

② 强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况。

③ 安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试。

经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。

6、安全性问题

Web开发中安全性是必须考虑的一个很重要的方面,特别是在诸如毕业设计成绩信息等敏感数据的模块中更是关键,所以这也是后期开发需要引起重视的。下面就这方面的技术和解决方案加以讨论。

(1) 安装防火墙:安装防火墙并且屏蔽数据库端口能有效地阻止了来自Internet 上对数据的攻击。

(2) 输入检查和输出过滤:客户在请求中嵌入恶意HTML标记来进行攻击破坏,防止出现这种问题要靠输入检查和输出过滤,而这类检查必须在服务器端进行,一旦校验代码发现有可疑的请求信息,就将这些可疑代码替换并将其过滤掉。

(3) 用户授权认证:对于关键用户必须进行系统授权,只有授权的用户才能访问系统。为了防止用户绕过登陆页面,系统在重要的页面检查用户是否登陆过并检验用户的操作权限,如果没有登陆或没有操作权限,将用户重定向到登陆页面。系统的后台数据库日志记录了所有登陆用户的用户名、IP 地址、登陆时间等。

数据库的安全性(Security)是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。在数据库系统中,大量的数据集中存放,而且为许多用户直接共享,是宝贵的信息资源,系统的安全保护措施就显得更为重要,它保护数据库防止恶意的破坏和非法的存取。

本管理信息系统包括数据库的安全和服务器的安全。为了保护数据库的安全,安全管理措施是在后台MY SQL中实现的。在登录数据库时,通常要求用户输入口令,系统核对用户口令以鉴别用户身份。服务器的安全也是通过用户在登录服务器时输入合法的用户名和密码来实现的。这是一种简单可行的方法,实现起来比较方便。没有采用更加复杂的系统安全管理措施是因为本管理信息系统一般是应用于图书馆内部的局域网中的,采用安全管理措施主要是为了防止没有修改权限的用户无意间修改了数据,因此采用用户标识和鉴定的安全管理措施就能够保障数据库的安全性。

结论

本文通过小区门户网站的设计与开发,从而得出下列结论:   

(1)学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它。

(2)一个系统的开发,经验是最重要的,经验不足,就难免会有许多考虑不周之处。

(3)要想吸引更多的用户,网站的界面必须要美观、有特色、友好,功能要健全。不过由于经验不足,我设计的图形界面比较简单。只是对基本功能进行了开发。

(4)本次开发,我参考了很多社区服务系统的例子,吸取了信息管理系统的长处,对自己的毕业设计进行了完善,但是还有很多的不足之处,有待以后进一步学习。

实践证明,小区门户网站系统有着很好的发展前景,经测试运行。本文所制作的小区门户网站系统界面友好、使用灵活、操作简单、功能齐全、表现方式独特,已基本具备了成熟的技术理论。

由于时间仓促,本次设计由我完成医院信息管理系统的制作,对我这样一个JSP新手而言所制作的模块还有不完善的地方。数据库的设计也比较简单。还有很多毕业设计中用到JSP语言的知识也不够全面,还有很多地方不能够作到完全的理解和掌握。通过这次毕业论文的设计制作使本人受益匪浅。首先,由于毕业设计所用的JSP技术和其中用到JSP语言的其他部分是在课堂上没有接触过的,要用它来做设计必须通过大量自学来掌握,在这个过程中,不仅大大提高了我的自学能力而且让我对JSP的学习有了进一步的认识 。由于是独立完成在毕业设计的过程遇到了很多的困难,我求教了不少老师和同学,在这个过程中让我体会到了,一个团队的重要性。

参考文献

[1]孙卫琴,李洪成.《Tomcat 与 Java Web 开发技术详解》.电子工业出版社,2003年6月:1-205

[2]BruceEckel.《Java编程思想》. 机械工业出版社,2003年10月:1-378

[3]FLANAGAN.《Java技术手册》. 中国电力出版社,2002年6月:1-465

[4]孙一林,彭波.《Java数据库编程实例》. 清华大学出版社,2002年8月:30-210

[5]Lee Anne Phillips.《巧学活用HTML4》.电子工业出版社,2004年8月:1-319

[6]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2003年9月:32-300

[7]耿祥义,张跃平.《JSP实用教程》. 清华大学出版社,2003年5月1日:1-354

[8]孙涌.《现代软件工程》.北京希望电子出版社,2003年8月:1-246

[9]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月:3-460

[10]Brown等.《JSP编程指南(第二版)》. 电子工业出版社 ,2003年3月:1-268    

[11]清宏计算机工作室.《JSP编程技巧》. 机械工业出版社, 2004年5月:1-410  

[12]朱红,司光亚.《JSP Web编程指南》.电子工业出版社, 2001年9月:34-307     

[13]赛奎春.《JSP工程应用与项目实践》. 机械工业出版社, 2002年8月:23-294  

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值