1、实 验 报 告试验课程: Web应用开发 学生姓名: 学 号: 专业班级: 6月18日 南昌大学试验汇报学生姓名: 学 号: 专业班级: 试验类型: 验证 综合 设计 创新 试验日期: 试验成绩: 一、试验项目名称Web应用开发综合训练二、试验目标和要求使用Java+JSP+Servlet技术,选择EL、JSTL、Struts、Hibernate、myBatis、jQuery等技术,开发一个基础Web应用程序,以达成掌握Web应用开发基础原理、含有使用Java+JSP+Servlet技术结合流行框架技术开发Web应用程序能力,从而提升学生Web编程能力。要求学生自选题目,开发一个模拟Web应用
2、程序。能够一人一题,也能够多人一题。不过每人必需单独完成动态Web页面10页以上。要求学生依据需求描述独自完成需求分析,软件设计、程序模块设计和程序编写、调试和测试。设计和程序完成后,要求依据指定格式要求,独自完成设计汇报撰写。三、试验基础情况本实训要求依据下述需求陈说写出需求分析文本并进行软件开发,并列出源代码和运行结果。四、需求分析项目介绍这是一个简单图书管理系统,由一个管理员来实现对用户删除,图书增加,修改和图书删除功效,用户注册登录后能够实现对图书借阅和归还。因为时间关系在设计项目时有很多不好地方,未来得及修改,在管理员登录界面采取了图形验证码,因为是一样技术,在用户登录界面就没有采取
3、图形验证技术。功效需求1. 用户注册2. 图书添加3. 图书修改4. 用户管理5. 图书借阅6. 归还图书五、软件设计ER图程序步骤数据库设计模块设计及运行结果项目整体采取MVC 模式,整体上利用jsp+javabean+servlet+jdbc+dao,每个jsp页面采取jQuery技术作为背景,实现简单动态背景,部分页面利用EL、JSTL、js中点击事件、Bootsrap、图形验证码、分页技术和邮箱页面。六、源代码1.用户类User.Javapackage vo;public class User private String name,pwd;public String getName(
4、) return name;public void setName(String name) this.name = name;public String getPwd() return pwd;public void setPwd(String pwd) this.pwd = pwd;2.图书类bookinfo.javapackage vo;public class bookinfo private String bno,bname,author,price,other;public String getBno() return bno;public void setBno(String b
5、no) this.bno = bno;public String getBname() return bname;public void setBname(String bname) this.bname = bname;public String getAuthor() return author;public void setAuthor(String author) this.author = author;public String getPrice() return price;public void setPrice(String price) this.price = price
6、;public String getOther() return other;public void setOther(String other) this.other = other;3.借书信息类lendbook.infopackage vo;public class lendbook private String username, bno,bname,author,price,other;public String getUsername() return username;public void setUsername(String username) this.username =
7、 username;public String getBno() return bno;public void setBno(String bno) this.bno = bno;public String getBname() return bname;public void setBname(String bname) this.bname = bname;public String getAuthor() return author;public void setAuthor(String author) this.author = author;public String getPri
8、ce() return price;public void setPrice(String price) this.price = price;public String getOther() return other;public void setOther(String other) this.other = other;4.用户功效UserDao.javapackage dao;import java.util.List;import java.sql.*;import java.util.ArrayList;import vo.bookinfo;import vo.User;impor
9、t vo.lendbook;import dbc.JdbcUtil;public class UserDaopublic void add(User user) throws Exception/添加用户Connection conn=null;PreparedStatement ps=null;tryconn=JdbcUtil.getConnection();String sql=insert into user values(?,?);ps=conn.prepareStatement(sql);ps.setString(1, user.getName();ps.setString(2, u
10、ser.getPwd();ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public void add_book(bookinfo book) throws Exception/添加图书Connection conn=null;PreparedStatement ps=null;tryconn=JdbcUtil.getConnection();String sql=insert into book_info values(?,?,?,?,?);ps=conn.prepareStatement(sql);ps.setString(
11、1, book.getBno();ps.setString(2, book.getBname();ps.setString(3, book.getAuthor();ps.setString(4, book.getPrice();ps.setString(5, book.getOther();ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public void lend_book(lendbook book) throws Exception/借出图书Connection conn=null;PreparedStatement p
12、s=null;tryconn=JdbcUtil.getConnection();String sql=insert into lendbook values(?,?,?,?,?,?);ps=conn.prepareStatement(sql);ps.setString(1, book.getUsername();ps.setInt(2, Integer.parseInt(book.getBno();ps.setString(3, book.getBname();ps.setString(4, book.getAuthor();ps.setString(5, book.getPrice();ps
13、.setString(6, book.getOther();ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public List QueryAll() throws Exception/列出全部用户Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;List userList=new ArrayList();tryconn=JdbcUtil.getConnection();String sql=select * from user;ps=conn.pr
14、epareStatement(sql);rs=ps.executeQuery();while(rs.next()User user=new User();user.setName(rs.getString(1);user.setPwd(rs.getString(2);userList.add(user);finallyJdbcUtil.free(rs, ps, conn);return userList;public void delete(String bookno) throws Exception/删除图书Connection conn=null;PreparedStatement ps
15、=null;tryconn=JdbcUtil.getConnection();String sql=delete from book_info where bno=?;ps=conn.prepareStatement(sql);ps.setString(1, bookno);ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public void returnbook(String bno,String username) throws Exception/归还图书Connection conn=null;PreparedState
16、ment ps=null;tryconn=JdbcUtil.getConnection();String sql=delete from lendbook where bno=? and username=?;ps=conn.prepareStatement(sql);ps.setString(1, bno);ps.setString(2, username);ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public void delete_user(String username) throws Exception/删除用户
17、Connection conn=null;PreparedStatement ps=null;tryconn=JdbcUtil.getConnection();String sql=delete from user where name=?;ps=conn.prepareStatement(sql);ps.setString(1, username);ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);public int getPageCount() throws Exception/分页Connection conn=null;P
18、reparedStatement ps=null;ResultSet rs=null;int recordCount=0,t1=0,t2=0;tryconn=JdbcUtil.getConnection();String sql=select count(*) from book_info;ps=conn.prepareStatement(sql);rs=ps.executeQuery();rs.next();recordCount=rs.getInt(1);t1=recordCount%5;t2=recordCount/5;finallyJdbcUtil.free(null, ps, con
19、n);return t1=0?t2:t2+1;public List QueryAll_book(int pageNo) throws Exception/列出全部图书Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;int pageSize=5;int startRecno=(pageNo-1)*pageSize;List bookList=new ArrayList();tryconn=JdbcUtil.getConnection();String sql=select * from book_info ord
20、er by bno limit ?,?;ps=conn.prepareStatement(sql);ps.setInt(1, startRecno);ps.setInt(2, pageSize);rs=ps.executeQuery();while(rs.next()bookinfo book=new bookinfo();book.setBno(rs.getString(1);book.setBname(rs.getString(2);book.setAuthor(rs.getString(3);book.setPrice(rs.getString(4);book.setOther(rs.g
21、etString(5);bookList.add(book);finallyJdbcUtil.free(rs, ps, conn);return bookList;public List QueryAll_lendbook(String username) throws Exception/列出已借图书Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;List bookList=new ArrayList();tryconn=JdbcUtil.getConnection();String sql=select *
22、from lendbook where username=?;ps=conn.prepareStatement(sql);ps.setString(1,username );rs=ps.executeQuery();while(rs.next()lendbook book=new lendbook();book.setUsername(rs.getString(1);book.setBno(rs.getString(2);book.setBname(rs.getString(3);book.setAuthor(rs.getString(4);book.setPrice(rs.getString
23、(5);book.setOther(rs.getString(6);bookList.add(book);finallyJdbcUtil.free(rs, ps, conn);return bookList;public void modify_book(bookinfo book) throws Exception/修改图书Connection conn=null;PreparedStatement ps=null;tryconn=JdbcUtil.getConnection();String sql=update book_info set bname=?,author=?,price=?
24、,other=? where bno=?;ps=conn.prepareStatement(sql);ps.setString(1, book.getBname();ps.setString(2, book.getAuthor();ps.setString(3, book.getPrice();ps.setString(4, book.getOther();ps.setString(5, book.getBno();ps.executeUpdate();finallyJdbcUtil.free(null, ps, conn);5.获取表格值代码:function getTableContent
25、(node) var tr1 = node.parentNode.parentNode; var name=tr1.cells0.innerText; window.location.href=/delete_user?name=+name; alert(name); 7. 背景jQuery代码因为代码过长,不展示;七、运行结果1.管理员登录页面:管理员登录界面采取简单CSS、jQuery、和图形验证码,当图形验证码输入不正确和账号密码输入不正确会出现相对应提醒,同时点击相信输入框,提醒输入对应类型背景字体会消失,当鼠标点击其它地方时会对应出现,采取是placeholder属性,我们平时单纯h
26、tml输入框和提交按钮,让人感觉不是很舒适,采取简单CSS将她们边框去除,然后加上对应边框。2.登录主界面:导航栏感谢bootstrap开源,利用了一直悬浮在顶部导航栏,奈何页面长度有限不能向下滚动,无法看出这一功效,页面内容因为思维过于局限,临时没有想出用什么内容来填充,只想到类似于积分东西,这一内容在以后会作出改善,现在只有一个大约模板,同时在改变页面分辨率时导航栏中功效选项会变成一个按钮,用一个便签来装载,本页也有一个亮点便是响应式,在改变分辨率时板块并不会发生错乱现象,利用栅格系统思想,在第二张图张能够看到效果,因为调多种分辨率国语繁琐,所以这一技术只在两个页面利用到,以后有时间会加以
27、改善。3.管理用户页面:点击管理用户小便签会出现用户列表,点击删除用户能够将用户从数据库中删除,同时页面中多个小符号也是利用bootstrap中组件,给人以更直观清楚描述功效,在本页面我并没有采取分页技术,不过在后面多个页面中有采取分页技术,在做页面时候并没有考虑到有很多用户,只是用多个来验证,所以就没有用分页技术,在这个点击就删除技术上一开始碰到了难题,并不知道怎么样去些控制后台,以后在页面中利用了js技术,能够利用表格结点来获取每个 表格单元格内容,再将按键设置为this,点击便是获取目前行值,并传到servlet中调用dao中删除用户函数,便实现了。同时利用js鼠标事件,鼠标移动到目前行
28、时会改变颜色。4.添加图书页面:添加图书页面并没有多么新奇,一样还导航栏加动态背景,一样输入框也利用了placeholder属性,点击出现对应字体和消失,将输入框中字符串传到servlet并调用DAO中插入图书方法;5.展示全部图书页面:在本页面利用到了分页技术,一样单击删除图书能够得到表格内容,经过js传到servlet中再调用删除用户功效,就实现了删除用户,同时在列出图书时用到了EL和JSTL标签来循环输出;还有一个问题就是我并没有考虑到大量图书问题,没有用用单独页面去实现查找功效,不过相对很简单,所以并没有写。8. 修改图书页面:本页面和添加图书页面几乎相同,只有调用方法不一样,调用是更
29、新方法9. 用户注册及登录:登录和注册页面大致相同,也只有调用方法不一样10. 用户登录页面:在此页面利用了一个session将用户名存进去,进入登录页面,会出现欢迎提醒,同时也是响应式栅格系统,因为没有完善积分系统,所以就是部分空白框架。11. 借书页面:在借书页面先用EL和JSTL标签输出可借图书,其实在图书号前一栏还隐藏了一个用户名,点击借阅图书能够获取用户名和图书号,将值传到servlet调用插入方法,将用户名和图书号作为主键,来区分不一样用户所借图书,同时也利用了bootstrap中组件来使得功效键愈加显著。12. 还书页面:因为没有点击很多本书,所以只出现了一本,原理在上个功效页面说了,和之类似,采取EL和JSTL标签循环输出,获取用户名和图书号来归还图书。13. 联络和提议页面:因为现在管理员是我,所以将收件人地址设置为默认邮箱,刚开始没有找到适宜jar包,所以一直报错,这个只是最简单邮件页面,以后会更新成更高级一点邮件发送,能够联络我们和用来采纳用户意见八、体会和提议经过此次项目,熟练掌握了基础MVC开发模式,并熟悉了部分其它内容,包含对js和jQuery使用,处理了部分以前不懂问题,为以后开发提供了些许便利。参考图书:javaweb 应用开发技术和案例教程张继军 董卫 编著