Это простая чата, которая не может быть проще.
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 = null;
статический {
/**
* Инициализируйте источник данных.
*/
Mysqldatasource mds = new mysqldatasource ();
mds.seturl ("jdbc: mysql: // localhost: 3306/test");
mds.setuser ("test");
mds.setpassword ("123456");
mds.setcharacterencoding ("utf8");
DataSource = MDS;
}
/**
* Получить подключение к базе данных
* @возвращаться
* @Throhs SQLexception
*/
public Static Connection getConnection () бросает SQLexception {
return DataSource.getConnection ();
}
/**
* Закрыть ресурс подключения к базе данных
* @param conn
* @param s
* @param rs
* @Throhs SQLexception
*/
Public Static Void Close (соединение Conn, оператор S, ResultSet 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 Query SQL, используете анонимные параметры? Указывает, что названные параметры представлены как ": имя параметра"
* @param Params Параметры запроса
* @возвращаться
* @Throhs SQLexception
*/
@Suppresswarnings ("не контролировано")
Общедоступный статический список <map <string, object >> select (Object SQL, Object ... Params) Throws SQLexception {
Object result = dbutil.executesql (sql, params);
if (result == null) {
вернуть ноль;
}еще{
return (list <map <string, object >>) результат;
}
}
/**
* Выполнить вставку
* @param sql
* @param params
* @возвращаться
* @Throhs SQLexception
*/
public static int insert (Object SQL, Object ... Params) бросает SQLexception {
вернуть dbutil.update (sql, params);
}
/**
* Выполнить операторы изменения базы данных (добавить, удалить, изменить)
* @param sql Query SQL, используете анонимные параметры? Указывает, что названные параметры представлены как ": имя параметра"
* @param Params Параметры запроса
* @возвращаться
* @Throhs SQLexception
*/
Public Static Int Update (Object SQL, Object ... Params) бросает SQLexception {
Object result = dbutil.executesql (sql, params);
if (result == null) {
возврат 0;
}еще{
вернуть (целое число) результат;
}
}
/**
* Выполнить удаление
* @param sql
* @param params
* @возвращаться
* @Throhs SQLexception
*/
public static int delete (Object SQL, Object ... Params) бросает SQLexception {
вернуть dbutil.update (sql, params);
}
/**
* Общий метод выполнения SQL
* @param sql Query SQL, используете анонимные параметры? Указывает, что названные параметры представлены как ": имя параметра"
* @param params с именем параметров
* @возвращаться
* @Throhs SQLexception
*/
public Static Object executionSql (Object SQL, Object ... Params) Throws SQLexception {
if (sql == null || "". equals (sql.tostring (). trim ())) бросить новое sqlexception ("Заявление SQL пусто!");
// Получить оператор SQL
String sqlstr = sql.tostring (). Trim ();
// Обработка с именем параметров
if (params! = null & ¶ms.length == 1 & ¶ms [0] exanceOf map) {
Список <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;
Подготовленное предприятие PS = NULL;
Результат RS = NULL;
пытаться {
conn = dbutil.getConnection ();
ps = conn.preprestatement (sqlstr);
if (null! = params) {
// Инициализировать параметры запроса
для (int i = 0; i <params.length; i ++) {
Объект param = params [i];
if (param! = null) {
ps.setObject (i+1, param);
}еще{
ps.setnull (i+1, types.null);
}
}
}
// Обработка набора результатов
логический isresultset = ps.execute ();
Список <object> result = new ArrayList <Object> ();
делать {
if (isresultset) {
Список <map <string, object >> tableData = new ArrayList <map <string, object >> ();
Результаты Результаты = 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) {
вернуть ноль;
} else if (result.size () == 1) {
вернуть результат.get (0);
} еще {
результат возврата;
}
} catch (sqlexception e) {
бросить новое sqlexception ("Invalid SQL!->"+SQL);
} окончательно {
Dbutil.close (conn, ps, rs);
}
}
}
Webservlet.java
Кода -копия выглядит следующим образом:
пакет com.hongyuan.core;
импортировать java.io.ioexception;
импортировать java.io.unsupportedencodingexception;
Импорт 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 ("serial")
Public Class Webservlet расширяет httpservlet {
Защищенный httpservletrequest request = null;
Защищенный httpservletresponse response = null;
Защищенная карта <string, string> cfgparams = new hashmap <string, string> ();
/**
* Метод доступа по умолчанию
* @ThrohS Exception
*/
public void initPage () бросает исключение {}
@Override
public final void init (конфигурация ServletConfig) Throws ServletException {
@Suppresswarnings ("не контролировано")
Enumeration <string> names = config.getinitparameternames ();
while (names.hasmoreelements ()) {
String name = names.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 («класс не найден ->»+Beanclass);
} catch (classnotfoundexception e1) {
e1.printstacktrace ();
}
} catch (nosuchfieldException e) {
пытаться {
бросить новое nosuchfieldexception («Поле объявления бобов не найдено ("+Beanname+")") ");
} catch (nosuchfieldException e1) {
e1.printstacktrace ();
}
} catch (Exception e) {
e.printstacktrace ();
}
}еще{
cfgparams.put (name, config.getinitparameter (name));
}
}
}
@Override
Public Final void Service (httpservletrequest, httpservletresponse response) {
this.Request = запрос;
this.Response = ответ;
String Encoding = null;
пытаться {
Encoding = cfgparams.get ("Кодирование");
if (кодирование == null || "".
request.setcharacterencoding (кодирование);
response.setcharacterencoding (кодирование);
} catch (unsupportedencodingexception e2) {
пытаться {
бросить новый UnsupportedEncodingException («Неподдерживаемый набор символов («+кодирование+»)»);
} catch (UnsupportEncodingException e) {
e.printstacktrace ();
}
}
String action = null;
пытаться {
// Поверните запрос на указанный метод в соответствии с параметрами маршрутизации
String routeParam = cfgparams.get ("routeparam");
action = this.get ((routeparam == null || "". equals (routeparam))? "Action": routeParam, "initPage");
this.getClass (). getMethod (action) .invoke (это);
} catch (allogalaccessexception e) {
пытаться {
бросить новый allosalaccessexception ("method ("+action+") доступа отказано!");
} catch (allogalaccessexception e1) {
e1.printstacktrace ();
}
} catch (nosuchmethodexception e) {
пытаться {
бросить новое nosuchmethodexception («метод не найден ("+action+")!");
} catch (nosuchmethodexception e1) {
e1.printstacktrace ();
}
} catch (Exception e) {
e.printstacktrace ();
}
}
/**
* Отображение указанной страницы
* @param Page
* @Throws ioException
* @Throws ServletException
*/
Защищенная void show (String page) {
String pagepath = cfgparams.get ("pagepath");
пытаться {
request.getRequestDispatcher (((pagePath == null || "". equals (pagepath))? "/web-inf/pages/": pagepath)+page) .forward (request, response);
} catch (Exception e) {
e.printstacktrace ();
}
}
/**
* Распечатайте указанную строку
* @param str
* @Throws ioException
*/
Защищенная void print (string str) {
пытаться {
response.getWriter (). print (str);
} catch (ioException e) {
e.printstacktrace ();
}
}
/**
* Получить параметр запроса с указанным именем
* @param имя
* @param def
* @возвращаться
*/
Защищенная строка get (string name, string def) {
String value = request.getParameter (name);
if (value! = null &&! "". equals (value.trim ())) {
возвращаемое значение;
}еще{
вернуть def;
}
}
/**
* Вывод указанные параметры на страницу
* @param имя
* @param value
*/
защищенная void put (name строка, значение объекта) {
request.setattribute (имя, значение);
}
}
SQL.Java
Кода -копия выглядит следующим образом:
пакет com.hongyuan.talk.cfg;
public enum sql {
// Извлечение информации пользователя SQL
Get_userinfo ("Выберите идентификатор, user_name, пароль от пользователя, где user_name =: имя пользователя и пароль = md5 (: пароль)"),
// Сохранить информацию пользователя SQL
Save_user ("Вставка в user (user_name, password) значения (: username, md5 (: пароль))");
частное значение окончательного строки;
private sql (строковое значение) {
this.value = значение;
}
public String getValue () {
вернуть это.
}
@Override
public String 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 пароль
* @возвращаться
*/
Public Map <String, Object> GetUserInfo (Final String username, Final String Password) {
пытаться {
Список <map <string, object >> userinfo = dbutil.select (sql.get_userinfo, new hashmap <string, object> () {{{{{{
PUT («Имя пользователя», имя пользователя);
PUT («Пароль», пароль);
}});
if (userInfo! = null && userInfo.size () == 1) {
вернуть userinfo.get (0);
}
} catch (sqlexception e) {
e.printstacktrace ();
}
вернуть ноль;
}
/**
* Сохранить пользовательскую информацию
* @param имя пользователя
* @param пароль
* @возвращаться
*/
Public Boolean SaveUser (Final String UserName, Final String Password) {
пытаться {
int count = dbutil.insert (sql.save_user, new hashmap <string, object> () {{{{{{{{
PUT («Имя пользователя», имя пользователя);
PUT («Пароль», пароль);
}});
if (count == 1) {
вернуть истину;
}
} catch (sqlexception e) {
e.printstacktrace ();
}
вернуть ложь;
}
}
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;
Общедоступный TalkServlet расширяет WebServlet {
Общественные ток -буба;
@Override
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 () бросает ioException {
String username = this.get ("username", "");
String пароль = this.get ("пароль", "");
if (! "". Equals (username) &&! "",. equals (пароль)) {
// Извлеките информацию пользователя
Map <string, object> userInfo = talkbean.getUserinfo (имя пользователя, пароль);
if (userInfo! = null) {
// Сохранить пользовательскую информацию в сеанс
request.getSession (). setattribute ("userInfo", userInfo);
response.sendredirect ("./ talkservice.srv? action = talkpage");
возвращаться;
}
}
show ("login.jsp");
}
// зарегистрироваться
public void reg () бросает ioException {
String username = this.get ("username", "");
String пароль = this.get ("пароль", "");
String passconfirm = this.get ("passconfirm", "");
if (! "" ,. equals (username) &&! "",. equals (password) && password.equals (passconfirm)) {
if (talkbean.saveuser (имя пользователя, пароль)) {
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 ("имя пользователя", info.get ("user_name"));
Show ("talk.jsp");
возвращаться;
}
show ("login.jsp");
}
// Отправить сообщение
public void sendmsg () бросает UnsupportedEncodingException {
String msg = this.get ("message", "");
if (! "". equals (msg)) {
Event 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 («Сообщение», новая строка (msg.getbytes ("utf-8"), "iso-8859-1"));
Dispatcher.getInstance (). Multicast (Event);
}
}
}
Примечание. Следующее содержит только основной код
Выше приведено в этой статье, надеюсь, вам понравится.