按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
的奇偶性,然后保存到row 中,后面就可以直接使用{row}调用了。
jstl 中的 c:forEach 不但可以处理 Collection,还可以处理数组和Map,使用
jstl 我们更容易写出结构一致的代码,以初学 jsp 来说,自定义 taglib 还是太
复杂了,所以还是先学习一些常用的 jstl 为好。
例子在 lingo…sample/09…02 下,其中只有 list。jsp 中使用了 jstl。
88 / 148
…………………………………………………………Page 89……………………………………………………………
第 10 章 综合电子留言板
注意
将前九章的知识结合起来,实现一个电子留言板,包括注册登录,发帖回复功能。
如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章:
第 11 章 文件上传。
1。 对电子留言板不感兴趣。
10。1。 电子留言板用户指南
首页显示的是主题列表。
用户如果想发表新主题或者对主题进行回复,必须先注册为会员。
89 / 148
…………………………………………………………Page 90……………………………………………………………
注册后进入登录页面进行登录。
登录后即出现在用户在线列表中。
点击标题可以看到主题的详细信息。
90 / 148
…………………………………………………………Page 91……………………………………………………………
登录以后即可发布新主题。
10。2。 数据库设计
数据库 er 图
91 / 148
…………………………………………………………Page 92……………………………………………………………
共定义了三张表:
1。 user 用户,保存注册用的信息。
2。 thread 主题,用户发起的主题帖子,外键关联 user,对应发表主题的用
户
3。 ment 回复,对主题帖子发起的回复,外键关联user 和 thread,对应
发表回复的用户和回复的主题。
建表 sql 脚本放在 10…01/WEB…INF/sql/import。sql。
…用户
create table user(
id bigint; …主键
username varchar (100); …帐号
password varchar (100); …密码
reg_time datetime; …注册时间
last_login datetime …上次登录时间
);
…主题
create table thread(
id bigint; …主题
title varchar (200); …标题
content varchar (2000); …内容
create_time datetime; …发帖时间
update_time datetime; …更新时间
92 / 148
…………………………………………………………Page 93……………………………………………………………
hit integer; …点击数
user bigint …发帖用户
);
…回复
create table ment(
id bigint; …主题
content varchar (2000); …内容
create_time datetime; …发布时间
user bigint; …回复用户
thread bigint …回复的主题
);
根据数据库表建模。每张表对应三部分:domain,dao 和 servlet。domain 是简
单的 javabean 用来封装数据表中的数据,dao 中进行对数据库的业务操作,
servlet 作为控制器处理请求调用 dao 和 domain 实现业务功能。
为了便于管理,将使用到的类分成四个包,domain,dao,utils 和 web。domain;
dao; web 中分别包含 domain; dao 和 servlet 类,utils 包中是数据库连接工具
和过滤器。
这里的 domain 和 dao 都是按照理想状态编写的,将数据库表中的字段对应到
domain 类中,然后 dao 提供 CRUD 功能,不过 dao 中的有些功能并没有用到,比
如 update 和 remove。
10。3。 功能设计
整个在线留言板可分为两大功能部分:用户管理与主题回复管理。
10。3。1。 用户管理
用户管理功能包括:新用户注册,用户登录,用户注销。用户登录的时候顺便带
上一个用户在线列表。
这部分的页面主要在 security 目录下,操作代码都放在
anni。web。UserServlet。java 和对应的 anni。domain。User,anni。dao。UserDao
中。
93 / 148
…………………………………………………………Page 94……………………………………………………………
1。 新用户注册
这是 CRUD 中的 create,向用户表中添加一条新信息,我们只在前台页面
中使用 javascript 进行数据校验,要求用户输入用户名,密码,并且在
两次密码输入相同的时候才能提交。
提交的请求交由 UserServlet 的register()方法处理。
/**
* 注册新用户。
*/
public void register(HttpServletRequest
request;HttpServletResponse response) throws Exception {
String username = request。getParameter(〃username〃);
String password = request。getParameter(〃password〃);
String confirmPassword =
request。getParameter(〃confirmPassword〃);
boolean userExists = userDao。checkExists(username);
if (userExists) {
request。setAttribute(〃error〃; 〃用户名:〃 + username + 〃
已被使用了,请更换其他用户名注册。〃);
request。getRequestDispatcher(〃/security/register。jsp〃)。forward(
request; response);
} else {
User user = new User();
user。setUsername(username);