이 코드에는 다음 기능이 포함되어있는 간단한 대화방입니다
1. 사용자 등록.
2. 사용자 로그인.
3. 물론 채팅을 할 수도 있습니다.
dbutil.java
코드 사본은 다음과 같습니다.
패키지 com.hongyuan.core;
java.sql.connection 가져 오기;
Java.sql.preparedStatement import;
java.sql.resultset import;
java.sql.sqlexception 가져 오기;
java.sql.statement import;
java.sql.types import;
java.util.arraylist 가져 오기;
java.util.hashmap import;
Java.util.list 가져 오기;
java.util.map import;
import java.util.regex.matcher;
java.util.regex.pattern import;
javax.sql.datasource import;
import com.mysql.jdbc.jdbc2.optional.mysqldatasource;
공개 클래스 dbutil {
개인 정적 데이터 소스 데이터 소스 = null;
공전{
/**
* 데이터 소스를 초기화하면 다른 데이터베이스마다 데이터 소스를 얻는 방법이 다릅니다.
*/
mysqldatasource mds = 새로운 mysqldatasource ();
mds.seturl ( "jdbc : mysql : // localhost : 3306/test");
MDS.SetUser ( "테스트");
mds.setpassword ( "123456");
mds.setcharacterencoding ( "utf8");
DataSource = MDS;
}
/**
* 데이터베이스 연결을 가져옵니다
* @반품
* @throws sqlexception
*/
public static connection getConnection ()는 sqlexception {
return dataSource.getConnection ();
}
/**
* 데이터베이스 연결 리소스를 닫습니다
* @param conn
* @param s
* @Param Rs
* @throws sqlexception
*/
public static void close (Connection Conn, Statement 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 쿼리 SQL, 익명 매개 변수를 사용하십니까? 이름이 지정된 매개 변수가 ": 매개 변수 이름"으로 표시됨을 나타냅니다.
* @param 매개 변수 쿼리 매개 변수
* @반품
* @throws sqlexception
*/
@suppresswarnings ( "확인되지 않은")
공개 정적 목록 <map <string, object >> select (Object SQL, Object ... Params)는 sqlexception {
객체 결과 = dbutil.executesql (sql, params);
if (result == null) {
널 리턴;
}또 다른{
return (list <map <string, object >>) 결과;
}
}
/**
* 삽입을 수행하십시오
* @param sql
* @param 매개 변수
* @반품
* @throws sqlexception
*/
public static int insert (객체 SQL, Object ... Params)는 sqlexception {
return dbutil.update (sql, params);
}
/**
* 데이터베이스 레코드 변경 문 (추가, 삭제, 수정) 실행
* @Param SQL 쿼리 SQL, 익명 매개 변수를 사용하십니까? 이름이 지정된 매개 변수가 ": 매개 변수 이름"으로 표시됨을 나타냅니다.
* @param 매개 변수 쿼리 매개 변수
* @반품
* @throws sqlexception
*/
public static int update (Object SQL, Object ... Params)는 sqlexception {
객체 결과 = dbutil.executesql (sql, params);
if (result == null) {
반환 0;
}또 다른{
리턴 (정수) 결과;
}
}
/**
* 삭제를 수행하십시오
* @param sql
* @param 매개 변수
* @반품
* @throws sqlexception
*/
public static int delete (Object SQL, Object ... Params)는 sqlexception {
return dbutil.update (sql, params);
}
/**
* 일반 SQL 실행 방법
* @Param SQL 쿼리 SQL, 익명 매개 변수를 사용하십니까? 이름이 지정된 매개 변수가 ": 매개 변수 이름"으로 표시됨을 나타냅니다.
* @param 매개 변수는 매개 변수입니다
* @반품
* @throws sqlexception
*/
public static 객체 executesQl (Object SQL, Object ... Params)는 sqlexception {
if (sql == null || "".
// SQL 문을 얻습니다
문자열 sqlstr = sql.tostring (). trim ();
// 이름 지정된 매개 변수를 처리합니다
if (params! = null & ¶ms.length == 1 & ¶ms [0] instanceof map) {
List <bood> plist = new ArrayList <Object> ();
map <string, object> pmap = (map <string, object>) params [0];
MATCHER PMATCHER = PANTERT.COMPILE ( ": (// w+)"). 매치 자 (SQLSTR);
while (pmatcher.find ()) {
문자열 pname = pmatcher.group (1);
plist.add (pmap.get (pname));
}
sqlstr = pmatcher.replaceall ( "?");
params = plist.toArray ();
}
연결 Conn = null;
준비된 상태 ps = null;
resultSet rs = null;
노력하다 {
conn = dbutil.getConnection ();
ps = conn.preparestatement (sqlstr);
if (null! = params) {
// 쿼리 매개 변수 초기화
for (int i = 0; i <params.length; i ++) {
객체 param = params [i];
if (param! = null) {
ps.setobject (i+1, param);
}또 다른{
ps.setnull (i+1, type.null);
}
}
}
// 결과 세트를 처리합니다
부울 isresultset = ps.Execute ();
List <Object> result = new ArrayList <Object> ();
하다 {
if (isresultset) {
list <map <string, object >> tabledata = new ArrayList <map <String, Object >> ();
resultSet resultSet = 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) {
return result.get (0);
} 또 다른 {
반환 결과;
}
} catch (sqlexception e) {
새 Sqlexection을 던지십시오 ( "유효하지 않은 SQL!->"+SQL);
} 마지막으로 {
dbutil.close (Conn, ps, rs);
}
}
}
WebServlet.java
코드 사본은 다음과 같습니다.
패키지 com.hongyuan.core;
import java.io.ioexception;
java.io.unsupportedencodingException 가져 오기;
java.util.enumeration 가져 오기;
java.util.hashmap import;
java.util.map import;
javax.servlet.servletconfig import;
javax.servlet.servletexception import;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
@Suppresswarnings ( "Serial")
공개 클래스 WebServlet은 httpservlet {
보호 된 httpservletrequest 요청 = null;
보호 된 httpservletResponse 응답 = null;
보호 된 맵 <문자열, 문자열> cfgparams = new Hashmap <String, String> ();
/**
* 기본 액세스 방법
* @throws 예외
*/
public void initpage ()는 예외 {} 던지기
@보수
공개 최종 void init (servletconfig config) servletexception {
@suppresswarnings ( "확인되지 않은")
열거 <문자열> 이름 = config.getInitParameterNames ();
while (names.hasmoreElements ()) {
문자열 이름 = names.nextElement ();
if (name.startSwith ( "bean _")) {
// Bean 객체를 서블릿에 주입합니다
String beanname = name.substring ( "bean _". length ());
문자열 beanclass = config.getInitParameter (이름);
노력하다 {
if (beanclass == null || "".
Object Bean = class.forname (beanclass) .newinstance ();
this.getClass (). getfield (beanname) .set (this, bean);
} catch (InstantiationException e) {
노력하다 {
새로운 InstantiationException을 던지십시오 ( "Instantiate ("+beanclass+")!");
} catch (InstantiationException e1) {
e1.printstacktrace ();
}
} catch (classNotFoundException e) {
노력하다 {
새로운 classNotFoundException을 던지십시오 ( "클래스 찾기 ->"+beanclass);
} catch (classNotFoundException e1) {
e1.printstacktrace ();
}
} catch (nosuchfieldException e) {
노력하다 {
새로운 nosuchfieldexception을 던지십시오 ( "Bean Declaration Field를 찾을 수 없습니다 ("+beanname+")");
} catch (nosuchfieldexception e1) {
e1.printstacktrace ();
}
} catch (예외 e) {
e.printstacktrace ();
}
}또 다른{
cfgparams.put (이름, config.getInitParameter (name));
}
}
}
@보수
공개 최종 무효 서비스 (httpservletrequest 요청, httpservletresponse 응답) {
this.request = 요청;
this.response = 응답;
문자열 인코딩 = null;
노력하다 {
인코딩 = cfgparams.get ( "인코딩");
if (encoding == null || "". Equals (encoding.trim ())) encoding = "utf-8";
request.setcharacterencoding (인코딩);
응답 .SetchAracterEncoding (인코딩);
} catch (UnSupportedEncodingException e2) {
노력하다 {
새로운 UnsupportedEncodingException ( "지원되지 않는 문자 세트 ("+encoding+")");
} catch (UnsupportedEncodingException e) {
e.printstacktrace ();
}
}
문자열 action = null;
노력하다 {
// 라우팅 매개 변수에 따라 요청을 지정된 메소드로 전환합니다.
String louteparam = cfgparams.get ( "Routeparam");
action = this.get ((lourteparam == null || "". equals (routeparam))? "action": loureparam, "initpage");
this.getClass (). getMethod (action) .invoke (this);
} catch (불법 행위 e) {
노력하다 {
새로운 불법 행위 예시를 던지십시오 ( "메소드 ("+action+") 액세스 거부!");
} catch (불법 행위 지출 E1) {
e1.printstacktrace ();
}
} catch (nosuchmethodexception e) {
노력하다 {
새 nosuchmethodexception을 던지십시오 ( "메소드 찾기 ("+action+")!");
} catch (nosuchmethodexception e1) {
e1.printstacktrace ();
}
} catch (예외 e) {
e.printstacktrace ();
}
}
/**
* 지정된 페이지를 표시합니다
* @param 페이지
* @throws ioexception
* @throws servletexception
*/
보호 된 공허 쇼 (문자열 페이지) {
문자열 pagepath = cfgparams.get ( "pagepath");
노력하다 {
request.getRequestDisPatcher ((((PagePath == null || "". equals (pagepath))? "/web-inf/pages/": pagepath)+page) .forward (요청, 응답);
} catch (예외 e) {
e.printstacktrace ();
}
}
/**
* 지정된 문자열을 인쇄하십시오
* @param str
* @throws ioexception
*/
보호 된 void print (string str) {
노력하다 {
Response.getWriter (). print (str);
} catch (ioexception e) {
e.printstacktrace ();
}
}
/**
* 지정된 이름으로 요청 매개 변수를 가져옵니다
* @param 이름
* @param def
* @반품
*/
보호 된 문자열 get (문자열 이름, 문자열 def) {
문자열 값 = request.getParameter (이름);
if (value! = null &&! "".
반환 값;
}또 다른{
리턴 데프;
}
}
/**
* 출력 페이지에 지정된 매개 변수가 있습니다
* @param 이름
* @param 값
*/
보호 된 void put (문자열 이름, 객체 값) {
request.setAttribute (이름, 값);
}
}
sql.java
코드 사본은 다음과 같습니다.
패키지 com.hongyuan.talk.cfg;
공개 열거 SQL {
// 사용자 정보 추출 SQL 문
get_userinfo ( "select id, user_name, user_name = : username and password = md5 (: password)"), 사용자의 비밀번호. ",
// 사용자 정보 저장 SQL 문
save_user ( "user (user_name, password) 값에 삽입 (: username, md5 (: password))");
개인 최종 문자열 값;
개인 SQL (문자열 값) {
this.value = value;
}
공개 문자열 getValue () {
이 value를 반환하십시오.
}
@보수
공개 문자열 tostring () {
이 value를 반환하십시오.
}
}
TalkBean.java
코드 사본은 다음과 같습니다.
패키지 com.hongyuan.talk;
java.sql.sqlexception 가져 오기;
java.util.hashmap import;
Java.util.list 가져 오기;
java.util.map import;
com.hongyuan.core.dbutil import;
import com.hongyuan.talk.cfg.sql;
공개 수업 TalkBean {
/**
* 사용자 정보를 추출하십시오
* @Param 사용자 이름
* @param 비밀번호
* @반품
*/
public map <string, object> getUserInfo (최종 문자열 사용자 이름, 최종 문자열 암호) {
노력하다 {
List <map <string, object >> userInfo = dbutil.select (sql.get_userinfo, new hashmap <string, object> () {{{{{
put ( "사용자 이름", 사용자 이름);
put ( "비밀번호", 비밀번호);
}});
if (userInfo! = null && userInfo.size () == 1) {
return userInfo.get (0);
}
} catch (sqlexception e) {
e.printstacktrace ();
}
널 리턴;
}
/**
* 사용자 정보를 저장합니다
* @Param 사용자 이름
* @param 비밀번호
* @반품
*/
public boolean saveuser (최종 문자열 사용자 이름, 최종 문자열 비밀번호) {
노력하다 {
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;
import java.io.ioexception;
java.io.unsupportedencodingException 가져 오기;
java.util.map import;
nl.justobjects.pushlet.core.dispatcher 가져 오기;
nl.justobjects.pushlet.core.event 가져 오기;
com.hongyuan.core.webservlet import;
공개 클래스 ackservlet가 webservlet {
공개 토크 비안;
@보수
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 {
문자열 username = this.get ( "username", "");
문자열 비밀번호 = this.get ( "password", "");
if (! "". equals (username) &&! "",. equals (password)) {
// 사용자 정보 추출
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 {
문자열 username = this.get ( "username", "");
문자열 비밀번호 = this.get ( "password", "");
String PassConfirm = this.get ( "PassConfirm", "");
if (! "",. equals (username) &&! "",.
if (talkBean.SaveUser (username, password)) {
Response.SendRedirect ( "./ TalkService.srv? Action = LoginPage");
반품;
}
}
show ( "reg.jsp");
}
// 채팅 페이지를 입력하십시오
공개 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");
반품;
}
show ( "login.jsp");
}
// 메시지를 보냅니다
public void sendmsg ()는 unsupportedencodingException을 던지는 것입니다.
문자열 msg = this.get ( "메시지", "");
if (! "". Equals (msg)) {
이벤트 이벤트 = 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 (). 멀티 캐스트 (이벤트);
}
}
}
참고 : 다음에는 기본 코드 만 포함됩니다. http://pan.baidu.com/s/1ddio085
위의 것은이 기사에 관한 모든 것입니다. 나는 당신이 그것을 좋아하기를 바랍니다.