BBS Struts项目 - 02. 数据库/链接池/中文乱码处理以及其他

BBS Struts项目 - 02. 数据库/链接池/中文乱码处理以及其他
正如之前所说的,开发一个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的脚本)


你可能感兴趣的:(BBS Struts项目 - 02. 数据库/链接池/中文乱码处理以及其他)