正如之前所說的,開發(fā)一個struts應用和一般的web應用并沒有什么兩樣。
1. 創(chuàng)建數(shù)據(jù)庫
a. guestbook表:用于記錄留言的所有信息
b. ICON表:用于記錄所有的圖標記錄
2. JDBC Resource與鏈接池
記得在做上一個Servlet的項目的時候,在每個servlet處理request的時候(processRequest()方法),都做過一個request.setCharacterEncoding("UTF-8")的操作;將request的內(nèi)容轉(zhuǎn)成UTF-8的內(nèi)碼,以解決中文亂碼問題。
在Struts的項目里面,我們?nèi)匀粫龅街形膩y碼問題。而我們通過一個創(chuàng)建的CharacterEncodingFilter的輔助類來解決問題。
4. DbUtils
在處理數(shù)據(jù)連接的問題上,還是使用DbUtils這個類,詳細請看Blog系統(tǒng)開發(fā) 5. JDBC的基本操作與DbUtils的使用 內(nèi)容。
這里還是寫一個DbHelper的輔助類,來簡化連接的操作。
DbHelper.java
因為這個bbs的網(wǎng)頁設計是按照日月星辰的留言板的頁面制作的,所以類似icon之類的數(shù)據(jù),直接添加到數(shù)據(jù)庫(假設所有的icon都在
img 目錄下,icon素材可以直接到星辰去抓的,sql的腳本)
1. 創(chuàng)建數(shù)據(jù)庫
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` 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地址 | |
url | url地址 |
subject | 留言標題 |
content | 留言內(nèi)容 |
iconId | 留言使用的表情圖標編號 |
font | 內(nèi)容字體顏色 |
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` 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結束連接池的創(chuàng)建。
- 同樣在Categories里面選擇GlassFish;File types項目下面,選擇JDBC Resource,按Next;
- 在New JDBC Resource面板里,Using Existing JDBC Connection Pool里選擇GuestBookPool(與之前創(chuàng)建的連接池對應);
JNDI Name輸入jdbc/bbs(隨意),按finish,完成JDBC Resource配置。
記得在做上一個Servlet的項目的時候,在每個servlet處理request的時候(processRequest()方法),都做過一個request.setCharacterEncoding("UTF-8")的操作;將request的內(nèi)容轉(zhuǎn)成UTF-8的內(nèi)碼,以解決中文亂碼問題。
在Struts的項目里面,我們?nèi)匀粫龅街形膩y碼問題。而我們通過一個創(chuàng)建的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的面板中添加以下內(nèi)容
4. DbUtils
在處理數(shù)據(jù)連接的問題上,還是使用DbUtils這個類,詳細請看Blog系統(tǒng)開發(fā) 5. JDBC的基本操作與DbUtils的使用 內(nèi)容。
這里還是寫一個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()中的數(shù)據(jù)源,要與之前的數(shù)據(jù)源匹配。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;
}
}
因為這個bbs的網(wǎng)頁設計是按照日月星辰的留言板的頁面制作的,所以類似icon之類的數(shù)據(jù),直接添加到數(shù)據(jù)庫(假設所有的icon都在
img 目錄下,icon素材可以直接到星辰去抓的,sql的腳本)