| |
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文件时一定要注意。
|
|