博客网站系统实训报告
发布时间:2014-02-17 12:07:12
发布时间:2014-02-17 12:07:12
苏 州 市 职 业 大 学
实习(实训)报告
名称 项目开发综合实训
博客网站系统设计
2013年 6 月 24日至 2013年7月4日共 2周
学院(部) 计算机工程学院
班 级 11软件技术(外包)
学 号 116314112
姓 名 蒋思思
学院(部)负责人 李金祥
系 主 任 周德富
指导教师 陈静/李璐
目 录
1.项目实训的目的与要求 1
1.1 项目实训目的 1
2.课题说明 1
2.1需求分析 1
2.2开发工具与技术介绍 2
3.总体设计 2
3.1系统项目规划 2
3.2系统功能结构图 3
3.3数据库设计 4
4. 系统实现 6
4.1博客系统登录界面 6
4.2博客网站首页 7
4.3新博客注册界面 8
4.4个性化设置界面 9
4.5写日志页面 10
4.6相册页面 11
5. 开发技巧与实现方法 12
5.1在Struts中使用拦截器进行用户登录的实现 12
5.2在拦截器中进行配置 13
5.3利用Hibernate技术进行个人博客操作 13
5.4进行个人博客操作后,进行配置修改 14
5.5在Action中进行超链接的调用 14
6. 项目实训总结 15
7、参考文献 16
课程设计总的目的在于加深对网页设计与制作的基本知识的理解,网页设计与制作技能综合运用和提高,通过真实工作任务,使我们能设计出有一定水平的网页并解决培养解决实际问题的能力,掌握实际网页设计与制作开发流程和开发方法。
具体的课程设计应达到以下目的:
1.提高我们在实际操作中收集信息,对信息进行价值判断,信息整理、加工的能力。
2.在实际的项目任务中培养网页设计方面的素养。
3.在实际的项目任务中使我们网页编程和制作的能力得到提高。
4. 培养相关知识和技能的综合应用能力。
5.掌握运用JAVA EE语言及数据库原理知识进行系统分析和设计的方法
课程的要求在于:考验我们上课所学知识,我们能否独自完成一个网页系统的开发。我们要熟练应用JAVA EE所学的知识,与数据库相结合,制作一个具有实用和美观双重功能的网页系统。
博客是Blog的中文译名,随着网络的发展,博客成为网民不可缺少的一部分。目前主流门户网站,例如网易、新浪都开通了自己的博客频道。除此之外,还出现了博客网站,也就是说在博客网站中仅能写博客和看别人的博客,例如IT技术最有名的博客园。在本章中我们就来开发一个类似的网站系统。
求贤人才网是一家专业于IT方向招聘的网站,为了更好的招聘到合适的人才,推出博客业务。求贤人才网通过博客用户的技术水平来判断他是否能够胜任相应的工作,公司用户也可以通过看博客用户的文章看到相应的技术水平。求贤人才网将通过这种方式,招揽更多的人才,从而增加自己的招聘业务量。
对于求贤人才网来说,最大的需求就是让更多的用户浏览和注册,并且发表自己的博客文章。对于用户而言,首先要能浏览其他用户发表的文章,并且这项操作是应该不需要登录的。用户注册并登录后,要能够发表自己的信息,从而能够提供给别人查看。
硬件平台:
● CPU:P41.8GHz;
● 内存:256MB以上。
软件平台:
● 操作系统:Windows 7 Server;
● 数据库:MySQL;
● 开发工具包:DreamweaverCS4, PhotoshopCS4,Eclipse;
● 服务器:IIS 5.1;
● 浏览器:IE5.0及以上版本,推荐使用IE6.0;
分辨率:最佳效果1024×768。
该博客网站的功能主要是为了博客用户设计开发的,用户进入博客网站后,有三种选择,注册新用户,登录和浏览博客。通过注册和登录用户可以获取自己博客空间,如果不进行这些操作,用户也可以浏览其他用户的博客内容。
进入自己博客中,用户要能够完成如下功能
● 对自己的博客进行个性化设计
● 发表日志
● 上传图片和对图片进行浏览
在博客首页中,是不区分用户是否登录的,用户用能够完成如下功能:
● 浏览博客网站的所有文章
● 浏览某一博客用户发表的所有文章
● 浏览某一博客用户上传的图片
● 对文章进行评论
● 查看文章的点击率
● 查看文章的评论量
本系统首先需要对用户进行身份验证,验证时判断用户是以注册用户还是普通游客。如果已是注册用户,则跳转到对应的个人博客的页面;如果是游客,则直接进入到博客网站首页。下面是博客网站的功能结构图。
是 否
图 3.1模块结构图
本系统一共设计出5个实体,分别是用户实体、文章实体、个性化实体、评论实体以及点击量实体。
(1)用户表用来存储博客系统中建立自己的博客,并进行博客操作的客户,包括用户名、密码、昵称、密码保护问题和密码保护回答字段。
表3.1 用户表
(2)个性设置表用来储存用户对个人博客进行个性化设置的基本信息,包括用户名、博客标题和个性签名。
表3.1 个性设置表
(3)文章表用来存储博客系统中博客文章的基本信息,包括文章的Id、文章标题、文章内容、发表用户名、发表时间和评论数。
表3.1 文章表
(4)评论表用来存储博客系统中所有评论的基本信息,包括评论Id、评论文章、评论内容和评论用户。
表3.1 评论表
(5)点击量表用来存储博客系统中点击文章的基本信息,包括ID,文章ID,点击者IP和点击时间。
表3.1 点击量表
如下图所示
图4.1 博客系统登录界面
登录界面关键代码如下:
public String execute() throws Exception {
User user = new User();
user.setUsername(username);
user.setPassword(password); //获得request
HttpServletRequest request = ServletActionContext.getRequest();
if(userService.loginUser(user)) {
request.setAttribute("url", "user/getBlogInfo.action");
request.setAttribute("info", "登陆成功");
//将username保存到session范围中
// HttpSession session =request.getSession();
Map session = ActionContext.getContext().getSession();
// session.setAttribute("username", username);
session.put("username", username);
return SUCCESS;
} else {
request.setAttribute("url", "login.jsp");
request.setAttribute("info", "登陆失败");
return ERROR;
}
}
进入登录界面后,可以选择不登录,而是直接单击“博客首页”,从而进入博客系统首页,在博客系统首页中可以查看到该博客的网站中已经发表的博客文章,在博客网站的右半部分还可以看到文章的发表时间、点击量、评论和发表用户。
图4.2 博客网站首页
下面是博客网站页面的关键代码:
public String execute() throws Exception {
Page page = new Page(); //分页信息
page.setCurrentPage(0); //设置当前页为第一页
page.setEveryPage(10); //每页显示10条记录
Result result = articleService.
showArticleByPage(page);//通过调用业务逻辑组件来完成查询
page = result.getPage();
List
String filePath = ServletActionContext.
getServletContext().getRealPath("/rss.xml");//设置订阅文件地址
CreateRss.publishRss(all, filePath);//写入订阅文件
return this.SUCCESS;
}
游客可以点击新用户注册来注册属于自己的用户。点击新用户注册就可以进行新用户注册。
图4.3 新博客注册界面
下面是新博客注册页面的关键代码:
public String execute() throws Exception {
//封装一个user对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setNickname(nickname);
user.setQuestion(question);
user.setAnswer(answer); //获得request
HttpServletRequest request = ServletActionContext.getRequest();
if(userService.registerUser(user)) {
request.setAttribute("url", "login.jsp");
request.setAttribute("info", "注册成功");
return SUCCESS;
}else {
request.setAttribute("url", "register.jsp");
request.setAttribute("info", "注册失败");
return ERROR;
}
}
登陆博客成功后,这是将进入到自己的博客页面,首先是让用户进行个性化设置。
图4.4 个性化设置界面
下面是个性化设计界面的关键代码:
public String execute() throws Exception {
// //获得request
// HttpServletRequest request = ServletActionContext.getRequest();
// //获得session
// HttpSession session =request.getSession();
// //获得username
// String username = (String) session.getAttribute("username");
Map session = ActionContext.getContext().getSession();
String username = (String) session.get("username");
BlogInfo blogInfo = new BlogInfo(); //设置用户名
blogInfo.setUsername(username); //设置博客标题
blogInfo.setBlogtitle(blogtitle); //设置个性签名
blogInfo.setIdiograph(idiograph); //调用业务逻辑组件来完成设置
blogInfoService.setBlogInfo(blogInfo);
return this.SUCCESS;
}
单击“用户首页”超链接,可以查看自己已写完的所有博客文章,这是和游客相同的操作,单击“写日记”超链接,就会进入写日记页面。
图4.5 写日志页面
下面是写日记界面的关键代码:
public String execute() throws Exception {
Map session = ActionContext.getContext().getSession();
String username = (String) session.get("username");
//封装一个PO类的对象
Article article = new Article();
article.setTitle(title);
article.setContent(content);
article.setUsername(username);
article.setDate(new Date());
article.setHasread(0);
articleService.addArticle(article);
return this.SUCCESS;
}
}
在个人博客中,单击“相册”超链接,就会进入到相册页面。
图4.6 相册页面
下面是相册页面的关键代码:
public String execute() throws Exception {//获得username
Map session = ServletActionContext.getContext().getSession();
String username = (String) session.get("username");//创建一个输入流
InputStream is = new FileInputStream(myFile);//设置文件保存目录
File tofile = new File(photoPath,filename);//使用输出流来包装目标文件
OutputStream os = new FileOutputStream(tofile);
byte[] buffer = new byte[1024];
int length = 0;
while((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}//关闭输入流
is.close();//关闭输出流
os.close();
return this.SUCCESS;
}
在网站中有些功能是需要用户必须登录才能操作的,例如博客网站中的发布文章,因为该操作是不定位置的,所以直接在该功能上加上一个控制层是不合适的。如果要完成该功能,在Struts2中就是采用拦截器的概念,在操作前先经过拦截器,通过拦截器判断用户是否登录。如果已经登录,则可以通过;如果没有登录,则返回让用户进行登录。
package com.sanqing.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class UserInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context =invocation.getInvocationContext();
Map session = context.getContext().getSession();
String username = (String) session.get("username");
if(username == null || "".equals(username)) {
return Action.LOGIN;
} else {
return invocation.invoke();
}
}
}
拦截器开发完成后,还是不能起到效果的,还需要在Struts配置文件struts.xml中进行配置。
class="com.sanqing.interceptor.UserInterceptor">
当进行个人博客操作时,是要将用户输入的信息保存到数据库中的。在本系统项目中,进行数据库操作是通过Hibernate技术完成的,从而使DAO方法应用 也更加简单。
import com.sanqing.po.User;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
public void add(User user) {
this.getHibernateTemplate().save(user);
}
public void delete(User user) {
}
public List queryAll() {
return null;
}
public User queryByID(String username) {
List list = this.getHibernateTemplate().find("select user from User user where user.username = '" + username + "'");
if(list.size() == 0) {
return null;
} else {
return (User)list.get(0);
}
}
}
因为本项目是采用Spring进行处理,所以需要配置文件中对DAO进行配置。
在显示所有文章页面中,每一个文章标题都是超链接,单击文章标题就会显示该文章的所有信息,包括内容、评论和点击数。这些都将在查看文章Action中进行调用。
package com.sanqing.dao;
public class ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO {
public Article queryById(int id) {
List find = this.getHibernateTemplate().find("select art from Article art where art.id = ?", id);
return (Article) find.get(0);
}
}
通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是已开始面对自己的题目时,还是有些不知所措,都不知道如何下手,后来去图书馆借了几本相关的书籍,心里在感觉有了一些底。
经过这差不多四个星期来的学习与编码,总算还是收获不少,对JavaEE的认识也更加的深刻了。JSP是一门新技术,他基于Java Servlet以及整个JavaEE框架体系的Web开发技术。从网上得知JavaEE的中文问题历史悠久,连绵不绝,至今也没有完全解决,但是上有政策下有对策,我们总是有办法搞定它的。跟JavaEE相关的中文问题主要有两类,一类是编程的问题,涉及到I/O,内码转换等。第二类是JavaEE运行环境的配置,涉及字体,属性配置等。觉得很有必要给自己写个备忘录之类的。学习了JavaEE,感触很深,这一技术是需要有一定基础、而且动手能力强的学科。书上也强调一点是:要想真正地掌握JavaEE技术,必须有较好的java语言基础,以及HTML语言方面的知识。想想的确对啊。
在这个过程中,我感觉就像人生的一个缩影,充满了酸甜苦辣。当一个问题想了好久也无法解决时,我感到沮丧与无助。当经过努力解决了一个程序上的难题时,我感到无比的喜悦。当经过每天为了编写代码一坐就是四五个小时,晚上还要写到凌晨一两点钟的时候,我感到无比的痛苦。但艰难痛苦已成往事,灿烂的明天向我走来,今天我总算迎接了胜利的果实,以前的辛酸与痛苦化作我坚强的力量,将在我将来的人生历程中,为我的美好明天打下坚实的基础。通过两周的实习JavaEE,这个实习,使我初步掌握和了解了JavaEE的基本运行原理、各个对象的结构和功能、怎样连接数据库、能自己手动写code开发一些小网页。并且,自己能够组建一台JavaEE服务器,而且还了解了安装过程中,所要注意的事项。对于一些简单的小问题,能够自己动手排除。
[1]. 明日科技,陈丹丹,朱晓编著:《Java Web典型模块与项目实战大全》[M],电子工业出版社,2012年4月
[2].李刚编著:《轻量级Java EE企业应用实战(第3版):Struts 2+Spring 3+Hibernate整合开发》[M], 电子工业出版社,2012年4月
[3].余芳 等编著:《JSP动态网站开发案例指导》[M], 电子工业出版社,2009年4月
[4]. 邬继成编著:《J2EE开源编程精要15讲》[M],电子工业出版社,2008年1月
[5].龚永罡编著:《Java Web应用开发实用教程》[M],机械工业出版社, 2011年12月
[6].厉小军编著:《Web编程技术》[M],机械工业出版社, 2010年7月
[7].徐婉珍编著:《JSP动态网站开发项目教程》[M],电子工业出版社, 2010年11月