正如之前所说的,开发一个struts应用和一般的web应用并没有什么两样。
1. 创建数据库
create database guestbook;
a. guestbook表:用于记录留言的所有信息
CREATE TABLE `guestbook` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(40) ,
`email` varchar(60),
`url` varchar(60),
`subject` varchar(200),
`content` varchar(1024),
`font` varchar(100),
`date` datetime ,
`replyId` int(11)DEFAULT '-1' ,
`iconId` int(3),
`lastReplyTime` datetime ,
`password` varchar(16),
PRIMARY KEY (`id`)
);
字段 |
说明
|
id |
留言编号 |
name |
留言人姓名 |
email |
email地址 |
url |
url地址 |
subject |
留言标题 |
content |
留言内容 |
iconId |
留言使用的表情图标编号 |
font |
内容字体颜色 |
date |
留言时间 |
replyId |
回复留言ID,默认为-1表示不是回复 |
lastReplyTime |
最近回复时间 |
password |
留言所用的密码(用于编辑) |
b. ICON表:用于记录所有的图标记录
CREATE TABLE `icon` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(20),
`src` varchar(200),
`alt` varchar(100),
PRIMARY KEY (`id`)
);
字段 |
说明
|
id |
图标编号 |
name |
图标名称 |
src |
图标的位置 |
alt |
图标的说明 |
2. JDBC Resource与链接池
- 给刚刚建的database建立一个连接,Services标签,点击Databases的MySql Server at localhost:3306;
- 选择刚刚建的guestbook,按右键点击connect;我们可以看到在databases的列表里多了jdbc:mysql://localhost:3306/guestbook的链接;
- 回到projects标签,点击项目名称BBS,按右键选择New > Other... 在Categories里面选择GlassFish;File types项目下面,选择JDBC Connection Pool,按Next;
- 在New JDBC Connection Pool面板里,JDBC Connection Pool Name里输入GuestBookPool(随意),Extract from Existiong Connection的下拉菜单里选择刚刚建立的database连接jdbc:mysql://localhost:3306/guestbook,
其他设置使用默认值即可,按finish结束连接池的创建。
- 同样在Categories里面选择GlassFish;File types项目下面,选择JDBC Resource,按Next;
- 在New JDBC Resource面板里,Using Existing JDBC Connection Pool里选择GuestBookPool(与之前创建的连接池对应);
JNDI Name输入jdbc/bbs(随意),按finish,完成JDBC Resource配置。
3.中文乱码处理
记得在做上一个Servlet的项目的时候,在每个servlet处理request的时候(processRequest()方法),都做过一个request.setCharacterEncoding("UTF-8")的操作;将request的内容转成UTF-8的内码,以解决中文乱码问题。
在Struts的项目里面,我们仍然会遇到中文乱码问题。而我们通过一个创建的CharacterEncodingFilter的辅助类来解决问题。
- CharacterEncodingFilter.java
package com.bbs.struts.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
*
* @author Chucky
*/
public class CharacterEncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void destroy() {
}
}
- 打开web.xml,在Filters的面板中添加以下内容
中文乱码的问题解决了!
4. DbUtils
在处理数据连接的问题上,还是使用DbUtils这个类,详细请看
Blog系统开发 5. JDBC的基本操作与DbUtils的使用 内容。
这里还是写一个DbHelper的辅助类,来简化连接的操作。
DbHelper.java
package com.bbs.struts.util;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
/**
*
* @author Chucky
*/
public class DbHelper {
public static QueryRunner getQueryRunner() {
Context context = null;
DataSource ds = null;
try {
context = new InitialContext();
ds = (DataSource) context.lookup("jdbc/bbs");
} catch (NamingException ex) {
Logger.getLogger(DbHelper.class.getName()).log(Level.SEVERE, null, ex);
}
QueryRunner qr = new QueryRunner(ds);
return qr;
}
}
注意context.lookup()中的数据源,要与之前的数据源匹配。
因为这个bbs的网页设计是按照日月星辰的留言板的页面制作的,所以类似icon之类的数据,直接添加到数据库(假设所有的icon都在
img
目录下,icon素材可以直接到星辰去抓的,
sql的脚本)