已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖北理工学院基于JSP的软件开发实训实训报告课 程 编 号: B04911045学 号: 201240410122 实 训 报 告教 学 院计算机学院课程名称基于JSP的软件开发实训专业 班级12级计算机科学与技术(1)班姓 名王秋宇指导教师邓丹君2014年12月26日湖北理工学院基于JSP的软件开发实训实训报告目录一.实训内容21数据库设计:22. 框架的搭建:23. 通用功能的实现:34. 数据访问层功能的实现:55. 后台管理员管理博客网站功能的实现:176. 前台普通用户访问博客网站功能的实现:29二.程序调试与测试:41三.结果分析50一.实训内容 1数据库设计:本次实验采用mysql数据库进行设计,需要创建四个数据库表,分别为用于存储博文的blog表,用于存储博文分类的class表,用于存储评论的comment表,用于存储用户信息的users表。blog表中的各属性设计如下:class表中的各属性设计如下:comment表中的各属性设计如下:users表中的各属性设计如下:以上四个表都是创建在数据库“blogdb”中,在后面编写jdbc连接文件时要注意对应。2. 框架的搭建:在myeclipse中创建名为“blog”的web工程,我们编写的文件放在工程底下的“src”与“WebRoot”文件夹下。在“src”文件夹下创建四个包,分别为“mon”、“.wqy.DAO”、“.wqy.model”和“.wqy.servlet”。结果如下图: mon包用于存放实现通用功能的文件,文件列表如下:.wqy.DAO包用于存放实现数据访问功能的文件,这些文件进行对数据库的增、删、改、查等操作,文件列表如下:.wqy.model包用于存放实现数据获取与存储功能的文件,这些文件从数据库中获取数据并存放在类内定义的变量里,文件列表如下:.wqy.servlet包用于存放servlet文件,servlet可以接受客户端发出的http请求或https请求,并对请求进行处理或者将请求转发给其他组件进行处理,文件列表如下:3. 通用功能的实现:本系统需要实现的通用功能为建立jdbc连接,通过Conn.java来实现,包括加载驱动程序,执行查询操作、执行更新操作、 关闭数据库连接。Conn.java的代码如下:package mon;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Conn Connection conn = null;Statement stmt = null;ResultSet rs = null;public Conn() try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) System.out.println(mysql驱动找不到!);e.printStackTrace();public ResultSet executeQuery(String sql) try conn = DriverManager.getConnection(jdbc:mysql:/localhost:3306/blogdb, root, );stmt = conn.createStatement();rs = stmt.executeQuery(sql); catch (SQLException e) e.printStackTrace();return rs;public int executeUpdate(String sql) int result = 0;try conn = DriverManager.getConnection(jdbc:mysql:/localhost:3306/blogdb, root, );stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);result = stmt.executeUpdate(sql); catch (SQLException e) result = 0;e.printStackTrace();return result;public void close() try if (rs != null) rs.close(); catch (Exception e) e.printStackTrace();try if (stmt != null) stmt.close(); catch (Exception e) e.printStackTrace();try if (conn != null) conn.close(); catch (Exception e) e.printStackTrace();4. 数据访问层功能的实现:数据访问层的功能由.wqy.DAO包以及.wqy.model包下的文件实现。下面对各个文件的功能进行解释:.wqy.mode包下:Blog.java:获取博文信息,包括博文的编号、标题、正文、创建时间、分类编号、分类名等,并将其存放在对应的变量内。代码如下:package .wqy.model;import java.util.Date;public class Blog private int id;private String title=;private String context=;private Date createdtime;private int classid;private String classname;public int getId() return id;public void setId(int id) this.id = id;public String getTitle() return title;public void setTitle(String title) this.title = title;public String getContext() return context;public void setContext(String context) this.context = context;public Date getCreatedtime() return createdtime;public void setCreatedtime(Date createdtime) this.createdtime = createdtime;public int getClassid() return classid;public void setClassid(int classid) this.classid = classid;public String getClassname() return classname;public void setClassname(String classname) this.classname = classname;Class.java:获取博文分类信息,包括分类的编号、名称、序号等,并将其存放在对应的变量内。代码如下:package .wqy.model;public class Class private int id;private String name;private int sort;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;public int getSort() return sort;public void setSort(int sort) this.sort = sort;Comment.java:获取评论信息,包括评论的编号、正文、创建时间、评论人、所属博客编号等,并将其存放在对应的变量内。代码如下:package .wqy.model;import java.util.Date;public class Comment private int id;private String context=;private Date createdtime;private String username=;private int blogid;public int getId() return id;public void setId(int id) this.id = id;public String getContext() return context;public void setContext(String context) this.context = context;public Date getCreatedtime() return createdtime;public void setCreatedtime(Date createdtime) this.createdtime = createdtime;public String getUsername() return username;public void setUsername(String usename) this.username = usename;public int getBlogid() return blogid;public void setBlogid(int blogid) this.blogid = blogid;Users.java:获取用户信息,包括用户的姓名、密码、邮箱、权限等,并将其存放在对应的变量内。代码如下:package .wqy.model;public class Users private String username=;private String password=;private String email=;private String power=;public String getUsername() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;public String getEmail() return email;public void setEmail(String email) this.email = email;public String getPower() return power;public void setPower(String power) this.power = power;.wqy.DAO包下:BlogDAO.Java:实现对博文的增、删、改、查等操作,各个方法与功能如下:方法功能public int insert(Blog blog)插入一篇博文public List getList(String keyword)根据博文标题关键字查询并显示博文信息与所属分类public Blog getBlogInfoById(int id)根据博文编号查询并显示一篇博文的所有信息public int delete(int id)删除一篇博文public int update(Blog blog)修改一篇博文的信息public List getListByClassId(int classId)获取一个分类内的所有博文信息代码如下:package .wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import mon.Conn;import .wqy.model.Blog;public class BlogDAO Conn conn = new Conn();public int insert(Blog blog) int result = 0;String sql = insert into blog(title,context,createdtime,classid);sql = sql + values( + blog.getTitle() + , + blog.getContext()+ ,now(),;sql = sql + blog.getClassid() + );System.out.println(sql);result = conn.executeUpdate(sql);conn.close();return result;public List getList(String keyword) throws SQLException List list = new ArrayList();String sql = select b.*,c.Name as classname from blog b LEFT JOIN class c on b.ClassId=c.Id;if (keyword = null | keyword.equals() sql = sql + order by id desc; else sql = sql + where b.title like % + keyword+ %order by id desc;ResultSet rs = conn.executeQuery(sql);System.out.println(sql);while (rs.next() Blog blog = new Blog();blog.setId(rs.getInt(id);blog.setTitle(rs.getString(title);blog.setContext(rs.getString(context);blog.setCreatedtime(rs.getTimestamp(createdtime);blog.setClassid(rs.getInt(classid);blog.setClassname(rs.getString(classname);list.add(blog);conn.close();return list;public Blog getBlogInfoById(int id) throws SQLException Blog blog = new Blog();String sql = select b.*,c.Name as classname from blog b LEFT JOIN class c on b.ClassId=c.Id where b.id=+ id + ;ResultSet rs = conn.executeQuery(sql);System.out.println(sql);if (rs.next() blog.setId(rs.getInt(id);blog.setTitle(rs.getString(title);blog.setContext(rs.getString(context);blog.setCreatedtime(rs.getTimestamp(createdtime);blog.setClassid(rs.getInt(classid);blog.setClassname(rs.getString(classname);conn.close();return blog;public int delete(int id) int result = 0;String sql = delete from blog where id= + id + ;result = conn.executeUpdate(sql);conn.close();return result;public int update(Blog blog) int result = 0;String sql = update blog set title= + blog.getTitle()+ ,context= + blog.getContext() + ,classid=+ blog.getClassid() + where id= + blog.getId() + ;System.out.println();result=conn.executeUpdate(sql);conn.close();return result;public List getListByClassId(int classId) throws SQLExceptionList blogList=new ArrayList();String sql=select b.*,c.Name as classname from blog b LEFT JOIN class c on b.ClassId=c.Id; sql=sql+ where b.classid=+classId+ order by b.id desc;ResultSet rs = conn.executeQuery(sql); System.out.println(sql);while (rs.next() Blog blog = new Blog();blog.setId(rs.getInt(id);blog.setTitle(rs.getString(title);blog.setContext(rs.getString(context);blog.setCreatedtime(rs.getTimestamp(createdtime);blog.setClassid(rs.getInt(classid);blog.setClassname(rs.getString(classname);blogList.add(blog);conn.close();return blogList;ClassDAO.Java:实现对博文分类的增、删、改、查等操作,各个方法与功能如下:方法功能public List getList()查询并显示所有分类信息public int insert(Class c)插入一个分类public int delete(int id)删除一个分类public Class getClassInfo(int id)根据分类编号查询并显示一个分类信息public int update(Class c)修改一个分类信息代码如下:package .wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import mon.Conn;import .wqy.model.Class;public class ClassDAO Conn conn=new Conn();public List getList()throws SQLExceptionList list=new ArrayList();String sql=select * from class order by sort asc;ResultSet rs=conn.executeQuery(sql);while(rs.next()Class c=new Class();c.setId(rs.getInt(id);c.setName(rs.getString(name);c.setSort(rs.getInt(sort);list.add(c);conn.close();return list;public int insert(Class c)int result=0;String sql=insert into class(name,sort) values;sql=sql+(+c.getName()+,+c.getSort()+);System.out.println(sql);result=conn.executeUpdate(sql);conn.close();return result;public int delete(int id)int result;String sql=delete from class where id=+id+;result=conn.executeUpdate(sql);conn.close();return result;public Class getClassInfo(int id) throws SQLExceptionClass c=new Class();String sql=select * from class where id=+id+;ResultSet rs=conn.executeQuery(sql);if(rs.next()c.setId(rs.getInt(id);c.setName(rs.getString(name);c.setSort(rs.getInt(sort);conn.close();return c;public int update(Class c)int result=0;String sql=update class set name=+c.getName()+,sort=+c.getSort()+ where id=+c.getId()+;System.out.println(sql);result=conn.executeUpdate(sql);conn.close();return result;CommentDAO.Java:实现对评论的增、删、查等操作,各个方法与功能如下:方法功能public List listByBlogId(int blogid)查询并显示一篇博文的所有评论信息public int delete(int id)删除一条评论public int insert(Comment comment)添加一条评论代码如下:package .wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import mon.Conn;import .wqy.model.Comment;public class CommentDAO Conn conn=new Conn();public List listByBlogId(int blogid) throws SQLExceptionList list=new ArrayList();String sql=select * from comment where blogid=+blogid+ order by id desc;ResultSet rs=conn.executeQuery(sql);while(rs.next()Comment comment=new Comment();comment.setId(rs.getInt(id);comment.setContext(rs.getString(context);comment.setCreatedtime(rs.getDate(createdtime);comment.setBlogid(rs.getInt(blogid);comment.setUsername(rs.getString(username);list.add(comment);conn.close();return list; public int delete(int id)int result=0;String sql=delete from comment where id=+id+;result=conn.executeUpdate(sql);conn.close();return result;public int insert(Comment comment)int result=0;String sql=insert into comment(context,blogid,createdtime,username) values (+comment.getContext()+,+comment.getBlogid()+,now(),+comment.getUsername()+);System.out.println(sql);result=conn.executeUpdate(sql);conn.close();return result;UsersDAO.Java:实现对用户的增、删、改、查等操作,各个方法与功能如下:方法功能public boolean idExist(String username,String password)判断用户名密码是否存在public boolean isExistUser(String username,String password)判断用户名是否存在public int insert(Users u)插入一个用户public boolean isAdminUser(String username)判断用户是否为管理员public List getList()查询并显示所有用户public Users getUsersInfo(String username)查询并显示一个用户的所有信息public int update(Users u)修改一个用户信息public int delete(String username)删除一个用户 代码如下:package .wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import mon.Conn;import .wqy.model.Users;public class UsersDAO Conn conn=new Conn();public boolean idExist(String username,String password)throws SQLExceptionboolean result=false;String sql=select * from users where username=+username+ and password=+password+;System.out.println(sql);ResultSet rs=conn.executeQuery(sql);if(rs.next()result=true;conn.close();return result;public boolean isExistUser(String username,String password)throws SQLExceptionboolean result=false;String sql=select * from users where username=+username+;System.out.println(sql);ResultSet rs=conn.executeQuery(sql);if(rs.next()result=true;conn.close();return result;public int insert(Users u)int result=0;String sql=insert into users(username,password,email,power);sql=sql+ values(+u.getUsername()+,+u.getPassword()+,+u.getEmail()+,+u.getPower()+);result=conn.executeUpdate(sql);conn.close();return result;public boolean isAdminUser(String username) throws SQLExceptionboolean result=false;String sql=select * from users where username=+username+ and power=admin;System.out.println(sql);ResultSet rs=conn.executeQuery(sql);if(rs.next()result=true;conn.close();return result;public List getList() throws SQLExceptionList list=new ArrayList();String sql=select * from users order by username asc;ResultSet rs=conn.executeQuery(sql);while(rs.next()Users u=new Users();u.setUsername(rs.getString(username);u.setPassword(rs.getString(password);u.setEmail(rs.getString(email);u.setPower(rs.getString(power);list.add(u);conn.close();return list;public Users getUsersInfo(String username) throws SQLExceptionUsers u=new Users();String sql=select * from users where username=+username+;ResultSet rs=conn.executeQuery(sql);while(rs.next()u.setUsername(rs.getString(username);u.setPassword(rs.getString(password);u.setEmail(rs.getString(email);u.setPower(rs.getString(power);conn.close();return u;public int update(Users u)int result=0;String sql=update users set power=+u.getPower()+where username=+u.getUsername()+;System.out.println(sql);result=conn.executeUpdate(sql);conn.close();return result;public int delete(String username) int result = 0;String sql = delete from users where username= + username + ;System.out.println(sql);result = conn.executeUpdate(sql);conn.close();return result;5. 后台管理员管理博客网站功能的实现:后台管理员管理博客网站的功能通过WebRoot下的manager文件夹下的jsp页面来实现,文件列表如下:下面对各个文件的功能进行解释:Login.jsp:通过表单获取用户账号密码,然后将获取的信息提交给 UsersServlet的login方法,login调用UsersDAO里的 idExist方法与 isAdminUser判断用户是否存在和是否为管理员,若都是则登录成功,跳转到 manager/index.jsp。index.jsp:博客后台主页,采用左右框架布局,左侧显示 menu.jsp,右侧显示 right.jsp。right.jsp:空白页面,用于显示其他组件传递过来的信息。menu.jsp:菜单页面,显示不同的操作。包括注销、发布博文、博文管理、博文分类、博文分类管理和用户管理。注销的链接指向 UsersServlet?method=logout,当点击注销时,logout创建一个Cookie对象用于保存用户名,然后跳转至 manager/Login.jsp。发布博文的链接指向 BlogServlet?method=preAdd,当点击发布博文时,preAdd调用ClassDAO里的getList方法获取博文分类列表,然后跳转到 manager/blog-add.jsp。博文管理的链接指向 BlogServlet?method=list,当点博文管理时,list调用BlogDAO的getList方法获取博文信息以及所属分类,然后跳转到 manager/blog-manage.jsp。添加博文分类的链接指向 manager/class-add.jsp,当点击添加博文分类时,跳转到 manager/class-add.jsp。博文分类管理的链接指向 ClassServlet?method=list,当点击博文分类管理时,list调用ClassDAO里的getList方法,获取博文分类列表,然后跳转到manager/class-manage.jsp。用户管理的链接指向 UsersServlet?method=list,当点击用户管理时,list调用UsersDAO的getList方法,获取用户信息列表,然后跳转到 manager/user-manage.jsp。blog-add.jsp:通过表单来获取博文的信息,包括博文标题,博文所属分类与博文内容,然后将信息提交给BlogServlet的postAdd方法,postAdd调用BlogDAO的insert方法插入一条博文记录,然后跳转至 manager/result.jsp显示执行结果。blog-manage.jsp:通过表单获取博文的标题、所属分类、发布时间等信息,然后编写操作,包括编辑、删除和评论。编辑的链接指向 BlogServlet?method=preEdit&blogId=,当点击编辑时,preEdit调用BlogDAO的 getBlogInfoById方法获取博文信息,然后跳转到 manager/blog-edit.jsp。删除的链接指向 BlogS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年太湖县事业单位考试真题
- 消化道出血内镜术后抗凝治疗管理方案
- 气管切开患者眼部护理方案
- 手术室设备使用成本风险预警系统
- 甲亢术后并发症的早期识别与处理流程
- 专题1.2 频率与概率+随机事件的独立性(高效培优讲义)数学沪教版2020必修第三册(原卷版)
- 护理教育学基础理论与发展脉络
- 2025 三年级数学上册应用题解题策略课件
- 成本管控与医疗公平性实践
- 2025年旅游公司跟团游优惠
- 2025广西普法考试题库及答案
- 国企专项奖励管理办法
- 异位妊娠超声诊断技巧
- 深圳市失业人员停止领取失业保险待遇申请表样表
- 全国中小学班主任网络培训示范班在线考试试题附全答案
- 民兵水文气象课件
- 精神障碍社区康复讲课件
- 海外工作安全管理制度
- 线上培训课程买卖合同
- 《PLC控制系统设计、安装与调试(第5版)》高职西门子S7-12001500 PLC全套教学课件
- 《动力电池及能量管理技术》课件-任务3 动力电池均衡管理
评论
0/150
提交评论