นี่เป็นห้องแชทง่าย ๆ ที่ไม่สามารถทำได้ง่ายขึ้น
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 {
DataSource DataSource ส่วนตัว = NULL;
คงที่ {
-
* เริ่มต้นแหล่งข้อมูล
-
MySqldataSource MDS = ใหม่ mySqldataTaSource ();
mds.seturl ("jdbc: mysql: // localhost: 3306/test");
mds.setuser ("ทดสอบ");
MDS.SetPassword ("123456");
MDS.Setcharacterencoding ("UTF8");
DataSource = MDS;
-
-
* รับการเชื่อมต่อฐานข้อมูล
* @กลับ
* @throws sqlexception
-
การเชื่อมต่อแบบคงที่สาธารณะ getConnection () พ่น sqlexception {
ส่งคืน dataSource.getConnection ();
-
-
* ปิดทรัพยากรการเชื่อมต่อฐานข้อมูล
* @param Conn
* @param s
* @param rs
* @throws sqlexception
-
โมฆะคงที่สาธารณะปิด (Connection Conn, คำสั่ง S, ResultSet RS) {
พยายาม {
ถ้า (rs! = null) rs.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
-
พยายาม {
ถ้า (s! = null) s.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
-
พยายาม {
if (conn! = null) conn.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
-
-
-
* เรียกใช้คำสั่ง Query ฐานข้อมูล
* @Param SQL แบบสอบถาม SQL ใช้พารามิเตอร์ที่ไม่ระบุชื่อหรือไม่? ระบุว่าพารามิเตอร์ที่มีชื่อจะถูกแทนด้วย ": ชื่อพารามิเตอร์"
* @param พารามิเตอร์การสืบค้นพารามิเตอร์
* @กลับ
* @throws sqlexception
-
@suppresswarnings ("ไม่ได้ตรวจสอบ")
รายการคงที่สาธารณะ <แผนที่ <สตริงวัตถุ >> เลือก (Object SQL, Object ... Params) พ่น sqlexception {
ผลลัพธ์วัตถุ = dbutil.executesql (sql, params);
if (result == null) {
คืนค่า null;
}อื่น{
return (list <map <string, object >>) ผลลัพธ์;
-
-
-
* ทำการแทรก
* @param sql
* @param params
* @กลับ
* @throws sqlexception
-
การแทรก int คงที่สาธารณะ (วัตถุ SQL, วัตถุ ... params) พ่น sqlexception {
ส่งคืน dbutil.update (SQL, params);
-
-
* เรียกใช้คำสั่งการเปลี่ยนแปลงบันทึกฐานข้อมูล (เพิ่ม, ลบ, แก้ไข)
* @Param SQL แบบสอบถาม SQL ใช้พารามิเตอร์ที่ไม่ระบุชื่อหรือไม่? ระบุว่าพารามิเตอร์ที่มีชื่อจะถูกแทนด้วย ": ชื่อพารามิเตอร์"
* @param พารามิเตอร์การสืบค้นพารามิเตอร์
* @กลับ
* @throws sqlexception
-
การอัปเดต int แบบคงที่สาธารณะ (Object SQL, Object ... Params) พ่น sqlexception {
ผลลัพธ์วัตถุ = dbutil.executesql (sql, params);
if (result == null) {
กลับ 0;
}อื่น{
ผลลัพธ์กลับ (จำนวนเต็ม);
-
-
-
* ทำการลบ
* @param sql
* @param params
* @กลับ
* @throws sqlexception
-
Public Static Int Delete (Object SQL, Object ... Params) พ่น sqlexception {
ส่งคืน dbutil.update (SQL, params);
-
-
* วิธีการดำเนินการ SQL ทั่วไป
* @Param SQL แบบสอบถาม SQL ใช้พารามิเตอร์ที่ไม่ระบุชื่อหรือไม่? ระบุว่าพารามิเตอร์ที่มีชื่อจะถูกแทนด้วย ": ชื่อพารามิเตอร์"
* @param พารามิเตอร์ชื่อพารามิเตอร์
* @กลับ
* @throws sqlexception
-
วัตถุคงที่สาธารณะ ExecutesQl (Object SQL, Object ... Params) พ่น sqlexception {
if (sql == null || "". equals (sql.toString (). trim ())) โยน sqlexception ใหม่ ("คำสั่ง SQL ว่างเปล่า!");
// รับคำสั่ง SQL
String sqlstr = sql.toString (). trim ();
// การประมวลผลชื่อพารามิเตอร์
if (params! = null & ¶ms.length == 1 & ¶Ms [0] แผนที่อินสแตนซ์ของแผนที่) {
รายการ <Object> plist = new ArrayList <Object> ();
แผนที่ <สตริงวัตถุ> pmap = (แผนที่ <สตริงวัตถุ>) พารามิเตอร์ [0];
matcher pmatcher = pattern.compile (": (// w+)"). matcher (sqlstr);
ในขณะที่ (pmatcher.find ()) {
สตริง pname = pmatcher.group (1);
plist.add (pmap.get (pname));
-
sqlstr = pmatcher.replaceall ("?");
params = plist.toarray ();
-
การเชื่อมต่อ conn = null;
PreparedStatement PS = NULL;
ผลลัพธ์ RS = NULL;
พยายาม {
conn = dbutil.getConnection ();
ps = conn.prepareStatement (SQLSTR);
ถ้า (null! = params) {
// เริ่มต้นพารามิเตอร์การสืบค้น
สำหรับ (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);
-
-
-
// ประมวลผลชุดผลลัพธ์
บูลีน isResultset = ps.execute ();
รายการ <jobch> result = new ArrayList <Object> ();
ทำ {
ถ้า (isResultset) {
รายการ <map <string, object >> tableData = new ArrayList <แผนที่ <string, Object >> ();
Resultset Setterset = ps.getResultset ();
ในขณะที่ (resultset.next ()) {
แผนที่ <string, Object> RowData = ใหม่ HashMap <String, Object> ();
สำหรับ (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 (จำนวนเต็มใหม่ (ps.getUpDateCount ()));
-
} ในขณะที่ ((isResultset = ps.getMoreresults ()) == true || ps.getUpDateCount ()! = -1);
// ผลการประมวลผลผลตอบแทน
if (result.size () == 0) {
คืนค่า null;
} อื่นถ้า (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.unsupportencodingexception;
นำเข้า Java.util.enumeration;
นำเข้า 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 ("อนุกรม")
WebServlet ระดับสาธารณะขยาย HttpServlet {
คำขอ HTTPSERVLETREQUEST ที่ได้รับการป้องกัน = NULL;
ป้องกัน httpservletResponse = null;
แผนที่ป้องกัน <สตริง, สตริง> cfgparams = new hashmap <string, string> ();
-
* วิธีการเข้าถึงเริ่มต้น
* @throws ยกเว้น
-
โมฆะสาธารณะ initPage () โยนข้อยกเว้น {}
@Override
เป็นโมฆะสุดท้ายสาธารณะ init (servletConfig config) พ่น servletexception {
@suppresswarnings ("ไม่ได้ตรวจสอบ")
การแจงนับ <String> ชื่อ = config.getInitParameterNames ();
ในขณะที่ (names.hasmoreElements ()) {
ชื่อสตริง = names.nextElement ();
if (name.startswith ("Bean _")) {
// inject bean object ไปยัง servlet
สตริง BeanName = name.substring ("Bean _". length ());
สตริง beanclass = config.getInitParameter (ชื่อ);
พยายาม {
if (beanclass == null || "". equals (beanclass.trim ())) โยนข้อยกเว้นใหม่ ("ชื่อคลาสไม่ได้กำหนดค่า! ->"+Beanname);
Object Bean = class.forName (BeanClass) .NewInstance ();
this.getClass (). getfield (Beanname) .set (นี่, ถั่ว);
} catch (InstantiationException e) {
พยายาม {
โยน InstantiationException ใหม่ ("ไม่สามารถสร้างอินสแตนซ์ ("+beanclass+")!");
} catch (InstantiationException E1) {
e1.printstacktrace ();
-
} catch (classnotFoundException e) {
พยายาม {
โยน classnotfoundexception ใหม่ ("ไม่พบคลาส ->"+Beanclass);
} catch (classnotFoundException e1) {
e1.printstacktrace ();
-
} catch (nosuchfieldexception e) {
พยายาม {
โยน nosuchfieldexception ใหม่ ("ไม่พบสนามประกาศถั่ว ("+Beanname+")");
} catch (nosuchfieldexception e1) {
e1.printstacktrace ();
-
} catch (Exception e) {
E.PrintStackTrace ();
-
}อื่น{
cfgParams.put (ชื่อ, config.getInitParameter (ชื่อ));
-
-
-
@Override
บริการโมฆะสุดท้ายสาธารณะ (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) {
this.request = คำขอ;
this.response = การตอบสนอง;
การเข้ารหัสสตริง = null;
พยายาม {
การเข้ารหัส = cfgParams.get ("การเข้ารหัส");
if (encoding == null || "". equals (encoding.trim ())) การเข้ารหัส = "utf-8";
request.Setcharacterencoding (การเข้ารหัส);
Response.Setcharacterencoding (การเข้ารหัส);
} catch (unsupportencodingexception e2) {
พยายาม {
โยน unsupportencodingexception ใหม่ ("ชุดอักขระที่ไม่ได้รับการสนับสนุน ("+การเข้ารหัส+")");
} catch (unsupportencodingexception e) {
E.PrintStackTrace ();
-
-
การกระทำของสตริง = null;
พยายาม {
// เปลี่ยนคำขอเป็นวิธีที่ระบุตามพารามิเตอร์การกำหนดเส้นทาง
String routeparam = cfgparams.get ("nouteparam");
action = this.get ((routeparam == null || "". เท่ากับ (nouteparam))? "การกระทำ": routeparam, "initPage");
this.getClass (). getMethod (การกระทำ) .invoke (นี่);
} catch (unglegalAccessException e) {
พยายาม {
โยนการเข้าถึง unlegalAccessException ใหม่ ("วิธีการ ("+action+") การเข้าถึงที่ถูกปฏิเสธ!");
} catch (unglegalAccessException e1) {
e1.printstacktrace ();
-
} catch (nosuchmethodexception e) {
พยายาม {
โยน nosuchmethodexception ใหม่ ("ไม่พบวิธีการ ("+action+")!");
} catch (nosuchmethodexception e1) {
e1.printstacktrace ();
-
} catch (Exception e) {
E.PrintStackTrace ();
-
-
-
* แสดงหน้าที่ระบุ
* หน้า @param
* @throws ioexception
* @throws servletexception
-
Void แสดงการป้องกัน (หน้าสตริง) {
สตริง pagepath = cfgparams.get ("pagepath");
พยายาม {
request.getRequestDispatcher ((pagepath == null || "". เท่ากับ (pagepath))? "/web-inf/pages/": pagepath)+หน้า). forward (ขอตอบกลับ);
} catch (Exception e) {
E.PrintStackTrace ();
-
-
-
* พิมพ์สตริงที่ระบุ
* @param str
* @throws ioexception
-
Void Print (String Str) {
พยายาม {
Response.getWriter (). พิมพ์ (STR);
} catch (ioexception e) {
E.PrintStackTrace ();
-
-
-
* รับพารามิเตอร์คำขอด้วยชื่อที่ระบุ
* @param ชื่อ
* @param def
* @กลับ
-
สตริงที่ป้องกันได้รับ (ชื่อสตริง, สตริง def) {
ค่าสตริง = request.getParameter (ชื่อ);
if (value! = null &&! "". equals (value.trim ())) {
ค่าส่งคืน;
}อื่น{
กลับ def;
-
-
-
* เอาต์พุตพารามิเตอร์ที่ระบุไปยังหน้า
* @param ชื่อ
* ค่า @param
-
Void Protected Put (ชื่อสตริงค่าวัตถุ) {
request.setAttribute (ชื่อ, ค่า);
-
-
sql.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.hongyuan.talk.cfg;
enum สาธารณะ sql {
// แยกข้อมูลผู้ใช้คำสั่ง SQL
get_userinfo ("เลือก ID, user_name, รหัสผ่านจากผู้ใช้ที่ user_name =: ชื่อผู้ใช้และรหัสผ่าน = md5 (: รหัสผ่าน)"),
// บันทึกคำสั่ง SQL ข้อมูลผู้ใช้
save_user ("แทรกลงในผู้ใช้ (user_name, รหัสผ่าน) ค่า (: ชื่อผู้ใช้, md5 (: รหัสผ่าน))");
ค่าสตริงสุดท้ายส่วนตัว;
SQL ส่วนตัว (ค่าสตริง) {
this.value = ค่า;
-
สตริงสาธารณะ getValue () {
คืนค่านี้;
-
@Override
สตริงสาธารณะ toString () {
คืนค่านี้;
-
-
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;
TalkBean ชั้นเรียนสาธารณะ {
-
* แยกข้อมูลผู้ใช้
* @param ชื่อผู้ใช้
* รหัสผ่าน @param
* @กลับ
-
แผนที่สาธารณะ <String, Object> GetUserInfo (ชื่อผู้ใช้สตริงสุดท้าย, รหัสผ่านสตริงสุดท้าย) {
พยายาม {
รายการ <map <string, object >> userInfo = dbutil.select (sql.get_userinfo, hashmap ใหม่ <string, object> () {{
ใส่ ("ชื่อผู้ใช้" ชื่อผู้ใช้);
ใส่ ("รหัสผ่าน", รหัสผ่าน);
-
if (userInfo! = null && userInfo.Size () == 1) {
ส่งคืน userinfo.get (0);
-
} catch (sqlexception e) {
E.PrintStackTrace ();
-
คืนค่า null;
-
-
* บันทึกข้อมูลผู้ใช้
* @param ชื่อผู้ใช้
* รหัสผ่าน @param
* @กลับ
-
Public Boolean SaveUser (ชื่อผู้ใช้สตริงสุดท้าย, รหัสผ่านสตริงสุดท้าย) {
พยายาม {
int count = dbutil.insert (sql.save_user, hashmap ใหม่ <string, object> () {{
ใส่ ("ชื่อผู้ใช้" ชื่อผู้ใช้);
ใส่ ("รหัสผ่าน", รหัสผ่าน);
-
if (count == 1) {
กลับมาจริง;
-
} catch (sqlexception e) {
E.PrintStackTrace ();
-
กลับเท็จ;
-
-
talkservlet.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.hongyuan.talk;
นำเข้า java.io.ioException;
นำเข้า java.io.unsupportencodingexception;
นำเข้า java.util.map;
นำเข้า nl.justobjects.pushlet.core.dispatcher;
นำเข้า nl.justobjects.pushlet.core.event;
นำเข้า com.hongyuan.core.webservlet;
TalkServlet ในชั้นเรียนสาธารณะขยาย WebServlet {
TalkBean สาธารณะ
@Override
โมฆะสาธารณะเริ่มต้น () {
Object userInfo = request.getSession (). getAttribute ("userInfo");
if (userInfo! = null) {
TalkPage ();
}อื่น{
LoginPage ();
-
-
// ป้อนหน้าเข้าสู่ระบบ
Public Void LoginPage () {
แสดง ("login.jsp");
-
// ป้อนหน้าลงทะเบียน
โมฆะสาธารณะ regPage () {
แสดง ("reg.jsp");
-
// เข้าสู่ระบบ
การเข้าสู่ระบบโมฆะสาธารณะ () โยน ioexception {
String username = this.get ("ชื่อผู้ใช้", "");
สตริงรหัสผ่าน = this.get ("รหัสผ่าน", "");
ถ้า (! "". เท่ากับ (ชื่อผู้ใช้) &&! "", เท่ากับ (รหัสผ่าน)) {
// แยกข้อมูลผู้ใช้
แผนที่ <สตริงวัตถุ> userInfo = talkBean.getUserInfo (ชื่อผู้ใช้รหัสผ่าน);
if (userInfo! = null) {
// บันทึกข้อมูลผู้ใช้เป็นเซสชัน
request.getSession (). setAttribute ("userInfo", userInfo);
Response.sendredirect ("./ talkservice.srv? action = talkPage");
กลับ;
-
-
แสดง ("login.jsp");
-
//ลงทะเบียน
public void reg () พ่น ioexception {
String username = this.get ("ชื่อผู้ใช้", "");
สตริงรหัสผ่าน = this.get ("รหัสผ่าน", "");
String passconfirm = this.get ("passconfirm", "");
if (! "" ,. เท่ากับ (ชื่อผู้ใช้) &&! "", เท่ากับ (รหัสผ่าน) && password.equals (passconfirm)) {
if (talkbean.saveuser (ชื่อผู้ใช้รหัสผ่าน)) {
Response.sendredirect ("./ talkservice.srv? action = loginpage");
กลับ;
-
-
แสดง ("reg.jsp");
-
// ป้อนหน้าแชท
Public Void TalkPage () {
Object userInfo = request.getSession (). getAttribute ("userInfo");
if (userInfo! = null) {
แผนที่ <สตริงวัตถุ> info = (แผนที่ <สตริงวัตถุ>) userInfo;
this.put ("ชื่อผู้ใช้", info.get ("user_name"));
แสดง ("talk.jsp");
กลับ;
-
แสดง ("login.jsp");
-
// ส่งข้อความ
โมฆะสาธารณะ sendmsg () พ่น unsupportencodingexception {
สตริง msg = this.get ("ข้อความ", "");
ถ้า (! "". เท่ากับ (ผงชูรส)) {
เหตุการณ์เหตุการณ์ = event.createdataevent ("/message/world");
Object userInfo = request.getSession (). getAttribute ("userInfo");
if (userInfo! = null) {
แผนที่ <สตริงวัตถุ> info = (แผนที่ <สตริงวัตถุ>) userInfo;
Event.SetField ("ชื่อผู้ใช้", สตริงใหม่ (info.get ("user_name"). ToString (). getBytes ("UTF-8"), "ISO-8859-1"));
-
Event.SetField ("ข้อความ", สตริงใหม่ (msg.getBytes ("UTF-8"), "ISO-8859-1"));
dispatcher.getInstance (). multicast (เหตุการณ์);
-
-
-
หมายเหตุ: ต่อไปนี้มีรหัสหลักเท่านั้น
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่าคุณจะชอบ