首页 理论教育网络留言板实战,JSP、Model1架构

网络留言板实战,JSP、Model1架构

【摘要】:完成本任务所用到的主要知识点:JSP Model 1会话跟踪技术JavaBean使用JSP Model 1 架构模型实现一个网站中经常用到的模块:网络留言板。网络留言板,简称留言板,又称为留言簿或留言本,是目前网站中使用较广泛的一种与用户沟通、交流的方式。图上机7.1用户信息表数据建立用户信息和留言信息JavaBean 类。若发表成功,则转向留言板页面;若发表失败,则转向错误页面显示错误信息。

完成本任务所用到的主要知识点:

➢ JSP Model 1

➢ 会话跟踪技术

➢ JavaBean

使用JSP Model 1 架构模型实现一个网站中经常用到的模块:网络留言板。

网络留言板,简称留言板,又称为留言簿或留言本,是目前网站中使用较广泛的一种与用户沟通、交流的方式。通过留言板,可收集来自用户的意见或需求信息,并可作出相应的回复,从而实现网站与客户之间及不同客户之间的交流与沟通。

JSP Model 1 架构主要使用JSP 和JavaBean 技术来开发Web 应用,JavaBean 封装对数据库的操作代码和部分的业务逻辑的代码,JSP 页面中既会包含输出效果的HTML、CSS 代码,也会包含表示业务逻辑的Java 代码。

(1)建库、建表。

如果将用户的留言保存在数据库中,首先建立数据库MessageBoardDB。本程序中想实现只有登录用户才能进行留言,所以需要建立两张表:用户信息表(UserInfo)和留言表(MessageInfo)。

用户信息表和留言表的相关字段及字段说明见表上机7.1 和表上机7.2。

表上机7.1 UserInfo(用户信息表)

表上机7.2 MessageInfo(留言表)

向用户信息表插入测试数据,如图上机7.1 所示。

图上机7.1 用户信息表数据

(2)建立用户信息和留言信息JavaBean 类。

用户信息JavaBean 类(UserInfo.java),代码如下。

留言信息JavaBean 类(MessageInfo.java),代码如下。

(3)建立用户信息和留言信息相应的数据访问类。

用户信息和留言信息数据访问类定义了访问数据库的方法。

用户信息数据访问类(UserDao.java),代码如下。

上述代码中,getUserInfo()方法用于根据用户编号获取用户信息,而validateLogin()方法用于验证用户登录,根据传入的用户名和密码查询数据库中UserInfo 表,将查询出的用户信息封装成一个UserInfo 对象返回。代码中数据库访问工具类DBConn 与前面上机指导中的DBConn 类除连接的数据库不同外,其他都相同,这里不再贴出DBConn 类的代码。(www.chuimin.cn)

留言信息数据访问类(MessageDao.java)的代码如下。

上述代码中,主要定义了两个关于留言信息访问数据库的方法,其中getMessages()方法用于从数据库中获取所有的留言信息,addMessage()方法将一条用户的留言添加到数据库的留言表中。在MessageDao.java 中,除定义了两个访问数据库的方法外,还定义了一个私有的方法用于将时间字符串转换为Date 对象。

(4)建立登录页面(login.html)和验证登录的页面(checkLogin.jsp)。

登录页面(login.html)代码如下。

验证登录的页面(checkLogin.jsp)代码如下。

在验证登录页面中,对登录数据进行了验证,若登录数据为空或者登录失败就返回登录页面重新登录,若登录成功,则转向留言板页面(index.jsp)。

(5)留言板页面(index.jsp)。

在留言板页面,将输出所有的留言信息,并提供一个发表留言的表单。首先查询出所有的留言信息,然后循环输出。在输出留言时间时,将调用该页面定义的ConvertDate()方法,该方法将Date 对象格式化为一个时间字符串。在输出用户头像的图片时,将调用该页面定义的getPhotoFile()方法,该方法判断用户头像的图片文件在photos 文件夹下是否存在,若不存在使用默认头像代替。如图上机7.2 所示为留言板首页。

图上机7.2 留言板首页(无留言)

图上机7.2 所示的留言板页面还没有任何留言,用户“唐伯虎点蚊香”发表了第一条留言,如图上机7.3 所示。

图上机7.3 留言板页面(有留言)

这时,若删除photos 文件夹下该用户的头像图片,或者更该数据库中用户的头像字段为一个在photos 文件夹中不存在的图片文件名,再刷新留言板页面后的效果如图上机7.4 所示,这时将使用默认的图片。

图上机7.4 使用默认用户头像

(6)发表留言页面(addMessage.jsp)。

在该页面中获取了用户的留言内容,并进行了过滤(为了防止恶意脚本攻击),然后将留言数据封装为一个留言对象,并调用MessageDao 对象的addMessage()方法发表留言。若发表成功,则转向留言板页面;若发表失败,则转向错误页面显示错误信息。以下是包含对字符串进行过滤的方法的StringUtil 类的代码。

例如,用户“太牛了”发表了一条留言包含一段JS 脚本代码,如图上机7.5 所示。但是将其进行了字符串过滤,把代码的标签字符都进行了转换,如“<”转换为“&lt;”。若不进行字符串过滤,那么当刷新页面时就会执行用户输入的JS 脚本代码。

图上机7.5 发表留言(字符串过滤后效果)

(7)退出(loginOut.jsp)。

退出页面中调用了session 对象的invalidate()方法使会话失效,并重定向到登录页面。