Dies ist ein einfacher Chatraum, der nicht einfacher sein kann.
1. Benutzerregistrierung.
2. Benutzeranmeldung.
3. Natürlich können Sie auch chatten.
Dbutil.java
Die Codekopie lautet wie folgt:
Paket com.hongyuan.core;
Import Java.sql.Connection;
importieren java.sql.preeParedStatement;
importieren java.sql.resultset;
importieren java.sql.sqlexception;
importieren java.sql.statement;
importieren java.sql.types;
Import Java.util.ArrayList;
import Java.util.hashMap;
importieren java.util.list;
import Java.util.map;
Import Java.util.Regx.Matcher;
Import Java.util.Regex.Pattern;
importieren javax.sql.datasource;
import com.mysql.jdbc.jdbc2.optional.mysqldataSource;
öffentliche Klasse Dbutil {
private statische DataSource -DataSource = null;
statisch{
/**
* Initialisieren Sie die Datenquelle.
*/
MysqldataSource mds = new mySqldataSource ();
mds.seturl ("jdbc: mysql: // localhost: 3306/test");
Mds.SetUser ("Test");
mds.setPassword ("123456");
mds.setcharactercoding ("utf8");
DataSource = mds;
}
/**
* Datenbankverbindung abrufen
* @zurückkehren
* @Throws SQLEXception
*/
öffentliche statische Verbindung getConnection () löst SQLEXception {aus
return DataSource.getConnection ();
}
/**
* Schließen Sie die Datenbankverbindungsressource
* @param conn
* @param s
* @param rs
* @Throws SQLEXception
*/
public static void schließen (Verbindung conn, Anweisung s, resultset rs) {
versuchen {
if (rs! = null) rs.close ();
} catch (sqlexception e) {
E. printstacktrace ();
}
versuchen {
if (s! = null) s.close ();
} catch (sqlexception e) {
E. printstacktrace ();
}
versuchen {
if (conn! = null) conn.close ();
} catch (sqlexception e) {
E. printstacktrace ();
}
}
/**
* Führen Sie die Anweisung der Datenbankabfrage aus
* @param SQL Abfrage SQL, Verwenden Sie anonyme Parameter? Gibt an, dass die benannten Parameter durch ": Parametername" dargestellt werden.
* @param Params Abfragungsparameter
* @zurückkehren
* @Throws SQLEXception
*/
@Suppresswarnings ("Unbekämpft")
öffentliche statische Liste <map <String, Objekt >> select (Object SQL, Objekt ... Params) löst SQLEXception {aus
Objektergebnis = dbutil.executesql (SQL, Params);
if (result == null) {
null zurückkehren;
}anders{
return (list <map <String, Objekt >>) Ergebnis;
}
}
/**
* Insertion durchführen
* @param SQL
* @param params
* @zurückkehren
* @Throws SQLEXception
*/
public static int Insert (Objekt SQL, Objekt ... Params) löst SQLEXception {aus
return dbutil.update (SQL, Params);
}
/**
* Ausführen von Datenbankdatensatzänderungen Änderungsanweisungen (hinzufügen, löschen, ändern).
* @param SQL Abfrage SQL, Verwenden Sie anonyme Parameter? Gibt an, dass die benannten Parameter durch ": Parametername" dargestellt werden.
* @param Params Abfragungsparameter
* @zurückkehren
* @Throws SQLEXception
*/
public static int update (Object SQL, Objekt ... Params) löst SQLEXception {aus
Objektergebnis = dbutil.executesql (SQL, Params);
if (result == null) {
Rückkehr 0;
}anders{
return (Ganzzahl) Ergebnis;
}
}
/**
* Löschung durchführen
* @param SQL
* @param params
* @zurückkehren
* @Throws SQLEXception
*/
public static int delete (Object SQL, Objekt ... Params) löst SQLEXception {aus
return dbutil.update (SQL, Params);
}
/**
* Allgemeine SQL -Ausführungsmethode
* @param SQL Abfrage SQL, Verwenden Sie anonyme Parameter? Gibt an, dass die benannten Parameter durch ": Parametername" dargestellt werden.
* @Param -Parameter mit dem Namen Parameter
* @zurückkehren
* @Throws SQLEXception
*/
Das öffentliche statische Objekt wird ql (Object SQL, Object ... Params) ausführt SQLEXception {
if (sql == null || "". Equals (sql.toString (). trim ())) neue SQLEXception ("SQL Anweisung ist leer!");
// SQL -Anweisung erhalten
String sqlstr = sql.toString (). Trim ();
// Verarbeitung mit dem Namen Parameter
if (params!
Liste <Object> plist = new ArrayList <Object> ();
Karte <string, objekt> pmap = (map <string, objekt>) params [0];
Matcher pmatcher = muster.comPile (": (// w+)"). Matcher (SQLSTR);
while (pmatcher.find ()) {
String pname = pmatcher.group (1);
plist.add (pmap.get (pname));
}
sqlstr = pmatcher.replaceall ("?");
params = plist.toArray ();
}
Verbindung conn = null;
PrepedStatement ps = null;
ResultSet rs = null;
versuchen {
conn = dbutil.getConnection ();
ps = conn.preparestatement (SQLSTR);
if (null! = params) {
// Abfrageparameter initialisieren
für (int i = 0; i <params.length; i ++) {
Objekt param = params [i];
if (param! = null) {
ps.SetObject (i+1, param);
}anders{
Ps.SetNull (i+1, Typen.null);
}
}
}
// Verarbeitung des Ergebnissatzes
boolean isResultSet = ps.execute ();
Liste <Object> result = new ArrayList <Object> ();
Tun {
if (isResultSet) {
Liste <map <string, objekt >> tabledata = new ArrayList <map <String, Objekt >> ();
ResultSet resultSet = ps.getResultSet ();
while (resultset.next ()) {
Karte <String, Object> rowdata = new HashMap <String, Object> ();
für (int i = 1; i <= resultSet.getmetadata (). getColumnCount (); i ++) {
rowdata.put (resultSet.getmetadata (). getColumnName (i), resultSet.getObject (i));
}
tabldata.add (Rowdata);
}
result.add (tabbenata);
} anders {
result.add (New Integer (ps.getupDateCount ()));
}
} while ((isResultSet = ps.getMoreresults ()) == true || ps.getupDateCount ()! = -1);
// Verarbeitungsrückgabeergebnis
if (result.size () == 0) {
null zurückkehren;
} else if (result.size () == 1) {
Rückgabeergebnis.get (0);
} anders {
Rückgabeergebnis;
}
} catch (sqlexception e) {
Neue SQLEXception ("Ungültiges SQL!->"+SQL);
} Endlich {
Dbutil.close (conn, ps, rs);
}
}
}
WebServlet.java
Die Codekopie lautet wie folgt:
Paket com.hongyuan.core;
importieren java.io.ioException;
importieren java.io.unsupportedenCodingException;
Import Java.util.Enumeration;
import Java.util.hashMap;
import Java.util.map;
importieren javax.servlet.servletConfig;
importieren javax.servlet.servletException;
import Javax.servlet.http.httpServlet;
importieren javax.servlet.http.httpServletRequest;
importieren javax.servlet.http.httpServletResponse;
@Suppresswarnings ("Serial")
Public Class WebServlet erweitert HttpServlet {
geschützte httpServletRequest Request = null;
geschützte httpServletResponse -Antwort = null;
Protected Map <String, String> cfgParams = new Hashmap <String, String> ();
/**
* Standardzugriffsmethode
* @throws Ausnahme
*/
public void initpage () löst Ausnahme {} aus
@Override
public final void init (servletConfig config) löst servletException {aus
@Suppresswarnings ("Unbekämpft")
Enumeration <string> names = config.getInitParameternames ();
while (names.hasmoreElements ()) {
String name = names.nextElement ();
if (name.startswith ("bean _")) {
// Bean -Objekt in Servlet injizieren
String beanname = name.substring ("Bean _". Länge ());
String beanclass = config.getInitParameter (Name);
versuchen {
if (beanclass == null || "". Equals (beanclass.trim ())) neue Ausnahme ("Klassenname nicht konfiguriert! ->"+Beanname);
Object bean = class.Forname (BeanClass) .NewInstance ();
this.getClass (). Getfield (Beanname) .set (this, bean);
} catch (InstantiationException e) {
versuchen {
Neue Instanziationsexception werfen ("kann nicht instanziieren ("+BeanClass+")!");
} catch (InstantiationException E1) {
e1.printstacktrace ();
}
} catch (classNotFoundException e) {
versuchen {
neue classNotFoundException werfen ("Klasse nicht gefunden ->"+BeanClass);
} catch (classNotFoundException e1) {
e1.printstacktrace ();
}
} catch (nosuchfieldException e) {
versuchen {
neue NoSuchfieldException werfen ("Bean -Deklaration -Feld nicht gefunden ("+Beanname+")");
} catch (nosuchfieldException e1) {
e1.printstacktrace ();
}
} catch (Ausnahme e) {
E. printstacktrace ();
}
}anders{
cfgParams.put (Name, config.GetInitParameter (Name));
}
}
}
@Override
öffentliche endgültige void Service (httpServletRequest -Anfrage, HttpServletResponse -Antwort) {
this.request = Anfrage;
this.Response = Antwort;
String coding = null;
versuchen {
coding = cfgParams.get ("coding");
if (coding == null || "". Equals (coding.trim ())) coding = "utf-8";
request.setcharactercoding (codieren);
response.setcharactercoding (codieren);
} catch (unportedenCodingException e2) {
versuchen {
Neue nicht unterstützte AnscodingException werfen ("nicht unterstütztes Zeichen set ("+codieren+")");
} catch (unportedenCodingException e) {
E. printstacktrace ();
}
}
String action = null;
versuchen {
// Die Anforderung an die angegebene Methode gemäß den Routing -Parametern wenden
String RouteParam = cfgParams.get ("Routesparam");
action = this.get ((RouteParam == NULL || "". Equals (RouteParam))? "Action": RouteParam, "Initpage");
this.getClass (). getMethod (action) .Invoke (this);
} catch (illegalAccessException e) {
versuchen {
Neue illegale Accessexception ("Methode ("+action+") Zugriff verweigert!");
} catch (illegalAccessException e1) {
e1.printstacktrace ();
}
} catch (nosuchmethodException e) {
versuchen {
Neue NoSuchmethodexception werfen ("Methode nicht gefunden ("+action+")!");
} catch (NoSuchMethodException E1) {
e1.printstacktrace ();
}
} catch (Ausnahme e) {
E. printstacktrace ();
}
}
/**
* Zeigen Sie die angegebene Seite an
* @param Seite
* @throws ioException
* @Throws ServletException
*/
Protected void show (String -Seite) {
String pagepath = cfgParams.get ("PagePath");
versuchen {
Request.GetRequestDispatcher (((pagePath == null || ". Equals (PagePath)?"/web-inf/pages/": pagePath)+Seite) .forward (request, Antwort);
} catch (Ausnahme e) {
E. printstacktrace ();
}
}
/**
* Drucken Sie die angegebene Zeichenfolge
* @param str
* @throws ioException
*/
geschützter void print (String str) {
versuchen {
Antwort.getWriter (). Print (str);
} catch (ioException e) {
E. printstacktrace ();
}
}
/**
* Holen Sie sich den Anforderungsparameter mit dem angegebenen Namen
* @param Name
* @param def
* @zurückkehren
*/
Protected String get (String -Name, String def) {
String value = request.getParameter (Name);
if (value! = null &&! "". Equals (value.trim ()) {
Rückgabewert;
}anders{
Rückgabe def;
}
}
/**
* Ausgabe Angaben angegebene Parameter zur Seite
* @param Name
* @param value
*/
Protected void put (String -Name, Objektwert) {
Request.SetAttribute (Name, Wert);
}
}
Sql.java
Die Codekopie lautet wie folgt:
Paket com.Hongyuan.talk.cfg;
public enum sql {
// Benutzerinformationen extrahieren SQL -Anweisung
Get_userinfo ("ID, user_name, Passwort vom Benutzer auswählen, wobei user_name =: userername und password = md5 (: password)")),
// Benutzerinformationen SQL -Anweisung speichern
SAVE_USER ("In Benutzer (user_name, password) einfügen (: Benutzername, MD5 (: Passwort))");
privater endgültiger Stringwert;
private SQL (String -Wert) {
this.Value = Wert;
}
public String getValue () {
kehre diesen Wert zurück;
}
@Override
public String toString () {
kehre diesen Wert zurück;
}
}
Talkbean.java
Die Codekopie lautet wie folgt:
Paket com.hongyuan.talk;
importieren java.sql.sqlexception;
import Java.util.hashMap;
importieren java.util.list;
import Java.util.map;
import com.hongyuan.core.dbutil;
import com.hongyuan.talk.cfg.sql;
öffentliche Klasse Talkbean {
/**
* Benutzerinformationen extrahieren
* @param userername
* @param Passwort
* @zurückkehren
*/
public map <String, Objekt> getUserInfo (endgültiger String -Benutzername, endgültiges Zeichenfolgenkennwort) {
versuchen {
Liste <map <String, Objekt >> userInfo = dbutil.Select (SQL.get_Userinfo, New HashMap <String, Object> () {{{{{{{{{{
put ("Benutzername", Benutzername);
put ("Passwort", Passwort);
}});
if (userInfo! = null && userInfo.size () == 1) {
userInfo.get (0) zurückgeben;
}
} catch (sqlexception e) {
E. printstacktrace ();
}
null zurückkehren;
}
/**
* Benutzerinformationen speichern
* @param userername
* @param Passwort
* @zurückkehren
*/
public boolean SaveUser (endgültiger String -Benutzername, endgültiges Zeichenfolgenkennwort) {
versuchen {
int count = dbutil.insert (sql.save_user, neuer Hashmap <String, Object> () {{{{
put ("Benutzername", Benutzername);
put ("Passwort", Passwort);
}});
if (count == 1) {
zurückkehren;
}
} catch (sqlexception e) {
E. printstacktrace ();
}
false zurückgeben;
}
}
TalkServlet.java
Die Codekopie lautet wie folgt:
Paket com.hongyuan.talk;
importieren java.io.ioException;
importieren java.io.unsupportedenCodingException;
import Java.util.map;
import nl.justObjects.puslet.core.dispatcher;
import nl.justObjects.puslet.core.event;
import com.hongyuan.core.webservlet;
Public Class TalkServlet erweitert WebServlet {
öffentliche Talkbean Talkbean;
@Override
public void initpage () {
Object userInfo = request.getSession (). GetAtTribute ("userInfo");
if (userInfo! = null) {
talkPage ();
}anders{
loginpage ();
}
}
// Geben Sie die Anmeldeseite ein
public void loginpage () {
show ("login.jsp");
}
// Geben Sie die Registrierungsseite ein
public void regpage () {
show ("reg.jsp");
}
//Einloggen
public void login () löst ioException {aus {
String username = this.get ("username", "");
String password = this.get ("Passwort", "");
if (! "". Equals (Benutzername) &&! ", Equals (Passwort)) {
// Benutzerinformationen extrahieren
MAP <string, Object> userInfo = thedbean.getUserInfo (Benutzername, Passwort);
if (userInfo! = null) {
// Benutzerinformationen in Sitzung speichern
request.getSession (). setAttribute ("userInfo", userInfo);
response.sendredirect ("./ talkService.srv? action = talkPage");
zurückkehren;
}
}
show ("login.jsp");
}
//registrieren
public void reg () löst ioException {aus
String username = this.get ("username", "");
String password = this.get ("Passwort", "");
String passconfirm = this.get ("passconfirm", "");
if (! "", Equals (Benutzername) &&!
if (talkbean.saveuser (Benutzername, Passwort)) {
response.sendredirect ("./ TalkService.srv? Action = loginPage");
zurückkehren;
}
}
show ("reg.jsp");
}
// Geben Sie die Chat -Seite ein
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");
zurückkehren;
}
show ("login.jsp");
}
// eine Nachricht senden
public void sendmsg () wirft eine nicht unterstützte AnscodingException {aus {
String msg = this.get ("message", "");
if (! "". Equals (msg)) {
Ereignisereignis = Ereignis.CreatedataEvent ("/Message/World");
Object userInfo = request.getSession (). GetAtTribute ("userInfo");
if (userInfo! = null) {
Map <String, Object> info = (Map <String, Object>) userInfo;
Event.SetField ("Benutzername", neuer String (info.get ("user_name"). toString (). getBytes ("utf-8"), "ISO-8859-1");
}
Event.SetField ("Nachricht", neuer String (msg.getBytes ("UTF-8"), "ISO-8859-1"));
Dispatcher.getInstance (). Multicast (Ereignis);
}
}
}
Hinweis: Das Folgende enthält nur den Hauptcode
Das obige dreht sich alles um diesen Artikel, ich hoffe es gefällt euch.