网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  基于java servlet技术的留言簿     
  文章作者:未知  文章来源:水木森林  
  查看:144次  录入:管理员--2007-11-17  
 
  http://www.linuxforum.net 作者 dream_bird@163.net

这几天整理我机器中的旧文档时,发现了一个不错的基于java servlet技术的留言簿,好象是几个月前我从 http://go.163.com/~netjava/ 找到的,后台数据库用的是sql server。现在我的redhat 6.1上正好安装了apache jserv 1.1、gnujsp 1.0、mysql(包括mm.mysql的jdbc驱动),除此之外还有tomcat 3.1和cocoon 1.8。当然,一般只运行jserv + gnujsp + cocoon + mysql,tomcat是不运行的。既然环境是现成的,为什么不把这个留言簿改改让它可以运行呢?

首先改造它的源代码,把jdbc 驱动和url改成mysql的。guestbookservlet.java程序代码如下:

//javac -encoding iso8859_1 guestbookservlet.java ( for chinese gb2312 )
//javac guestbookservlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.text.dateformat;
import java.util.locale;

public class guestbookservlet extends httpservlet {
    public void init(servletconfig conf) throws servletexception {

     super.init(conf);

        try {
            class.forname("org.gjt.mm.mysql.driver");
        }
        catch( exception e ) {
        }
    }
//sign guestbook
    public void dopost(httpservletrequest req, httpservletresponse res)
    throws servletexception, ioexception {
        string url = "jdbc:mysql://localhost.localdomain:3306/guestbook?user=guest&password=password";
        servletoutputstream out = res.getoutputstream();
        java.util.date date = new java.util.date();
        string name, email, comment;
        connection conn = null;
        exception err = null;
        int id = -1;
        string[] tmp;
//init

//accept name 
        tmp = req.getparametervalues("name");
        if( tmp == null || tmp.length != 1 ) {
            name = null;
        }
        else {
            name = tmp[0];
        }
//accept email  
        tmp = req.getparametervalues("email");
        if( tmp == null || tmp.length != 1 ) {
            email = null;
        }
        else {
            email = tmp[0];
        }
//accept comments       
        tmp = req.getparametervalues("comments");
        if( tmp == null || tmp.length != 1 ) {
            comment = null;
        }
        else {
            comment = tmp[0];
        }
  //header
        res.setcontenttype("text/html");
        printpageheader(out);
        if( name.length() < 1 ) {
            out.println("you must specify a valid name!");
            printcommentform(out);
            printpagefooter(out);
            return;
        }
        if( email.length() < 3 ) {
            out.println("you must specify a valid email address!");
            printcommentform(out);
            printpagefooter(out);
            return;
        }
        if( email.indexof("@") < 1 ) {
            out.println("you must specify a valid email address!");
            printcommentform(out);
            printpagefooter(out);
            return;
        }
        if( comment.length() < 1 ) {
            out.println("you left no comments!");
            printcommentform(out);
            printpagefooter(out);
            return;
        }
        //access to mysql
        try {
            statement statement;
            resultset result;
            
            conn = drivermanager.getconnection(url);
            statement = conn.createstatement();
            result = statement.executequery("select next_id " +
                                            "from sys_gen " +
                                            "where id = ´comment_id´");
            if( !result.next() ) {
                throw new java.sql.sqlexception("failed to generate id.");
            }
            id = result.getint(1) + 1;
            result.close();
            statement.close();
            statement = conn.createstatement();
            statement.executeupdate("update sys_gen set next_id = " + id +
                                    " where id = ´comment_id´");
            statement.close();
            statement = conn.createstatement();
            comment = fixcomment(comment);
            statement.executeupdate("insert into comments " +
                                    "(comment_id, email, name, comment, " +
                                    "cmt_date) "+
                                    "values (" + id +", ´" + email +
                                    "´, ´" + name + "´, ´" +
                                    comment + "´, ´" + date.gettime() +
                                    "´)");
            statement.close();
        }
        catch( java.sql.sqlexception e ) {
            e.printstacktrace();
            err = e;
        }
        finally {
            if( conn != null ) {
                try { conn.close(); }
                catch( exception e ) { }
            }
        }
        if( err != null ) {
            out.println("an error occurred on save: " + err.getmessage());
        }
        else {
            printcommentform(out);
            printcomments(out);
        }
    }
    
    
//browser  the guestbook
    public void doget(httpservletrequest req, httpservletresponse res)
    throws servletexception, ioexception {
        string url = "jdbc:mysql://localhost.localdomain:3306/gusetbook?user=guest&password=password";
        servletoutputstream out = res.getoutputstream();
        connection conn = null;
        int id = -1;
        exception err = null;

        res.setcontenttype("text/html");
        printpageheader(out);
        printcommentform(out);
        printcomments(out);
        printpagefooter(out);
    }

    public string getservletinfo() {
        return "guest book servlet v1.0copyright 251 2000 meng_bo";
    }

    private void printcommentform(servletoutputstream out)
    throws ioexception {
        out.println("
");
        out.println("");
        out.println("");
        out.println("");
        out.println(" name: ");
        out.println(" ");
        out.println(" ");
        out.println("
");
        out.println("");
        out.println(" email: ");
        out.println(" ");
        out.println("
");
        out.println("");
        out.println(" comments: ");
        out.println("
");
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println(" ");
        out.println("");
        out.println("
");
    }

    private void printcomments(servletoutputstream out)
    throws ioexception {
        connection conn = null;
        
        try {
            dateformat fmt = dateformat.getdateinstance(dateformat.full,
                                                        locale.getdefault());
            string url = "jdbc:mysql://localhost.localdomain:3306/guestbook?user=guest&password=password";
            statement stmt;
            resultset results;
            
            conn = drivermanager.getconnection(url);
            stmt = conn.createstatement();
            results = stmt.executequery("select name, email, cmt_date, " +
                                        "comment, comment_id " +
                                        "from comments " +
                                        "order by cmt_date");
            out.println("
");
            while( results.next() ) {
                string name, email, cmt;
                java.util.date date;

                name = results.getstring(1);
                if( results.wasnull() ) {
                    name = "unknown user";
                }
                email = results.getstring(2);
                if( results.wasnull() ) {
                    email = "user@host";
                }
                date = results.getdate(3);
                if( results.wasnull() ) {
                    date = new java.util.date();
                }
                cmt = results.getstring(4);
                if( results.wasnull() ) {
                    cmt = "no comment.";
                }
                out.println("
" + name + " (" + email + ") on " +
                            fmt.format(date));
                cmt = nohtml(cmt);
                out.println("
 
" + cmt + "
");
            }
            out.println("
");
        }
        catch( sqlexception e ) {
            out.println("a database error occurred: " + e.getmessage());
        }
        if( conn != null ) {
            try { conn.close(); }
            catch( exception e ) { }
        }
    }
    
    private void printpageheader(servletoutputstream out)
    throws ioexception {
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println("
guest book
");
    }

    private void printpagefooter(servletoutputstream out)
    throws ioexception {
        out.println("");
        out.println("");
        out.flush();
    }

    private string nohtml(string cmt) {
        if( cmt.indexof("<") != -1 || cmt.indexof(">") != -1 ) {
            string tmp = "";

            for(int i=0; i                char c = cmt.charat(i);

                if( c == ´<´ ) {
                    tmp = tmp + "<";
                }
                else if( c == ´>´ ) {
                    tmp = tmp + ">";
                }
                else {
                    tmp = tmp + c;
                }
            }
            cmt = tmp;
        }
        return cmt;
    }

    private string fixcomment(string comment) {
        if( comment.indexof("´") != -1 ) {
            string tmp = "";
            
            for(int i=0; i                char c = comment.charat(i);
                
                if( c == ´´´ ) {
                    tmp = tmp + "/´";
                }
                else {
                    tmp = tmp + c;
                }
            }
            comment = tmp;
        }
        return comment;
    }
}

对于该程序所要使用的数据库和表,我写了如下三个脚本:

1. create_database.sql

create database guestbook;
grant select,insert,update,delete,create,drop
on guestbook.*
to guest@localhost.localdomain
identified by ´password´;

2. create_tables.sql

use guestbook;
create table sys_gen(
next_id int(8) not null,
id char(10) not null);

insert into sys_gen (next_id, id) values (0, ´comment_id´);

create table comments(
comment_id int(8) not null,
email varchar(64),
name varchar(32),
comment varchar(128),
cmt_date date default ´0000-00-00´ not null);

3. install.sh

#/bin/sh

mysql --user=root --host=localhost.localdomain --password=password < create_database.sql
mysql --user=guest --host=localhost.localdomain --password=password < create_tables.sql

有了这些代码,一切就再明白不过了吧。这里还需要注意的是“<”和“>”在html文件中会出问题,所以谁要把这篇文档转换成html文件时一定要注意。
 
 
上一篇: 基础篇:循环    下一篇: 基于java&xml技术构建植物病虫害远程诊断系统
  相关文档
jrockit 5.0——轻松玩转jvm 11-17
runtimeexception的特殊情况 11-17
struts构建文件上传(9) 11-17
分布式对话服务器的管理 11-17
如何使用java布局器? 11-17
在applet中实现事件向应 11-17
解析j2ee中的安全问题 11-17
java和以网络为核心的未来 11-17
java基础知识(1) 11-17
看看你能过关吗-j2ee面试题集锦 11-16
eclispe下开发struts完整解决乱码问题 03-04
java网络编程基础 socket类的使用方法 11-16
[oracle]使用oracle10g jdbc 驱动中connectioncaching所产生的.. 11-17
中国农历二百年算法及年历程序分析二 11-17
eclipse入门之使用指南及开发eclipse插件(1) 11-17
java设计模式之修饰模式篇 11-17
关于java 的 classpath全解 11-17
工欲善其事,必先利其器之easymock篇 11-17
webwork 和 spring 的整合 11-17
j2ee应用部署(一):基础篇 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息