基于JSP的个人博客网站的设计与实现_第1页
基于JSP的个人博客网站的设计与实现_第2页
基于JSP的个人博客网站的设计与实现_第3页
基于JSP的个人博客网站的设计与实现_第4页
基于JSP的个人博客网站的设计与实现_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 . . . 课 程 编 号:B04911045学 号:2实 训 报 告教 学 院计算机学院课程名称基于JSP的软件开发实训专业 班级12级计算机科学与技术(1)班姓 名王秋宇指导教师邓丹君2014年12月26日50 / 52目录一.实训容21数据库设计:22. 框架的搭建:23. 通用功能的实现:34. 数据访问层功能的实现:55. 后台管理员管理博客功能的实现:176. 前台普通用户访问博客功能的实现:29二.程序调试与测试:41三.结果分析50一.实训容1数据库设计:本次实验采用mysql数据库进行设计,需要创建四个数据库表,分别为用于存储博文的blog表,用于存储博文分类的class表

2、,用于存储评论的comment表,用于存储用户信息的users表。blog表中的各属性设计如下:class表中的各属性设计如下:comment表中的各属性设计如下:users表中的各属性设计如下:以上四个表都是创建在数据库“blogdb”中,在后面编写jdbc连接文件时要注意对应。2. 框架的搭建:在myeclipse中创建名为“blog”的web工程,我们编写的文件放在工程底下的“src”与“WebRoot”文件夹下。在“src”文件夹下创建四个包,分别为“.wqy mon”、“.wqy.DAO”、“.wqy.model”和“.wqy.serv

3、let”。结果如下图:.edu.wqy mon包用于存放实现通用功能的文件,文件列表如下:.wqy.DAO包用于存放实现数据访问功能的文件,这些文件进行对数据库的增、删、改、查等操作,文件列表如下:.wqy.model包用于存放实现数据获取与存储功能的文件,这些文件从数据库中获取数据并存放在类定义的变量里,文件列表如下:.wqy.servlet包用于存放servlet文件,servlet可以接受客户端发出的 请求或 s请求,并对请求进行处理或者将请求转发给其他组件进行处理,文件列表如下:3. 通用功能的实现:本系统需要实现的通用功能为建立jdbc连接,通过C

4、onn.java来实现,包括加载驱动程序,执行查询操作、执行更新操作、 关闭数据库连接。Conn.java 的代码如下:.wqy 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 =

5、 null;public Conn() try Class.forName(".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", &quo

6、t;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", &quo

7、t;");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

8、 (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:获取博文信息,包括博文的编号、标题、正文、创建时间、分类编号、分类名等,并将其存放在对应的变量

9、。代码如下:.wqy.model;import java.util.Date;publicclass Blog privateint id;private String title=""private String context=""private Date createdtime;privateint classid;private String classname;publicint getId() return id;publicvoid setId(int id) this.id = id;public String ge

10、tTitle() return title;publicvoid setTitle(String title) this.title = title;public String getContext() return context;publicvoid setContext(String context) this.context = context;public Date getCreatedtime() return createdtime;publicvoid setCreatedtime(Date createdtime) this.createdtime = createdtime

11、;publicint getClassid() return classid;publicvoid setClassid(int classid) this.classid = classid;public String getClassname() return classname;publicvoid setClassname(String classname) this.classname = classname;Class.java:获取博文分类信息,包括分类的编号、名称、序号等,并将其存放在对应的变量。代码如下:.wqy.model;publicclass Cl

12、ass privateint id;private String name;privateint sort;publicint getId() return id;publicvoid setId(int id) this.id = id;public String getName() return name;publicvoid setName(String name) = name;publicint getSort() return sort;publicvoid setSort(int sort) this.sort = sort;Comment.java:获取评论

13、信息,包括评论的编号、正文、创建时间、评论人、所属博客编号等,并将其存放在对应的变量。代码如下:.wqy.model;import java.util.Date;publicclass Comment privateint id;private String context=""private Date createdtime;private String username=""privateint blogid;publicint getId() return id;publicvoid setId(int id) this.id

14、 = id;public String getContext() return context;publicvoid setContext(String context) this.context = context;public Date getCreatedtime() return createdtime;publicvoid setCreatedtime(Date createdtime) this.createdtime = createdtime;public String getUsername() return username;publicvoid setUsername(S

15、tring usename) this.username = usename;publicint getBlogid() return blogid;publicvoid setBlogid(int blogid) this.blogid = blogid;Users.java:获取用户信息,包括用户的、密码、权限等,并将其存放在对应的变量。代码如下:.wqy.model;publicclass Users private String username=""private String password=""private Str

16、ing email=""private String power=""public String getUsername() return username;publicvoid setUsername(String username) this.username = username;public String getPassword() return password;publicvoid setPassword(String password) this.password = password;public String getEmail() re

17、turn email;publicvoid setEmail(String email) this.email = email;public String getPower() return power;publicvoid setPower(String power) this.power = power;.wqy.DAO包下:BlogDAO.Java:实现对博文的增、删、改、查等操作,各个方法与功能如下:方法功能public int insert(Blog blog)插入一篇博文public List<Blog> getList(String keyword)根据博

18、文标题关键字查询并显示博文信息与所属分类public Blog getBlogInfoById(int id)根据博文编号查询并显示一篇博文的所有信息public int delete(int id)删除一篇博文public int update(Blog blog)修改一篇博文的信息public List<Blog> getListByClassId(int classId)获取一个分类的所有博文信息代码如下:.wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java

19、.util.ArrayList;import java.util.List;.wqy mon.Conn;.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.getT

20、itle() + "','" + blog.getContext()+ "',now(),"sql = sql + blog.getClassid() + ")"System.out.println(sql);result = conn.executeUpdate(sql);conn.close();return result;public List<Blog> getList(String keyword) throws SQLException List<Blog> list = n

21、ew ArrayList<Blog>();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+ "%'

22、;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("

23、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

24、 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.setCreatedtim

25、e(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.execu

26、teUpdate(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.ge

27、tId() + ""System.out.println();result=conn.executeUpdate(sql);conn.close();return result;public List<Blog> getListByClassId(int classId) throws SQLExceptionList<Blog> blogList=new ArrayList<Blog>();String sql="select b.*,c.Name as classname from blog b LEFT JOIN clas

28、s 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.setC

29、ontext(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:实现对博文分类的增、删、改、查等操作,各个方法与功能如下:方法功能pu

30、blic List<Class> getList()查询并显示所有分类信息public int insert(Class c)插入一个分类public int delete(int id)删除一个分类public Class getClassInfo(int id)根据分类编号查询并显示一个分类信息public int update(Class c)修改一个分类信息代码如下:.wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;imp

31、ort java.util.List;.wqy mon.Conn;.wqy.model.Class;public class ClassDAO Conn conn=new Conn();public List<Class> getList()throws SQLExceptionList<Class> list=new ArrayList<Class>();String sql="select * from class order by sort asc"ResultSet rs=conn.exec

32、uteQuery(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=

33、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(s

34、ql);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.set

35、Sort(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.cl

36、ose();return result;CommentDAO.Java:实现对评论的增、删、查等操作,各个方法与功能如下:方法功能public List<Comment> listByBlogId(int blogid)查询并显示一篇博文的所有评论信息public int delete(int id)删除一条评论public int insert(Comment comment)添加一条评论代码如下:.wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.

37、ArrayList;import java.util.List;.wqy mon.Conn;.wqy.model ment;public class CommentDAO Conn conn=new Conn();public List<Comment> listByBlogId(int blogid) throws SQLExceptionList<Comment> list=new ArrayList<Comment>();String sql="select * from comment where b

38、logid="+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(

39、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

40、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.execu

41、teUpdate(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)判断用户是

42、否为管理员public List<Users> getList()查询并显示所有用户public Users getUsersInfo(String username)查询并显示一个用户的所有信息public int update(Users u)修改一个用户信息public int delete(String username)删除一个用户 代码如下:.wqy.DAO;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.ut

43、il.List;.wqy mon.Conn;.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='

44、"+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='

45、"+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.getUsernam

46、e()+"','"+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="selec

47、t * 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<Users> getList() throws SQLExceptionList<Users> list=new ArrayList<U

48、sers>();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

49、.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.setUsern

50、ame(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()+

51、"'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 + "'"Sys

52、tem.out.println(sql);result = conn.executeUpdate(sql);conn.close();return result;5. 后台管理员管理博客功能的实现:后台管理员管理博客的功能通过WebRoot下的manager文件夹下的jsp页面来实现,文件列表如下:下面对各个文件的功能进行解释:Login.jsp:通过表单获取用户账号密码,然后将获取的信息提交给 UsersServlet的login方法,login调用UsersDAO里的 idExist方法与 isAdminUser判断用户是否存在和是否为管理员,若都是则登录成功,跳转到 manager/in

53、dex.jsp。index.jsp:博客后台主页,采用左右框架布局,左侧显示 menu.jsp,右侧显示 right.jsp。right.jsp:空白页面,用于显示其他组件传递过来的信息。menu.jsp:菜单页面,显示不同的操作。包括注销、发布博文、博文管理、博文分类、博文分类管理和用户管理。注销的指向 UsersServlet?method=logout,当点击注销时,logout创建一个Cookie对象用于保存用户名,然后跳转至 manager/Login.jsp。发布博文的指向 BlogServlet?method=preAdd,当点击发布博文时,preAdd调用ClassDAO里的g

54、etList方法获取博文分类列表,然后跳转到 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方法,获取博文分类列表,

55、然后跳转到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:通过表单获取博文的

56、标题、所属分类、发布时间等信息,然后编写操作,包括编辑、删除和评论。编辑的指向 BlogServlet?method=preEdit&blogId=<%=blog.getId() %>,当点击编辑时,preEdit调用BlogDAO的 getBlogInfoById方法获取博文信息,然后跳转到 manager/blog-edit.jsp。删除的指向 BlogServlet?method=delete&blogId=<%=blog.getId() %>,当点击删除时,delete调用BlogDAO的delete方法,删除一条博文记录,然后跳转到 manag

57、er/result.jsp显示执行结果。评论的指向 CommentServlet?method=listByBlogId&blogId=<%=blog.getId() %>,当点击评论时, listByBlogId调用 CommentDAO的 listByBlogId方法获取评论信息,然后跳转到 manager/comment-manage.jsp。blog-edit.jsp:通过表单获取博文信息,包括博文标题、博文所属分类和博文容,然后将信息提交给 BlogServlet?method=postEdit,postEdit调用BlogDAO的update方法修改博文信息,然后跳转到 manager/result.jsp显示执行结果。class-ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论