これは、このコードには以下の機能が含まれていないシンプルなチャットルームです
1。ユーザー登録。
2。ユーザーログイン。
3。もちろん、チャットすることもできます。
dbutil.java
コードコピーは次のとおりです。
パッケージcom.hongyuan.core;
Java.sql.Connectionをインポートします。
Java.sql.preparedStatementをインポートします。
java.sql.resultsetをインポートします。
java.sql.sqlexceptionをインポートします。
java.sql.Statementをインポートします。
java.sql.typesをインポートします。
java.util.arraylistをインポートします。
java.util.hashmapをインポートします。
java.util.listをインポートします。
java.util.mapをインポートします。
java.util.regex.matcherをインポートします。
java.util.regex.patternをインポートします。
javax.sql.datasourceをインポートします。
com.mysql.jdbc.jdbc2.optional.mysqldatasourceをインポートします。
パブリッククラスdbutil {
private static dataSource dataSource = null;
静的{
/**
*データソースの初期化。
*/
mysqldatasource mds = new mysqldatasource();
mds.seturl( "jdbc:mysql:// localhost:3306/test");
mds.setuser( "test");
mds.setPassWord( "123456");
mds.setcharacterencoding( "utf8");
DataSource = MDS;
}
/**
*データベース接続を取得します
* @戻る
* @Throws sqlexception
*/
public static connection getConnection()throws sqlexception {
DataSource.getConnection()を返します。
}
/**
*データベース接続リソースを閉じます
* @param conn
* @param s
* @param Rs
* @Throws sqlexception
*/
public static void close(connection conn、statement s、resultet rs){
試す {
if(rs!= null)rs.Close();
} catch(sqlexception e){
e.printstacktrace();
}
試す {
if(s!= null)s.close();
} catch(sqlexception e){
e.printstacktrace();
}
試す {
if(conn!= null)conn.close();
} catch(sqlexception e){
e.printstacktrace();
}
}
/**
*データベースクエリステートメントを実行します
* @Param SQLクエリSQL、匿名パラメーターを使用しますか?指定されたパラメーターが「:パラメーター名」で表されていることを示します
* @Param Paramsクエリパラメーター
* @戻る
* @Throws sqlexception
*/
@suppresswarnings( "unchecked")
public static list <map <string、object >> select(object sql、object ... params)throws sqlexception {
オブジェクトresult = dbutil.executesql(sql、params);
if(result == null){
nullを返します。
}それ以外{
return(list <map <string、object >>)result;
}
}
/**
*挿入を実行します
* @param sql
* @param params
* @戻る
* @Throws sqlexception
*/
public static int insert(オブジェクトSQL、オブジェクト...パラマ)スローsqlexception {
dbutil.update(sql、params)を返します。
}
/**
*データベースレコードの変更ステートメントを実行する(追加、削除、変更)
* @Param SQLクエリSQL、匿名パラメーターを使用しますか?指定されたパラメーターが「:パラメーター名」で表されていることを示します
* @Param Paramsクエリパラメーター
* @戻る
* @Throws sqlexception
*/
public static int update(Object sql、object ... params)はsqlexceptionをスローします{
オブジェクトresult = dbutil.executesql(sql、params);
if(result == null){
0を返します。
}それ以外{
return(integer)result;
}
}
/**
*削除を実行します
* @param sql
* @param params
* @戻る
* @Throws sqlexception
*/
public static int delete(Object sql、object ... params)throws sqlexception {
dbutil.update(sql、params)を返します。
}
/**
*一般的なSQL実行方法
* @Param SQLクエリSQL、匿名パラメーターを使用しますか?指定されたパラメーターが「:パラメーター名」で表されていることを示します
* @Param Paramsという名前のパラメーター
* @戻る
* @Throws sqlexception
*/
public staticオブジェクトExecutesQL(オブジェクトSQL、オブジェクト...パラメーション)スローsqlexception {
if(sql == null || ""。equals(sql.toString()。trim()))スローnew sqlexception( "sqlステートメントは空!");
// SQLステートメントを取得します
string sqlstr = sql.toString()。trim();
//名前付きパラメーターの処理
if(params!= null&¶ms.length== 1&¶ms[0] instanceof map){
List <Object> plist = new ArrayList <Object>();
map <string、object> pmap =(map <string、object>)params [0];
matcher pmatcher = pattern.compile( ":(// w+)")。matcher(sqlstr);
while(pmatcher.find()){
string pname = pmatcher.group(1);
plist.add(pmap.get(pname));
}
sqlstr = pmatcher.replaceall( "?");
params = plist.toarray();
}
接続conn = null;
represedStatement PS = null;
結果rs = null;
試す {
conn = dbutil.getConnection();
ps = conn.preparestatement(sqlstr);
if(null!= params){
//クエリパラメーターを初期化します
for(int i = 0; i <params.length; i ++){
Object param = params [i];
if(param!= null){
ps.setObject(i+1、param);
}それ以外{
ps.setnull(i+1、types.null);
}
}
}
//結果セットを処理します
boolean isResultset = ps.execute();
list <Object> result = new ArrayList <Object>();
する {
if(isresultset){
List <Map <String、Object >> tabledata = new ArrayList <Map <String、object >>();
resultSet resultset = ps.getResultset();
while(resultset.next()){
map <string、object> rowdata = new hashmap <string、object>();
for(int i = 1; i <= resultset.getMetadata()。getColumnCount(); i ++){
rowdata.put(resultset.getmetadata()。getColumnName(i)、resultSet.getObject(i));
}
tabledata.add(rowdata);
}
result.add(tabledata);
} それ以外 {
result.add(new Integer(ps.getupdatecount()));
}
} while((isResultset = ps.getMoreresults())== true || ps.getupdatecount()!= -1);
//処理は結果を返します
if(result.size()== 0){
nullを返します。
} else if(result.size()== 1){
return result.get(0);
} それ以外 {
返品結果;
}
} catch(sqlexception e){
新しいsqlexception( "無効なsql! - >"+sql);
} ついに {
dbutil.close(conn、ps、rs);
}
}
}
webservlet.java
コードコピーは次のとおりです。
パッケージcom.hongyuan.core;
java.io.ioexceptionをインポートします。
java.io.unsupportedencodingexceptionをインポートします。
java.util.numerationをインポートします。
java.util.hashmapをインポートします。
java.util.mapをインポートします。
javax.servlet.servletconfigをインポートします。
javax.servlet.servletexceptionをインポートします。
javax.servlet.http.httpservletをインポートします。
javax.servlet.http.httpservletrequestをインポートします。
javax.servlet.http.httpservletResponseをインポートします。
@suppresswarnings( "serial")
パブリッククラスのWebサーバーはhttpservletを拡張します{
保護されたhttpservletrequest request = null;
保護されたhttpservletResponse応答= null;
保護されたマップ<string、string> cfgparams = new hashmap <string、string>();
/**
*デフォルトアクセス方法
* @Throws例外
*/
public void initpage()スロー例外{}
@オーバーライド
パブリックファイナルボイドinit(servletconfig config)はservletexceptionをスローします{
@suppresswarnings( "unchecked")
Enumeration <String> names = config.getInitParameterNames();
while(names.hasmoreElements()){
文字列name = name.nextelement();
if(name.startswith( "bean _")){
//豆すべてをサーブレットに注入します
string beanname = name.substring( "bean _"。length());
string beanclass = config.getInitParameter(name);
試す {
if(beanclass == null || ""。equals(beanclass.trim()))スロー新しい例外( "クラス名は構成されていない! - >"+beanname);
Object bean = class.forname(beanclass).newinstance();
this.getClass()。getfield(beanname).set(this、bean);
} catch(instantiationexception e){
試す {
新しいInstantiationException( "インスタンス化できない("+beanclass+")!");
} catch(instantiationexception e1){
e1.printstacktrace();
}
} catch(classNotFoundException e){
試す {
新しいclassNotFoundException( "Class Not Found->"+BeanClass);
} catch(classNotFoundException e1){
e1.printstacktrace();
}
} catch(nosuchfieldexception e){
試す {
新しいnosuchfieldexception( "bean宣言フィールドが見つかりません("+beanname+")");
} catch(nosuchfieldexception e1){
e1.printstacktrace();
}
} catch(例外e){
e.printstacktrace();
}
}それ以外{
cfgparams.put(name、config.getinitparameter(name));
}
}
}
@オーバーライド
パブリックファイナルボイドサービス(httpservletrequestリクエスト、httpservletresponse応答){
this.request = request;
this.response = response;
文字列エンコード= null;
試す {
encoding = cfgparams.get( "encoding");
if(encoding == null || ""。equals(encoding.trim()))encoding = "utf-8";
request.setcharacterencoding(エンコード);
Response.setcharacterencoding(エンコード);
} catch(unsupportedencodingexception e2){
試す {
新しいUnsportedencodingException( "サポートされていない文字セット("+encoding+")");
} catch(unsupportedencodingexception e){
e.printstacktrace();
}
}
文字列アクション= null;
試す {
//ルーティングパラメーターに従って指定されたメソッドにリクエストを回す
文字列routeparam = cfgparams.get( "routeparam");
action = this.get((routeparam == null || ""。equals(routeparam))? "action":routeparam、 "initpage");
this.getClass()。getMethod(action).invoke(this);
} catch(Illegalaccessexception e){
試す {
新しいIllegalaccessexception( "method("+action+")アクセス拒否!");
} catch(Illegalaccessexception e1){
e1.printstacktrace();
}
} catch(nosuchmethodexception e){
試す {
新しいnosuchmethodexception( "method not not("+action+")!");
} catch(nosuchmethodexception e1){
e1.printstacktrace();
}
} catch(例外e){
e.printstacktrace();
}
}
/**
*指定されたページを表示します
* @paramページ
* @throws ioexception
* @Throws ServleTexception
*/
保護されたvoid show(string page){
文字列pagepath = cfgparams.get( "pagepath");
試す {
request.getRequestDispatcher((((pagepath == null || ""。equals(pagepath))? "/web-inf/pages/":pagepath)+page).forward(request、response);
} catch(例外e){
e.printstacktrace();
}
}
/**
*指定された文字列を印刷します
* @param str
* @throws ioexception
*/
保護されたボイドプリント(String str){
試す {
Response.getWriter()。print(str);
} catch(ioException e){
e.printstacktrace();
}
}
/**
*指定された名前でリクエストパラメーターを取得します
* @param名
* @param def
* @戻る
*/
保護された文字列get(string name、string def){
文字列値= request.getParameter(name);
if(value!= null &&! ""。equals(value.trim())){
返品値。
}それ以外{
defを返します。
}
}
/**
*ページに指定されたパラメーターを出力します
* @param名
* @param値
*/
保護されたvoid put(string name、object value){
request.setattribute(name、value);
}
}
sql.java
コードコピーは次のとおりです。
パッケージcom.hongyuan.talk.cfg;
public enum sql {
//ユーザー情報SQLステートメントを抽出します
get_userInfo( "select id、user_name、user where where user_name =:username and password = md5(:password)")、
//ユーザー情報SQLステートメントを保存します
save_user( "user(user_name、password)values(:username、md5(:password))");
プライベート最終文字列値。
プライベートSQL(String値){
this.value = value;
}
public string getValue(){
this.valueを返します。
}
@オーバーライド
public string toString(){
this.valueを返します。
}
}
talkbean.java
コードコピーは次のとおりです。
パッケージcom.hongyuan.talk;
java.sql.sqlexceptionをインポートします。
java.util.hashmapをインポートします。
java.util.listをインポートします。
java.util.mapをインポートします。
com.hongyuan.core.dbutilをインポートします。
com.hongyuan.talk.cfg.sqlをインポートします。
パブリッククラストークビーン{
/**
*ユーザー情報を抽出します
* @paramユーザー名
* @paramパスワード
* @戻る
*/
パブリックマップ<文字列、オブジェクト> getUserInfo(最終文字列ユーザー名、最終文字列パスワード){
試す {
List <Map <String、object >> userinfo = dbutil.select(sql.get_userinfo、new hashmap <string、object>(){{{{
put( "username"、username);
put( "password"、password);
}});
if(userInfo!= null && userinfo.size()== 1){
return userinfo.get(0);
}
} catch(sqlexception e){
e.printstacktrace();
}
nullを返します。
}
/**
*ユーザー情報を保存します
* @paramユーザー名
* @paramパスワード
* @戻る
*/
public boolean saveuser(最終文字列ユーザー名、最終文字列パスワード){
試す {
int count = dbutil.insert(sql.save_user、new hashmap <string、object>(){{{{{
put( "username"、username);
put( "password"、password);
}});
if(count == 1){
trueを返します。
}
} catch(sqlexception e){
e.printstacktrace();
}
falseを返します。
}
}
talkservlet.java
コードコピーは次のとおりです。
パッケージcom.hongyuan.talk;
java.io.ioexceptionをインポートします。
java.io.unsupportedencodingexceptionをインポートします。
java.util.mapをインポートします。
nl.justobjects.pushlet.core.dispatcherをインポートします。
nl.justobjects.pushlet.core.eventをインポートします。
com.hongyuan.core.webservletをインポートします。
Public Class TalkservletはWebServletを拡張します{
パブリックトークビーントークビーン。
@オーバーライド
public void initpage(){
Object userinfo = request.getSession()。getAttribute( "userinfo");
if(userinfo!= null){
talkPage();
}それ以外{
loginpage();
}
}
//ログインページを入力します
public void loginpage(){
show( "login.jsp");
}
//登録ページを入力します
public void regpage(){
show( "reg.jsp");
}
//ログイン
public void login()throws ioexception {
string username = this.get( "username"、 "");
文字列パスワード= this.get( "password"、 "");
if(! ""。equals(username)&&! ""、。equals(パスワード)){
//ユーザー情報を抽出します
map <string、object> userinfo = talkbean.getuserInfo(username、password);
if(userinfo!= null){
//ユーザー情報をセッションに保存します
request.getSession()。setAttribute( "userInfo"、userInfo);
Response.sendredirect( "./ Talkservice.srv?action = talkPage");
戻る;
}
}
show( "login.jsp");
}
//登録する
public void reg()throws ioexception {
string username = this.get( "username"、 "");
文字列パスワード= this.get( "password"、 "");
string passconfirm = this.get( "passconfirm"、 "");
if(! ""、。equals(username)&&! ""、。equals(password)&& password.equals(passconfirm)){
if(talkbean.saveuser(username、password))){
Response.sendredirect( "./ Talkservice.srv?action = loginpage");
戻る;
}
}
show( "reg.jsp");
}
//チャットページを入力します
public void talkpage(){
Object userinfo = request.getSession()。getAttribute( "userinfo");
if(userinfo!= null){
map <string、object> info =(map <string、object>)userinfo;
this.put( "username"、info.get( "user_name"));
show( "talk.jsp");
戻る;
}
show( "login.jsp");
}
//メッセージを送信します
public void sendmsg()はunsupportedencodingceptionをスローします{
文字列msg = this.get( "message"、 "");
if(! ""。equals(msg)){
イベントevent = event.createdataevent( "/message/world");
Object userinfo = request.getSession()。getAttribute( "userinfo");
if(userinfo!= null){
map <string、object> info =(map <string、object>)userinfo;
event.setfield( "username"、new String(info.get( "user_name")。toString()。getBytes( "utf-8")、 "ISO-8859-1"));
}
event.setfield( "Message"、new String(msg.getBytes( "utf-8")、 "ISO-8859-1"));
Dispatcher.getInstance()。マルチキャスト(イベント);
}
}
}
注:以下には、メインコードのみが含まれています。http://pan.baidu.com/s/1ddio085
上記はこの記事のすべてです。あなたがそれを気に入ってくれることを願っています。