Esta é uma sala de bate -papo simples que não pode ser mais simples.
1. Registro do usuário.
2. Login do usuário.
3. É claro que você também pode conversar.
Dbutil.java
A cópia do código é a seguinte:
pacote com.hongyuan.core;
importar java.sql.connection;
importar java.SQL.PreparedStatement;
importar java.sql.resultset;
importar java.sql.sqLexception;
importar java.sql.statement;
importar java.sql.types;
importar java.util.arraylist;
importar java.util.hashmap;
importar java.util.list;
importar java.util.map;
importar java.util.regex.matcher;
importar java.util.regex.pattern;
importar javax.sql.datasource;
import com.mysql.jdbc.jdbc2.optional.mysqldataSource;
classe pública dbutil {
DataSource estática privada DataSource = NULL;
estático{
/**
* Inicialize a fonte de dados.
*/
Mysqldatasource mds = new mysqldatasource ();
mds.seturl ("jdbc: mysql: // localhost: 3306/teste");
mds.setUser ("teste");
mds.setPassword ("123456");
MDS.Setcharacterencoding ("UTF8");
DataSource = MDS;
}
/**
* Obter conexão com o banco de dados
* @retornar
* @THOWS SQLEXCECTION
*/
Public Static Connection getConnection () lança sqlexception {
return dataSource.getConnection ();
}
/**
* Feche o recurso de conexão do banco de dados
* @param conn
* @param s
* @param rs
* @THOWS SQLEXCECTION
*/
Public Static Void Close (Conexão Conn, Declaração S, ResultSet RS) {
tentar {
if (rs! = null) rs.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
}
tentar {
if (s! = null) s.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
}
tentar {
if (conn! = null) conn.close ();
} catch (sqlexception e) {
E.PrintStackTrace ();
}
}
/**
* Executar instrução de consulta de banco de dados
* @param sql Query SQL, use parâmetros anônimos? Indica que os parâmetros nomeados são representados por ": nome do parâmetro"
* @param params parâmetros de consulta
* @retornar
* @THOWS SQLEXCECTION
*/
@Suppresswarnings ("sem controle")
Lista estática pública <map <string, objeto >> selecione (objeto sql, objeto ... params) lança sqlexception {
Resultado do objeto = dbutil.executesql (sql, params);
if (resultado == null) {
retornar nulo;
}outro{
return (list <map <string, objeto >>) resultado;
}
}
/**
* Executar inserção
* @param sql
* @param params
* @retornar
* @THOWS SQLEXCECTION
*/
public static int insert (objeto sql, objeto ... params) lança sqlexception {
return dbutil.update (sql, params);
}
/**
* Executar declarações de alteração de registro do banco de dados (Adicionar, excluir, modificar)
* @param sql Query SQL, use parâmetros anônimos? Indica que os parâmetros nomeados são representados por ": nome do parâmetro"
* @param params parâmetros de consulta
* @retornar
* @THOWS SQLEXCECTION
*/
public static int update (objeto sql, objeto ... params) lança sqlexception {
Resultado do objeto = dbutil.executesql (sql, params);
if (resultado == null) {
retornar 0;
}outro{
resultado (número inteiro);
}
}
/**
* Execute a exclusão
* @param sql
* @param params
* @retornar
* @THOWS SQLEXCECTION
*/
public static int excluir (objeto sql, objeto ... params) lança sqlexception {
return dbutil.update (sql, params);
}
/**
* Método geral de execução SQL
* @param sql Query SQL, use parâmetros anônimos? Indica que os parâmetros nomeados são representados por ": nome do parâmetro"
* @param params nomeados parâmetros
* @retornar
* @THOWS SQLEXCECTION
*/
Objeto estático público Executesql (objeto sql, objeto ... params) lança sqlexception {
if (sql == null || "". igual a (sql.toString (). TRIM ())) lançar uma nova sqLexception ("instrução sql está vazia!");
// Obtenha a instrução SQL
String sqlstr = sql.toString (). TRIM ();
// Processando parâmetros nomeados
if (params! = null & ¶ms.length == 1 & ¶ms [0] instanceof map) {
List <ject> plist = new ArrayList <ject> ();
Mapa <string, objeto> 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 ();
}
Conexão conn = null;
Preparado estatement ps = null;
ResultSet rs = null;
tentar {
Conn = dbutil.getConnection ();
ps = Conn.Preparestatement (SQLSTR);
if (null! = params) {
// Inicialize os parâmetros de consulta
for (int i = 0; i <params.length; i ++) {
Objeto param = params [i];
if (param! = null) {
ps.setObject (i+1, param);
}outro{
ps.SetNull (i+1, tipos.null);
}
}
}
// Processando o conjunto de resultados
boolean isResultSet = ps.execute ();
List <ject> resultado = new ArrayList <ject> ();
fazer {
if (isResultset) {
List <map <string, objeto >> TABLEATA = new ArrayList <map <string, objeto >> ();
ResultSet ResultSet = ps.getResultSet ();
while (ResultSet.Next ()) {
Mapa <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));
}
tobledata.add (RowData);
}
resultado.add (TABLEATA);
} outro {
resultado.add (novo número inteiro (PS.GetUpDateCount ()));
}
} while ((isResultSet = ps.getMoreResults ()) == true || ps.getUpDateCount ()! = -1);
// Resultado de retorno de processamento
if (result.size () == 0) {
retornar nulo;
} else if (result.size () == 1) {
RESULTO DE RETORNO (0);
} outro {
resultado de retorno;
}
} catch (sqlexception e) {
lançar uma nova sqlexception ("SQL inválido!->"+sql);
} finalmente {
Dbutil.Close (Conn, PS, RS);
}
}
}
WebServlet.java
A cópia do código é a seguinte:
pacote com.hongyuan.core;
importar java.io.ioException;
importar java.io.unsupportEnCodingException;
importar java.util.enumeration;
importar java.util.hashmap;
importar java.util.map;
importar javax.servlet.servletConfig;
importar javax.servlet.servletexception;
importar javax.servlet.http.httpServlet;
importar javax.servlet.http.httpServletRequest;
importar javax.servlet.http.httpServletResponse;
@Suppresswarnings ("serial")
classe pública WebServlet estende HttpServlet {
httpServletRequest protegido solicitação = null;
Resposta protegida httpServletResponse = null;
mapa protegido <string, string> cfgparams = new hashmap <string, string> ();
/**
* Método de acesso padrão
* @Throws Exception
*/
public void initpage () lança Exceção {}
@Override
Public Final Void Init (ServletConfig Config) lança servletexception {
@Suppresswarnings ("sem controle")
Enumeração <string> names = config.getInitParameterNames ();
while (names.hasMoreElements ()) {
Nome da string = names.NextElement ();
if (name.startswith ("bean _")) {
// injetar objeto de feijão para servlet
String beanname = name.substring ("bean _". Length ());
String beansClass = config.getInitParameter (nome);
tentar {
if (beansClass == null || "". Iguals (beanclass.trim ())) lançar uma nova exceção ("nome da classe não configurado! ->"+beanname);
Objeto bean = classe.ForName (beansClass) .NewInstance ();
this.getclass (). getfield (beanname) .set (este, bean);
} Catch (InstantionException e) {
tentar {
lançar uma nova instanciação ("não pode instanciar ("+beansclass+")!");
} Catch (InstantionException E1) {
e1.printStackTrace ();
}
} catch (classNotfoundException e) {
tentar {
lançar a nova classeNotFoundException ("classe não encontrada ->"+beansclass);
} catch (classeNotFoundException E1) {
e1.printStackTrace ();
}
} catch (nosuchfieldException e) {
tentar {
lançar novas NosuchfieldException ("Campo de declaração de feijão não encontrado ("+beanname+")");
} catch (nosuchfieldException e1) {
e1.printStackTrace ();
}
} catch (Exceção e) {
E.PrintStackTrace ();
}
}outro{
cfgParams.put (nome, config.getInitParameter (nome));
}
}
}
@Override
Public Final Void Service (solicitação httpServletRequest, httpServletResponse Response) {
this.request = solicitação;
this.Response = resposta;
String codinging = null;
tentar {
coding = cfgparams.get ("codificação");
if (codinging == null || "". igual (coding.trim ())) coding = "utf-8";
request.SetcharAcTerEncoding (codificação);
Response.Setcharacterencoding (codificação);
} Catch (UnsupportEdEncodingException E2) {
tentar {
lançar novo UnsupportEdEncodingException ("Conjunto de caracteres não suportados ("+codificação+")");
} Catch (UnsupportEdEncodingException e) {
E.PrintStackTrace ();
}
}
Ação de string = null;
tentar {
// gira a solicitação ao método especificado de acordo com os parâmetros de roteamento
String routeParam = cfgparams.get ("routeparam");
ação = this.get ((routeParam == null || "". Equals (routeparam))? "Ação": routeparam, "initpage");
this.getclass (). getMethod (ação) .invoke (this);
} Catch (ilegalAccessException e) {
tentar {
lançar novo IllegalAccessException ("Método ("+Action+") Acesso negado!");
} Catch (ilegalAccessException E1) {
e1.printStackTrace ();
}
} catch (noschmethodException e) {
tentar {
lançar novos noschmethodException ("Método não encontrado ("+ação+")!");
} catch (noschmethodException e1) {
e1.printStackTrace ();
}
} catch (Exceção e) {
E.PrintStackTrace ();
}
}
/**
* Exibir a página especificada
* Página @param
* @THOWSows IoException
* @Throws Servletexception
*/
Void Protected Show (página da string) {
String pagePath = cfgparams.get ("PagePath");
tentar {
request.getRequestDispatcher (((PagePath == NULL || "". Equals (PagePath))? "/Web-Inf/Pages/": PagePath)+página) .forward (solicitação, resposta);
} catch (Exceção e) {
E.PrintStackTrace ();
}
}
/**
* Imprima a string especificada
* @param str
* @THOWSows IoException
*/
impressão vazia protegida (string str) {
tentar {
resposta.getWriter (). print (str);
} catch (ioexception e) {
E.PrintStackTrace ();
}
}
/**
* Obtenha o parâmetro de solicitação com o nome especificado
* Nome @param
* @param def
* @retornar
*/
String protegida get (nome da string, string def) {
String value = request.getParameter (nome);
if (value! = null &&! "". Equals (value.trim ())) {
valor de retorno;
}outro{
retornar def;
}
}
/**
* Saída de parâmetros especificados para a página
* Nome @param
* @param valor
*/
Void protegido put (nome da string, valor do objeto) {
request.setAtattribute (nome, valor);
}
}
Sql.java
A cópia do código é a seguinte:
pacote com.hongyuan.talk.cfg;
public Enum SQL {
// Extrair informações de informações do usuário SQL
Get_userinfo ("Selecione ID, user_name, senha do usuário onde user_name =: nome de usuário e senha = md5 (: senha)"),
// Salvar informações do usuário SQL Declaração
Save_User ("Insira no usuário (user_name, senha) valores (: nome de usuário, md5 (: senha))");
Valor final de string privado;
SQL privado (valor da string) {
this.value = value;
}
public String getValue () {
retornar este.value;
}
@Override
public string tostring () {
retornar este.value;
}
}
Talkbean.java
A cópia do código é a seguinte:
pacote com.hongyuan.talk;
importar java.sql.sqLexception;
importar java.util.hashmap;
importar java.util.list;
importar java.util.map;
importação com.hongyuan.core.dbutil;
importação com.hongyuan.talk.cfg.sql;
classe pública Talkbean {
/**
* Extrair informações do usuário
* Nome de usuário @param
* @param senha
* @retornar
*/
mapa público <string, objeto> getUserinfo (nome de usuário final, senha final da string) {
tentar {
List <map <string, objeto >> userinfo = dbutil.select (sql.get_userinfo, new hashmap <string, object> () {{
put ("nome de usuário", nome de usuário);
put ("senha", senha);
}});
if (userInfo! = null && userInfo.size () == 1) {
return userInfo.get (0);
}
} catch (sqlexception e) {
E.PrintStackTrace ();
}
retornar nulo;
}
/**
* Salvar informações do usuário
* Nome de usuário @param
* @param senha
* @retornar
*/
public boolean saveuser (nome de string final, senha final da string) {
tentar {
int conting = dbutil.insert (sql.save_user, new hashmap <string, object> () {{
put ("nome de usuário", nome de usuário);
put ("senha", senha);
}});
if (count == 1) {
retornar true;
}
} catch (sqlexception e) {
E.PrintStackTrace ();
}
retornar falso;
}
}
TalkServlet.java
A cópia do código é a seguinte:
pacote com.hongyuan.talk;
importar java.io.ioException;
importar java.io.unsupportEnCodingException;
importar java.util.map;
importar nl.justObjects.pushlet.core.dispatcher;
importar nl.justObjects.pushlet.core.event;
importação com.hongyuan.core.webServlet;
classe pública TalkServlet estende WebServlet {
public Talkbean Talkbean;
@Override
public void initpage () {
Objeto userInfo = request.getSession (). GetAttribute ("userInfo");
if (userInfo! = null) {
talkpage ();
}outro{
loginpage ();
}
}
// Digite a página de login
public void loginpage () {
show ("login.jsp");
}
// Digite a página de registro
public void regpage () {
show ("reg.jsp");
}
//Conecte-se
public void Login () lança ioexception {
String userName = this.get ("nome de usuário", "");
String senha = this.get ("senha", "");
if (! "". Equals (nome de usuário) &&! "" ,. Equals (senha)) {
// extraia informações do usuário
Mapa <string, objeto> userInfo = talkbean.getUserinfo (nome de usuário, senha);
if (userInfo! = null) {
// Salve as informações do usuário na sessão
request.getSession (). setAttribute ("userInfo", userInfo);
Response.SendRedirect ("./ TalkService.srv? Ação = TalkPage");
retornar;
}
}
show ("login.jsp");
}
// Registre -se
public void reg () lança ioexception {
String userName = this.get ("nome de usuário", "");
String senha = this.get ("senha", "");
String passConfirm = this.get ("passConfirm", "");
if (! "" ,. Equals (nome de usuário) &&! "", Equals (senha) && senha.equals (passConfirm)) {
if (talkbean.saveuser (nome de usuário, senha)) {
Response.SendRedirect ("./ TalkService.srv? Ação = LoginPage");
retornar;
}
}
show ("reg.jsp");
}
// Digite a página de bate -papo
public void Talkpage () {
Objeto userInfo = request.getSession (). GetAttribute ("userInfo");
if (userInfo! = null) {
Mapa <string, objeto> info = (map <string, object>) userInfo;
this.put ("nome de usuário", info.get ("user_name"));
show ("talk.jsp");
retornar;
}
show ("login.jsp");
}
// Envie uma mensagem
public void sendmsg () lança UnsupportEdEncodingException {
String msg = this.get ("mensagem", "");
if (! "". Equals (msg)) {
Event Event = Event.CreateTataEvent ("Message/World");
Objeto userInfo = request.getSession (). GetAttribute ("userInfo");
if (userInfo! = null) {
Mapa <string, objeto> info = (map <string, object>) userInfo;
event.setfield ("nome de usuário", new string (info.get ("user_name"). tostring (). getBytes ("utf-8"), "iso-8859-1"));
}
event.setfield ("mensagem", new String (msg.getbytes ("UTF-8"), "ISO-8859-1"));
Dispatcher.getInstance (). Multicast (evento);
}
}
}
Nota: O seguinte contém o código principal
O exposto acima é tudo sobre este artigo, espero que gostem.