Esta es una sala de chat simple que no puede ser más simple.
1. Registro del usuario.
2. Inicio de sesión del usuario.
3. Por supuesto que también puedes chatear.
Dbutil.java
La copia del código es la siguiente:
paquete com.hongyuan.core;
import java.sql.connection;
import java.sql.preparedStatement;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
import java.sql.types;
import java.util.arrayList;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import java.util.regex.matcher;
import java.util.regex.pattern;
import javax.sql.dataSource;
import com.mysql.jdbc.jdbc2.optional.mysqlDataSource;
clase pública dbutil {
DataSource de datos estático privadource = NULL;
estático{
/**
* Inicializar la fuente de datos.
*/
MysqlDataSource mds = new MySqlDataSource ();
mds.setUrl ("JDBC: mysql: // localhost: 3306/test");
mds.setUser ("prueba");
mds.setPassword ("123456");
mds.setcharacterEncoding ("UTF8");
dataSource = MDS;
}
/**
* Obtener conexión de base de datos
* @devolver
* @throws sqlexception
*/
Public Static Connection getConnection () lanza SQLException {
return dataSource.getConnection ();
}
/**
* Cierre el recurso de conexión de la base de datos
* @param Conn
* @param s
* @param rs
* @throws sqlexception
*/
Public static void Close (Connection Conn, Declary S, ResultSet RS) {
intentar {
if (rs! = null) rs.close ();
} Catch (SQLException e) {
E.PrintStackTrace ();
}
intentar {
if (s! = null) s.close ();
} Catch (SQLException e) {
E.PrintStackTrace ();
}
intentar {
if (conn! = null) conn.close ();
} Catch (SQLException e) {
E.PrintStackTrace ();
}
}
/**
* Ejecutar la declaración de consulta de la base de datos
* @param SQL Query SQL, ¿usa los parámetros anónimos? Indica que los parámetros nombrados están representados por ": nombre del parámetro"
* @param parámetros de consulta parámetros
* @devolver
* @throws sqlexception
*/
@SupessWarnings ("sin control")
Lista estática pública <map <string, object >> select (Object SQL, Object ... Params) lanza SQLException {
Resultado del objeto = dButil.executesql (SQL, params);
if (result == null) {
regresar nulo;
}demás{
return (list <map <string, objeto >>) resultado;
}
}
/**
* Realizar inserción
* @param sql
* @param params
* @devolver
* @throws sqlexception
*/
public static int Insert (Object SQL, Object ... Params) lanza SQLException {
return dButil.update (SQL, params);
}
/**
* Ejecutar declaraciones de cambio de registro de la base de datos (agregar, eliminar, modificar)
* @param SQL Query SQL, ¿usa los parámetros anónimos? Indica que los parámetros nombrados están representados por ": nombre del parámetro"
* @param parámetros de consulta parámetros
* @devolver
* @throws sqlexception
*/
public static int actualización (Object SQL, Object ... Params) lanza SQLException {
Resultado del objeto = dButil.executesql (SQL, params);
if (result == null) {
regresar 0;
}demás{
Resultado de return (entero);
}
}
/**
* Realizar la eliminación
* @param sql
* @param params
* @devolver
* @throws sqlexception
*/
public static int delete (objeto sql, objeto ... params) lanza SQLException {
return dButil.update (SQL, params);
}
/**
* Método general de ejecución de SQL
* @param SQL Query SQL, ¿usa los parámetros anónimos? Indica que los parámetros nombrados están representados por ": nombre del parámetro"
* @param parámetros nombrados parámetros
* @devolver
* @throws sqlexception
*/
Public static object ejecutesql (objeto sql, objeto ... params) lanza SQLException {
if (sql == null || "". iguales (sql.ToString (). trim ())) tire nueva sqlexception ("La declaración sql está vacía!");
// Obtener la declaración SQL
Cadena sqlstr = sql.ToString (). Trim ();
// Procesamiento de parámetros con nombre
if (params! = null & ¶ms.length == 1 & ¶ms [0] instancia de mapa) {
Lista <S Object> plist = new ArrayList <Sectus> ();
Map <string, object> pmap = (map <string, object>) params [0];
Matcher PMatcher = Pattern.Compile (": (// w+)"). Matcher (SQLSTR);
while (pmatcher.find ()) {
Cadena pname = pmatcher.group (1);
plist.add (pmap.get (pname));
}
sqlstr = pmatcher.replaceall ("?");
params = plist.toarray ();
}
Conexión conn = nulo;
Preparado PS = NULL;
ResultSet rs = null;
intentar {
conn = dButil.getConnection ();
ps = conn.preparestatement (SQLSTR);
if (null! = params) {
// Inicializar los parámetros de consulta
para (int i = 0; i <params.length; i ++) {
Objeto param = params [i];
if (param! = null) {
ps.SetObject (i+1, param);
}demás{
Ps.SetNull (i+1, tipos.null);
}
}
}
// procesando el conjunto de resultados
boolean isResultSet = Ps.Execute ();
Lista <S Object> Result = New ArrayList <ject> ();
hacer {
if (isResultSet) {
Lista <map <string, object >> tableData = new ArrayList <map <string, object >> ();
ResultSet dultSet = ps.getResultSet ();
while (resultset.next ()) {
MAP <String, Object> RowData = new HashMap <String, Object> ();
para (int i = 1; i <= resultSet.getMetadata (). getColumnCount (); i ++) {
RowData.put (resultSet.getMetadata (). getColumnname (i), resultSet.getObject (i));
}
tableData.add (RowData);
}
resultado.Add (Tabledata);
} demás {
resultado.Add (nuevo entero (ps.getUpDateCount ()));
}
} while ((isResultSet = ps.getMorueSults ()) == true || ps.getUpdateCount ()! = -1);
// Processing Devuelve el resultado
if (result.size () == 0) {
regresar nulo;
} else if (result.size () == 1) {
return result.get (0);
} demás {
resultado de retorno;
}
} Catch (SQLException e) {
tirar nueva SQLException ("Inválido SQL!->"+SQL);
} finalmente {
Dbutil.close (conn, ps, rs);
}
}
}
WebServlet.java
La copia del código es la siguiente:
paquete com.hongyuan.core;
import java.io.ioException;
import java.io.unsupportedencodingException;
importar java.util.enerumeration;
import java.util.hashmap;
import java.util.map;
import javax.servlet.servletConfig;
import javax.servlet.servletException;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletRequest;
import javax.servlet.http.httpservletResponse;
@SupessWarnings ("Serial")
Public Class WebServlet extiende httpservlet {
HTTPSERVELTREQUEST protegido solicitud = NULL;
Respuesta HttpServletReSponse protegida = nulo;
mapa protegido <string, string> cfgParams = new HashMap <String, String> ();
/**
* Método de acceso predeterminado
* @@throws Exception
*/
public void initPage () lanza la excepción {}
@Anular
Public Final Void Init (ServletConfig config) lanza ServletException {
@SupessWarnings ("sin control")
Enumeración <string> names = config.getInitParamTernames ();
while (names.hasmoreelements ()) {
Name de cadena = names.nextelement ();
if (name.startswith ("bean _")) {
// Inyectar objeto de frijoles a servlet
String beanName = name.substring ("bean _". Longitud ());
String beanClass = config.getInitParameter (nombre);
intentar {
if (beanclass == null || "". Equals (beanclass.trim ())) tire nueva excepción ("nombre de clase no configurado! ->"+beanName);
Objeto bean = class.forname (beanClass) .newinstance ();
this.getClass (). getField (beanName) .set (this, bean);
} Catch (InstanciationException e) {
intentar {
tirar una nueva instanciaciónxception ("no se puede instanciar ("+beanclass+")!");
} Catch (InstanciationException e1) {
e1.printstackTrace ();
}
} catch (ClassNotFoundException e) {
intentar {
tirar nueva ClassNotFoundException ("Clase no encontrada ->"+BeanClass);
} Catch (ClassNotFoundException e1) {
e1.printstackTrace ();
}
} catch (nosuchfieldException e) {
intentar {
tirar nueva nosuchfieldException ("campo de declaración de frijol no encontrado ("+beanName+")");
} Catch (nosuchfieldException e1) {
e1.printstackTrace ();
}
} Catch (Exception e) {
E.PrintStackTrace ();
}
}demás{
cfgparams.put (name, config.getInitParameter (nombre));
}
}
}
@Anular
Servicio de vacío final público (solicitud httpservletRequest, respuesta httpservletreSponse) {
this.request = request;
this.Response = Respuesta;
Codificación de cadena = nulo;
intentar {
encoding = cfgparams.get ("codificación");
if (encoding == null || "". iguales (encoding.trim ())) encoding = "utf-8";
request.setcharacteriCoding (codificación);
respuesta.setcharacteriCoding (codificación);
} Catch (UnsupportedEncodingException e2) {
intentar {
arrojar nuevo sin apoyo alcodingException ("conjunto de caracteres no compatible ("+codificación+")");
} Catch (UnsupportedEncodingException e) {
E.PrintStackTrace ();
}
}
Action de cadena = nulo;
intentar {
// gire la solicitud al método especificado de acuerdo con los parámetros de enrutamiento
String rutuparam = cfgParams.get ("RouteParam");
Action = this.get ((RouteParam == NULL || "". Equals (RouteParam))? "Acción": RouteParam, "InitPage");
this.getClass (). getMethod (acción) .invoke (this);
} Catch (ilegalAccessException e) {
intentar {
tirar nueva ilegalAccessException ("Método ("+Action+") Access Deneded!");
} Catch (ilegalAccessException e1) {
e1.printstackTrace ();
}
} Catch (nosuchmethodexception e) {
intentar {
tirar nueva nosuchmethodexception ("Método no encontrado ("+Action+")!");
} Catch (nosuchmethodexception e1) {
e1.printstackTrace ();
}
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
/**
* Muestra la página especificada
* @Param Página
* @throws ioexception
* @throws ServletException
*/
show void protegido (página de cadena) {
Cadena PagePath = cfgParams.get ("PagePath");
intentar {
request.getRequestDispatcher (((PagePath == NULL || "". Equals (PagePath))? "/Web-INF/Pages/": PagePath)+Page) .Forward (solicitud, respuesta);
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
/**
* Imprima la cadena especificada
* @param str
* @throws ioexception
*/
impresión vacío protegido (string str) {
intentar {
respuesta.getWriter (). print (str);
} Catch (ioException e) {
E.PrintStackTrace ();
}
}
/**
* Obtenga el parámetro de solicitud con el nombre especificado
* @param nombre
* @param def
* @devolver
*/
Cadena protegida get (nombre de cadena, cadena def) {
Valor de cadena = request.getParameter (nombre);
if (value! = null &&! "". Equals (value.trim ())) {
valor de retorno;
}demás{
regresar def;
}
}
/**
* Salida de parámetros especificados a la página
* @param nombre
* @Param Value
*/
protegido nulo put (nombre de cadena, valor de objeto) {
request.setAttribute (nombre, valor);
}
}
Sql.java
La copia del código es la siguiente:
paquete com.hongyuan.talk.cfg;
public enum SQL {
// Extraer la instrucción SQL de información del usuario
Get_userInfo ("Seleccione ID, user_name, contraseña de usuario donde user_name =: username and contraseña = md5 (: contraseña)"),
// Guardar información del usuario Declaración SQL
Save_user ("Insertar en los valores de usuario (user_name, contraseña) (: nombre de usuario, md5 (: contraseña))");
valor de cadena final privado;
SQL privado (valor de cadena) {
this.Value = value;
}
public String getValue () {
devolver este.value;
}
@Anular
public String toString () {
devolver este.value;
}
}
Talkbean.java
La copia del código es la siguiente:
paquete com.hongyuan.talk;
import java.sql.sqlexception;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import com.hongyuan.core.dbutil;
import com.hongyuan.talk.cfg.sql;
clase pública TalkBean {
/**
* Extraer información del usuario
* @param nombre de usuario
* @Param Password
* @devolver
*/
MAP Public <String, Object> GetUserInfo (nombre de usuario final de cadena, contraseña de cadena final) {
intentar {
Lista <map <string, object >> userInfo = dbutil.select (sql.get_userinfo, new Hashmap <String, Object> () {{{{{{{{{{{{
poner ("nombre de usuario", nombre de usuario);
poner ("contraseña", contraseña);
}});
if (userInfo! = null && userInfo.size () == 1) {
devolver userInfo.get (0);
}
} Catch (SQLException e) {
E.PrintStackTrace ();
}
regresar nulo;
}
/**
* Guardar información del usuario
* @param nombre de usuario
* @Param Password
* @devolver
*/
public boolean saveuser (nombre de usuario final de cadena, contraseña de cadena final) {
intentar {
int count = dButil.insert (sql.save_user, new Hashmap <String, Object> () {{
poner ("nombre de usuario", nombre de usuario);
poner ("contraseña", contraseña);
}});
if (count == 1) {
devolver verdadero;
}
} Catch (SQLException e) {
E.PrintStackTrace ();
}
devolver falso;
}
}
Talkservlet.java
La copia del código es la siguiente:
paquete com.hongyuan.talk;
import java.io.ioException;
import java.io.unsupportedencodingException;
import java.util.map;
import nl.justobjects.pushlet.core.dispatcher;
import nl.justobjects.pushlet.core.event;
import com.hongyuan.core.webservlet;
Public Class TalkServlet extiende WebServlet {
TalkBean PublicBean TalkBean;
@Anular
public void initPage () {
Object userInfo = request.getSession (). GetAttribute ("UserInfo");
if (userInfo! = null) {
TalkPage ();
}demás{
LoginPage ();
}
}
// Ingrese la página de inicio de sesión
public void loginPage () {
show ("Login.jsp");
}
// Ingrese la página de registro
public void regPage () {
show ("reg.jsp");
}
//Acceso
public void login () lanza ioexception {
String UserName = this.get ("UserName", "");
Cadena contraseña = this.get ("contraseña", "");
if (! "". Equals (UserName) &&! "", Equals (contraseña)) {
// extraer información del usuario
MAP <String, Object> UserInfo = talkBean.getUserInfo (nombre de usuario, contraseña);
if (userInfo! = null) {
// Guardar información del usuario en la sesión
request.getSession (). SetAttribute ("UserInfo", UserInfo);
respuesta.sendedirect ("./ talkService.srv? Action = TalkPage");
devolver;
}
}
show ("Login.jsp");
}
//registro
public void reg () lanza ioexception {
String UserName = this.get ("UserName", "");
Cadena contraseña = this.get ("contraseña", "");
Cadena passconfirm = this.get ("passconfirm", "");
if (! "",. Equals (UserName) &&! "", Equals (Password) && Password.equals (PassConfirm)) {
if (talkbean.saveUser (nombre de usuario, contraseña)) {
respuesta.sendedirect ("./ talkService.srv? Action = LoginPage");
devolver;
}
}
show ("reg.jsp");
}
// Ingrese la página de chat
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");
devolver;
}
show ("Login.jsp");
}
// Enviar un mensaje
public void sendmsg () lanza no comportedEncodingException {
Cadena msg = this.get ("mensaje", "");
if (! "". igual (msg)) {
Evento 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", nueva cadena (info.get ("user_name"). toString (). getBytes ("UTF-8"), "ISO-8859-1");
}
Event.setfield ("Mensaje", nueva cadena (msg.getBytes ("UTF-8"), "ISO-8859-1"));
Despachador.getInStance (). Multicast (evento);
}
}
}
Nota: El siguiente solo contiene el código principal.
Lo anterior se trata de este artículo, espero que les guste.