项目说明报告
班主任管理系统设计与实践
任务书
熟练掌握JAVA和JSP技术,SQL数据库编程。精通网页的制作。担任毕业设计小组组长。负责:
- 整个系统的总体开发与设计。
- 人员调度。
- 模块分配。
- 项目进度监控。
- 模块整合。
摘 要
“班主任管理系统”是校园一个管理软件。通过这个软件在实际工作中可以起到对班级、学生个人、班主任工作进行定量的考核,方便班主任的管理班级的工作,方便学生处考核各个班级以及班主任的工作。
本系统采用JSP和J2EE技术,可以跨平台、跨网络、统一界面;通过高度模块化结构、合理的XML文件的数据格式,方便了系统的扩展和维护。
通过本系统,可以查询学生基本情况、查询并修改班级和学生的千分制、查询班主任日常事务并且可以动态定制任务、可以通过BBS进行家长、学生和老师之间的交流、还可以动态设置权限。
本系统的使用,可以大大提高班主任以及学生处的工作效率,可以增加家长、学生老师之间的沟通。
目 录
第一章 绪论
1.1 课题背景
随着现在教育事业的不断发展,信息技术对社会进步和国名经济发挥着越来越大的促进作用,并对传统的思想观念、工作方式产生巨大的冲击。世界已进入信息化时代,网络技术已进入了各行各业,同时也带动了各行业的发展。
中国现在教育事业的发展迅猛,高等院校的数量和规模不断的扩大。与此同时,根据时代的要求,管理,特别是对日益增多的学生的管理,对学校的发展起着不可忽视的作用。而班主任(辅导老师)在学生的管理中有着承上启下的枢纽地位,这一角色的重要性也日渐突出起来。学校与学生之间沟通途径的建立、对学生的具体管理措施的实施等都是通过班主任的工作得以体现和贯彻执行的,如果班主任这个环节的工作做的好,其对学生工作的总体管理和发展都具有不可估量的好处。因此,越来越多的学校对班主任这一角色也越来越重视,一些院校专门对班主任进行一系列培训,并且由原来的一个系甚至一个院配备一名辅导员增加至每个班级一名班主任。
与上述管理需求不符的是:针对班主任工作的配套管理软件严重缺乏。虽然,已有很多较成熟的学生管理方面的软件,但这些软件主要是实现了教学和教务两个方面的数字化管理,而在目前国内已有的学生管理系统中,具体到班主任管理班级这个方面的管理软件基本上是一片空白。
实际上,一方面,班主任工作的特点是事多、琐碎、繁杂,但工作程序是有序。因而,在当今科技高度发达的信息社会,开发一个适合班主任工作的管理软件,提高办公质量,加强班级管理,是适应学校各方面发展的要求,是学生管理工作中急需解决的问题。
1.2 使用技术及发展
本论文主要研究JSP技术以及JSP技术实现基于Web的三层体系结构的应用,实现了动态网页对数据库的查询、统计、更新等功能。目的是应用计算机网络、数据库、Internet技术、以Tomcat为服务器,JSP、JAVA作为主要开发工具,实现跨平台、跨网络、统一界面、易于扩展和维护的大红鹰班主任管理系统。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。随着Windows 98/Windows 2000将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。显然B/S结构应用程序相对于传统的C/S结构应用程序将是巨大的进步。B/S结构采用星形拓扑结构建立企业内部通信网络或利用Internet虚拟专网(VPN)。前者的特点是安全、快捷、准确。后者则具有节省投资、跨地域广的优点。须视企业规模和地理分布确定。企业内部通过防火墙接入Internet,再整个网络采用TCP/IP协议。
正在上传…重新上传取消
图 1-1 网络结构图
C/S 与 B/S 区别:Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的。1.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 2.对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群. 3.对程序架构不同 C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. 4.软件重用不同 C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 5.系统维护不同 系统维护是软件生存周期中,开销大, -------重要C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. 6.处理问题不同 C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. 7.用户接口不同 C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. 8.信息流不同C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更象交易中心。
JSP是JavaServer Pages的简写。JSP技术能让Web开发员和网页设计员快速地开发容易维护的动态Web主页。
用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源(例如JavaBesns)的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
JSP技术是Servlet技术的扩展。Servlet是平台无关的,100%纯Java的Java服务端组件。
第二章班主任管理系统的设计和实现
2.1 班主任管理系统的设计
班主任管理系统总的目的在于方便班主任对班级的管理,同时也提高了学生处对各个班级的评比和对班主任事务的评估与考核,为领导提供辅助决策支持,提高决策的科学性。建立学校数据库,在日常工作中自动生成数据,简化上报过程,提高办事效率。
2.1.1 系统框架
班主任管理系统是学校信息系统的一个子系统,相应的系统框架图见图2-1:
暂时还不存在的子系统
已有的子系统
班主任管理子系统
积分考核管 理 |
班主任事务管理 |
消息公布、留言板 |
用户权限设 置 |
登入登出管 理 |
学生基本信息管 理 |
教务处 |
学生处 |
宿管科 |
班主任管理子系统中的模块
图2-1 系统框架图
说明:班主任管理子系统和教务处、宿管科、学生处都有数据交互。
- 学生基本信息表单来自教务处中的数据库。大红鹰学院的教务系统是万方系统,它所使用的数据库是ORACLE的。
- 积分考核管理、班主任日常事务管理、用户权限设置这一模块和学生处相连。
- 班主任事务管理、积分考核管理与宿管科相连。
2.1.2 系统使用部门
班主任管理系统是一个非常实用的系统,在学院里面使用它的部门主要是:学生处、宿管科和班级学生、学生家长以及相应班主任。
学生处每天对各班进行各种检查,针对不同的情况对相应班级的千分制进行增减,每月对所有班级千分制排名,并且以此作为班主任当月工作考核内容之一。每月学生处根据本系统检查班主任日常事务,这也是班主任每月考核内容之一。
宿管科管理学生寝室住宿,有权对班级成员因住宿方面的情况进行个人方面千分制的增减。每次班主任下寝室,都由宿管科登记。
班级的普通学生可以查看自己的基本信息,查看自己班级以及本人的千分制情况,可以在留言板里发布信息;班委除了拥有班级普通学生的权限以外,还可以根据班级成员的具体情况对班级成员的千分制进行相应增扣,查看其他班级成员信息;班主任可以修改班级成员的千分制,对班主任日常事务管理这一块进行相应数据录入。
学生家长可以用自己子女的用户名、密码登入系统,并且可以在留言板留言。
2.1.3 系统使用者
班主任管理系统主要工作是方便班主任的日常工作,并且对班主任工作进行定性定量考核的考核,系统使用者有:
学生处管理者:对班级千分制进行查询、修改;对班主任工作进行查询。
宿管科管理者:对班级成员千分制进行增扣的录入;对班主任下寝室时间与寝室号码的录入。
班主任:对班级千分制和班级成员千分制的录入、查询、修改;对班级成员信息的查询;对班主任日常事务的相关录入;留言板上留言。
班委:对班级成员千分制的录入;对班级千分制的查询;留言板上留言。
普通学生、学生家长:对本人或子女千分制的查询,班级千分制的查询,留言板留言。
2.1.4 系统功能划分与描述
班主任管理系统分为学生基本信息管理、积分考核管理、班主任日常事务管理、用户权限设置管理、登入登出管理和消息公布留言板六个模块。
学生基本信息管理:这个模块中的数据是教务处的方正教务系统中的数据,在我们这个班主任管理系统中没有修改权限,但是可以供班委、班主任、学生处查询。
积分考核管理:这个模块是我们这个系统的一个重点模块,班主任定性定量考核班委、学生处考核班主任、班级优劣排名都是在这个模块进行。
班主任日常事务管理:这个模块是考核班主任所有任务完成与否的一个模块,通过这个模块可以督促班主任和学生、学生家长之间的联系;班主任可以通过这个模块了解自己的工作进程;同时,这个模块也是学生处对班主任工作考核的依据之一。这个模块只能班主任和学生处可以看到。
用户权限设置:可以设置用户的权限,分为:只读、增加和修改权限。只读权限权限最低,除了查看之外没有任何别的权限。增加权限可以输入数据,比如班级和个人千分制的输入,但是不能进行修改。修改权限权限最高,除了读写外,还可以修改数据。
登入登出管理:形成一个日志文件,从该模块可以知道进入该模块的人和时间。
消息公布留言板模块:这个模块实际上是一个班级的BBS,所有同学都可以在上面留言,留言上面的名字显示是登入班主任管理系统的名字,可以规范留言。班级有什么事情,及时在这里发布。学生有什么意见或建议,又不愿意和老师沟通的,可以在这里发表。同时,学生家长也可以通过这个模块知道班级或学校动态,并且可以发表言论。这个模块是学生、家长和老师的一个沟通平台。
2.2班主任管理系统的部分实现
班主任管理系统的实现是在我们毕业实践小组的共同努力下完成的,我所作的工作是:
管理及协助小组成员如期的完成实践项目。为此在首先的几天中完成了人员的分工调度,并对整个系统做初步的分析,以搭建出初步的框架,好为以后的项目规划奠定一定的基础。
为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,因此我编写了一份项目计划书,把对于在项目生命周期内的工作任务范围、各项工作的任务分解等内容做出的安排以书面的方式,作为项目团队成员以及项目干系人之间的共识与约定,项目生命周期内的所有项目活动的行动基础,项目团队开展和检查项目工作的依据。
在下一个阶段中主要将实训的项目详细的从整体到部分,从横面到切面详细的通过OO思想分析了一下,编写出了项目详细设计书,以将各个模块的需求及如何实现手段及方法作出了详细的设计说明。
与此同时数据库设计方面及界面设计方面的工作也随之同步进行。
登入登出功能部分:
相应的登录界面图见图2-2:
图2-2 登录界面图
登录功能应用是表现:一个用户通过浏览器访问一个页面。Web应用展现一个登陆页面要求用户输入有效的验证信息。用户输入了用户名和密码。此时我们假设用户提供的身份验证信息是正确的,经过了验证过程,Web应用允许用户浏览他有权访问的区域。用户想退出时,点击退出按钮,Web应用要求用户确认他是否则真的需要退出,如果用户确定退出,Session结束,Web应用重新定位到登陆页面。用户可以放心的离开而不用担心他的信息会泄露。如下是相关演示业务逻辑代码:
//...
String action = request.getParameter("action");
// 登陆
if (action.equals("login")) {
logIn(request, response);
}
// 登出
if (action.equals("logout")) {
logOut(request, response);
}
private void logIn(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String type = getString(request.getParameter("type"));
String username = getString(request.getParameter("username"));
String password = getString(request.getParameter("password"));
session.setAttribute("name", rs1.getString(1));//存放用户姓名
session.setAttribute("class", rs1.getString(2));//存放用户所属班级
session.setAttribute("type", rs1.getString(3));//存放用户类型
}
private void logOut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
session = request.getSession();
session.invalidate();
response.sendRedirect("Templates/index.jsp");
}
//...
通过示例程序,阐述了在一个Web应用中实现这一功能。
用户登录是分类型登录的,不同的用户类型拥有不同的权限,对系统有不同的操作结果。
具体权限如下:
验证模块 | 控制模块 | 调用模块 | 插入模块 | |
用户登录 | √ | |||
日志管理 | √ | √ | ||
事物管理 | √ | |||
权限管理 | √ | |||
学生信息查询 | √ | |||
学生信息添加 | √ | √ | ||
学生信息修改 | √ | |||
学生信息删除 | √ | |||
数据修改子模块 | 数据删除子模块 | 数据查询子模块 | 数据反馈模块 | |
用户登录 | ||||
日志管理 | √ | √ | ||
事物管理 | √ | √ | ||
权限管理 | √ | √ | ||
学生信息查询 | √ | √ | ||
学生信息添加 | √ | |||
学生信息修改 | √ | |||
学生信息删除 | √ | √ |
表2-1 权限分类图
若非认证用户以非法用户名登录不同类别用户,则生成相应错误信息, 相应的错误信息图见图1 2-3:
图2-3 错误信息图1
当然系统也提供对合法用户在输入错误的信息时做出响应的友好的报错信息, 相应的错误信息图见图2-4:
图2-4 错误信息图2
登入系统过程后所产生的系统显示也有所不同,按照默认系统登入类别分为:教师,班委,学生3种类型。相应的登陆信息图1 图2图3 见图2-5 2-6 2-7
图2-5 登陆信息图1 图2-6登陆信息图2
图2-7 登陆信息图3
安全认证机制普遍采用的方法是从form中获得用户输入的认证信息,然后到LDAP (lightweight directory access protocol)或关系数据库的安全域中进行认证。如果用户提供的认证信息是有效的,登陆动作往HttpSession对象中注入某个对象。HttpSession存在着注入的对象则表示用户已经登陆。
演示相关代码如下:
//...
private void logIn(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
HttpSession session = request.getSession();//创建SESSION对象
String type = getString(request.getParameter("type"));
String username = getString(request.getParameter("username"));
String password = getString(request.getParameter("password"));
JFBean jf = new JFBean();
//桥接
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException en) {
en.printStackTrace();
}
try {
con = DriverManager.getConnection("jdbc:odbc:bysj", "sa", "");
sql = con.createStatement();
// 教师登陆
if (type.equals("teacher")) {
...
session.setAttribute("islog", "yes");
ResultSet rs1 = sql.executeQuery(condition1);
rs1.next();
session.setAttribute("name", rs1.getString(1));
session.setAttribute("class", rs1.getString(2));
session.setAttribute("type", rs1.getString(3));
response.sendRedirect("Templates/index.jsp");
} else {
session.setAttribute("error", "用户名或密码错误,请重新输入!");
response.sendRedirect("Templates/index.jsp");
}
}
// 学生登陆
if (type.equals("student")) {
...
session.setAttribute("islog", "yes");
ResultSet rs1 = sql.executeQuery(condition1);
rs1.next();
session.setAttribute("name", rs1.getString(1));
session.setAttribute("class", rs1.getString(2));
session.setAttribute("type", rs1.getString(3));
response.sendRedirect("Templates/index.jsp");
} else {
session.setAttribute("error", "用户名或密码错误,请重新输入!");
response.sendRedirect("Templates/index.jsp");
}
}
// 班委登陆
if (type.equals("monitor")) {
...
session.setAttribute("islog", "yes");
ResultSet rs1 = sql.executeQuery(condition1);
rs1.next();
session.setAttribute("name", rs1.getString(1));
session.setAttribute("class", rs1.getString(2));
session.setAttribute("type", rs1.getString(3));
response.sendRedirect("Templates/index.jsp");
} else {
session.setAttribute("error", "用户名或密码错误,请重新输入!");
response.sendRedirect("Templates/index.jsp");
}
}
//...
退出动作就包含了简单的删除用户名以及对用户的HttpSession对象调用invalidate()方法。清单2是从servlet中节选的一段代码以此阐述退出动作:
Listing 2
//...
session = request.getSession();
session.invalidate();
response.sendRedirect("Templates/index.jsp");
//...
系统登录日志部分:
相应的日志管理界面图见图2-8:
图2-8 日志管理界面图
系统会保存每个用户的登录记录,这些信息包括这个用户的名字、登录起始结束时间以及从何处登录入系统的等等。它们被保存到数据库文件的表中。
Rzjl表中保存了所有的登录、退出信息,包括登录时间和类型,这个文件一般只有login程序使用,通过用户的UID,来在日志文件中查找相应记录,然后报告其最后一次登出时间和终端tty。然后, login程序就使用新的记录更新这个文件。因此随着系统正常运行时间的增加,它的大小也会越来越大,增加的速度依赖于系统用户登录次数。因此可以利用这个日志用来查看用户的登录记录。
相关代码如下:
//存入日志
String logid = getString(request.getParameter("username"));// 登入ID
String logname = (String) session.getAttribute("name");// 登入姓名
Date time = new Date();
time.getTime();
String logtime = time.toString().substring(4, 20);// 登入时间
String condition2 = "insert into rzgl (rid,rname,intime) values ('"+ logid+ "'"+","+ "'"+ logname+ "'"+ ","+ "'" + logtime + "')";
jf.execUpdate(condition2);
//…
用户留言板部分:
相应的留言板界面图见图2-9:
图2-9 留言板界面图
留言板是一种电子便签管理系统,用CGI或其它脚本语言编写的网络应用程序。在网络用户交流中有很大的作用,别人可以将他的资料和要求等保留在一个页面上,以供其他人观看。留言板可以提供完备的信息发布功能,有助于客户收集网站的反馈信息,是客户通过网络收集信息的有力工具。
本系统采用留言板形式:"开放式"开放式留言板,所有人都可以查看到他人的留言内容。但只有用户通过输入用户名和密码登陆后才能发布留言。相应留言界面图见图2-10:
图2-10 留言界面图
成功留言后返回本页面。相应的留言成功界面图见图2-11:
图2-11:留言成功界面图
留言板功能说明:
1.按照发言时间的先后顺序,留言板自动排序。
2.留言板提供支持多条留言分页显示功能,使界面更简洁。
3. 友好简、洁的显示界面,便于用户使用留言板;
相关代码演示:
//...
public class servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
String action = request.getParameter("action");
// 留言
if (action.equals("message")) {
message(request, response);
}
private void message(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
JFBean jf = new JFBean();
String s1 = (String) session.getAttribute("name");// 留言人名字
String s2 = getString(request.getParameter("textarea"));// 留言内容
Date date = new Date();
date.getTime();
String a = date.toString();
String s3 = a.substring(4, 20);// 留言时间
String s = "'" + s3 + "'" + "," + "'" + s2 + "'" + "," + "'" + s1 + "'";
String condition = "insert into lyb (ltime,lcontent,lid) values " + "("
+ s + ")";
try {
jf.execUpdate(condition);
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("Templates/message.jsp");
}
总 结
经过一个项目的锻炼,觉得自己大有进步!
现在总结一下:
1、需求报告。 项目正式启动之前,尽可能多的搜集需求,尽可能清楚地描述需求,
但是需求千万不要在细节方面规定得太死,最好是抽象一点。反映商业策略等逻辑变
化的部分尤其要灵活描述,这样避免在设计的时候把这部分代码写得太死。实际上如
果能确定所有的需求是最好的,这个我也想啊,不过现实中是不可能的,往往编码的
过程中会出现不断的需求变更。这就要有足够的程序设计水平来保证你的代码可以应付不断变化的需求。
2、系统设计。以前想象作一个项目必然是先由一个或者多个系统架构师,先做面
面俱到的设计,然后再由程序员们编码实现,哪知道我们这个项目却要求每个人
参与设计。我觉得这样做很不错,这样可以使每个人都对这个系统有深入了解,最有
可能产生较高质量的程序,同样可以减轻系统架构师的负担,并且可以锻炼每一个人!
不过这个要求每个人都有一定的设计水平,并且对业务了解。如果每个人设计一个子系统,那么设计的时候就需要考虑各个子系统之间的对接问题,否则的话可能严重影响项目后期的进度。
3、编码规范。编码规范应该是每个项目都有要求的,比如命名、大小写、代码
风格等,我觉得这个不是必需的,但是规定下来也有好处!
4、文档。可能编码的人很不喜欢写文档,我也不太喜欢写文档,特别是和代码
相关的文档,每次代码有一点改动,那么文档就要作相应的改动,应次常常弄得
文档代码不同步,这样最终会导致文档的不可信。这一点我深有体会! 我觉得
最好是项目中配备专门的文档编写人员,并且在开发的过程中不要太在意文档。还有开发的文档可以借助一些第三方的工具来做。
5、资源管理。你开发的程序中要用到那些资源(比如资源文件、数据文件、配置
文件)我想大家都应该很清楚,那么这个资源怎么存放、怎么命名应该在项目进行
指出定下来。如果编码到后来再确定的话,可能引起不必要的麻烦。
6、数据库。如果有专门数据库管理员和数据库设计人员那么就好说了。如果每个人都涉及到数据库设计与实现的话(在每个人都参与设计的项目中),那么一定要注意不要重复。比如说很多日志表、一些通用的存储过程大家共用就行了。
7、人员分工、项目技术。在一个项目中,项目管理者必须清楚项目组的每一个成员的实力以及特长,而每个组员应该被分配到他最适合的任务,当然很可能很多组员没有突 出的特长,也可能项目管理者也不是很清楚团队每个人的实力,很多组员被分配到不适合自己的任务,这样对整个项目来说都是和很危险的。还有项目开始之前需要哪些技术因该清楚,并且组员们应该准备充分,否则如果要临时学一门新技术的话是很危险的,这样很可能得不到高质量的产品。
项目还正在进行中,我的经验也在不断积累中。我发觉,学习了很多理论知识之后,在经过一定的实践,收获是巨大的
参考文献
1 林上杰.林康司. JSP 2.0技术手册.电子工业出版社
2 飞思科技产品研发.JSP 应用开发详解(第二版).电子工业出版社
3 Marty Hall,Larry Brown. Servlet与JSP核心编程(第2版).清华大学出版社