亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

使用java基于pushlet和bootstrap實現的簡單聊天室

2019-11-26 15:15:45
字體:
來源:轉載
供稿:網友

這是一個簡單的不能再簡單的聊天室,本代碼包含以下功能

1.用戶注冊。
2.用戶登錄。
3.當然還可以聊天。

DBUtil.java

復制代碼 代碼如下:

package 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;
 
public class DBUtil {
    
    private static DataSource dataSource = null;
    static{
        /**
         * 初始化數據源,不同的數據庫獲取數據源的方式不同,可參考相應數據庫的說明文檔。
         */
        MysqlDataSource mds=new MysqlDataSource();
        mds.setURL("jdbc:mysql://localhost:3306/test");
        mds.setUser("test");
        mds.setPassword("123456");
        mds.setCharacterEncoding("utf8");
        dataSource=mds;
    }
    
    /**
     * 獲取數據庫連接
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
 
    /**
     * 關閉數據庫連接資源
     * @param conn 
     * @param s
     * @param rs
     * @throws SQLException
     */
    public static void close(Connection conn, Statement s, ResultSet rs){
        try {
            if (rs != null) rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (s != null) s.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 執行數據庫查詢語句
     * @param sql       查詢sql,匿名參數用?表示,命名參數使用“:參數名”表示
     * @param params    查詢參數
     * @return
     * @throws SQLException
     */
    @SuppressWarnings("unchecked")
    public static List<Map<String,Object>> select(Object sql,Object... params) throws SQLException{
        Object result=DBUtil.executeSql(sql,params);
        if(result==null){
            return null;
        }else{
            return (List<Map<String,Object>>)result;
        }
    }
    
    /**
     * 執行插入
     * @param sql
     * @param params
     * @return
     * @throws SQLException
     */
    public static int insert(Object sql,Object... params) throws SQLException{
        return DBUtil.update(sql, params);
    }
    
    /**
     * 執行數據庫記錄變更語句(增,刪,改)
     * @param sql       查詢sql,匿名參數用?表示,命名參數使用“:參數名”表示
     * @param params    查詢參數
     * @return
     * @throws SQLException
     */
    public static int update(Object sql,Object... params) throws SQLException{
        Object result=DBUtil.executeSql(sql,params);
        if(result==null){
            return 0;
        }else{
            return (Integer)result;
        }
    }
    
    /**
     * 執行刪除
     * @param sql
     * @param params
     * @return
     * @throws SQLException
     */
    public static int delete(Object sql,Object... params) throws SQLException{
        return DBUtil.update(sql, params);
    }
    
    /**
     * 通用Sql執行方法
     * @param sql       查詢sql,匿名參數用?表示,命名參數使用“:參數名”表示
     * @param params    命名參數
     * @return
     * @throws SQLException
     */
    public static Object executeSql(Object sql, Object... params) throws SQLException {
 
        if(sql==null||"".equals(sql.toString().trim())) throw new SQLException("sql語句為空!");
        
        //獲取sql語句
        String sqlStr=sql.toString().trim();
        
        //處理命名參數
        if(params!=null&¶ms.length==1&¶ms[0] instanceof Map){
            List<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();
        }
        
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sqlStr);
             
            if (null != params) {
                //初始化查詢參數
                for(int i=0;i<params.length;i++){
                    Object param = params[i];
                    if(param!=null){
                        ps.setObject(i+1,param);
                    }else{
                        ps.setNull(i+1,Types.NULL);
                    }
                    
                }
            }
            
            //處理結果集
            boolean isResultSet = ps.execute();
            List<Object> result = new ArrayList<Object>();
            do {
                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);
                } else {
                    result.add(new Integer(ps.getUpdateCount()));
                }
            } while ((isResultSet = ps.getMoreResults()) == true || ps.getUpdateCount() != -1);
 
            //處理返回結果
            if (result.size() == 0) {
                return null;
            } else if (result.size() == 1) {
                return result.get(0);
            } else {
                return result;
            }
        } catch (SQLException e) {
            throw new SQLException("無效sql!-->"+sql);
        } finally {
            DBUtil.close(conn, ps, rs);
        }
    }
}

WebServlet.java

復制代碼 代碼如下:

package com.hongyuan.core;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
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;
 
@SuppressWarnings("serial")
public class WebServlet extends HttpServlet {
 
    protected HttpServletRequest request=null;
    protected HttpServletResponse response=null;
    protected Map<String,String> cfgParams=new HashMap<String,String>();
    
    /**
     * 默認訪問方法
     * @throws Exception
     */
    public void initPage() throws Exception{}
    
    @Override
    public final void init(ServletConfig config) throws ServletException {
        @SuppressWarnings("unchecked")
        Enumeration<String> names = config.getInitParameterNames();
        while(names.hasMoreElements()){
            String name=names.nextElement();
            if(name.startsWith("Bean_")){
                //為servlet注入Bean對象
                String beanName=name.substring("Bean_".length());
                String beanClass=config.getInitParameter(name);
                
                    try {
                        if(beanClass==null||"".equals(beanClass.trim())) throw new Exception("未配置類名!-->"+beanName);
                        
                        Object bean = Class.forName(beanClass).newInstance();
                        this.getClass().getField(beanName).set(this,bean);
                    } catch (InstantiationException e) {
                        try {
                            throw new InstantiationException("無法實例化("+beanClass+")!");
                        } catch (InstantiationException e1) {
                            e1.printStackTrace();
                        }
                    } catch (ClassNotFoundException e) {
                        try {
                            throw new ClassNotFoundException("未找到類-->"+beanClass);
                        } catch (ClassNotFoundException e1) {
                            e1.printStackTrace();
                        }
                    } catch (NoSuchFieldException e) {
                        try {
                            throw new NoSuchFieldException("未找到Bean聲明字段("+beanName+")");
                        } catch (NoSuchFieldException e1) {
                            e1.printStackTrace();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                
            }else{
                cfgParams.put(name,config.getInitParameter(name));
            }
        }
    }
    
    @Override
    public final void service(HttpServletRequest request, HttpServletResponse response){
        
        this.request=request;
        this.response=response;
        
        String encoding=null;
        try {
            encoding=cfgParams.get("encoding");
            if(encoding==null||"".equals(encoding.trim())) encoding="utf-8";
            request.setCharacterEncoding(encoding);
            response.setCharacterEncoding(encoding);
        } catch (UnsupportedEncodingException e2) {
            try {
                throw new UnsupportedEncodingException("不支持的字符集("+encoding+")");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        
        String action=null;
        try {
            //根據路由參數將請求轉交到指定方法執行
            String routeParam=cfgParams.get("routeParam");
            action=this.get((routeParam==null||"".equals(routeParam))?"action":routeParam,"initPage");
            this.getClass().getMethod(action).invoke(this);
        } catch (IllegalAccessException e) {
            try {
                throw new IllegalAccessException("方法("+action+")拒絕訪問!");
            } catch (IllegalAccessException e1) {
                e1.printStackTrace();
            }
        } catch (NoSuchMethodException e) {
            try {
                throw new NoSuchMethodException("未找到方法("+action+")!");
            } catch (NoSuchMethodException e1) {
                e1.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 展示指定頁面
     * @param page
     * @throws IOException
     * @throws ServletException
     */
    protected void show(String page){
        String pagePath=cfgParams.get("pagePath");
        try {
            request.getRequestDispatcher(((pagePath==null||"".equals(pagePath))?"/WEB-INF/pages/":pagePath)+page).forward(request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 打印指定字符串
     * @param str
     * @throws IOException
     */
    protected void print(String str){
        try {
            response.getWriter().print(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 獲取指定名稱的請求參數
     * @param name
     * @param def
     * @return
     */
    protected String get(String name,String def){
        String value=request.getParameter(name);
        if(value!=null&&!"".equals(value.trim())){
            return value;
        }else{
            return def;
        }
    }
    
    /**
     * 向頁面輸出指定參數
     * @param name
     * @param value
     */
    protected void put(String name,Object value){
        request.setAttribute(name,value);
    }
    
}

Sql.java

復制代碼 代碼如下:

package com.hongyuan.talk.cfg;
 
public enum Sql {
    //提取用戶信息SQL語句
    GET_USERINFO("select id,user_name,password from user where user_name=:userName and password=md5(:password)"),
    
    //保存用戶信息SQL語句
    SAVE_USER("insert into user(user_name,password) values(:userName,md5(:password))");
    
    private final String value;
    private Sql(String value){
        this.value=value;
    }
    
    public String getValue(){
        return this.value;
    }
    
    @Override
    public String toString() {
        return this.value;
    }
}

TalkBean.java

復制代碼 代碼如下:

package 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;
 
public class TalkBean{
 
    /**
     * 提取用戶信息
     * @param userName
     * @param password
     * @return
     */
    public Map<String,Object> getUserInfo(final String userName,final String password) {
 
        try {
            List<Map<String,Object>> userInfo=DBUtil.select(Sql.GET_USERINFO,new HashMap<String,Object>(){{
                put("userName",userName);
                put("password",password);
            }});
            if(userInfo!=null&&userInfo.size()==1){
                return userInfo.get(0);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    /**
     * 保存用戶信息
     * @param userName
     * @param password
     * @return
     */
    public boolean saveUser(final String userName,final String password){
        try {
            int count=DBUtil.insert(Sql.SAVE_USER,new HashMap<String,Object>(){{
                put("userName",userName);
                put("password",password);
            }});
            if(count==1){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
}

TalkServlet.java

復制代碼 代碼如下:

package 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 extends WebServlet {
 
    public TalkBean talkBean;
            
    @Override
    public void initPage(){
        Object userInfo = request.getSession().getAttribute("userInfo");
        if(userInfo!=null){
            talkPage();
        }else{
            loginPage();
        }
    }
    
    //進入登陸頁面
    public void loginPage(){
        show("login.jsp");
    }
    
    //進入注冊頁面
    public void regPage(){
        show("reg.jsp");
    }
    
    //登錄
    public void login() throws IOException{
        String userName=this.get("userName","");
        String password=this.get("password","");
        if(!"".equals(userName)&&!"".equals(password)){
            //提取用戶信息
            Map<String,Object> userInfo=talkBean.getUserInfo(userName, password);
            if(userInfo!=null){
                //將用戶信息存入session
                request.getSession().setAttribute("userInfo",userInfo);
                response.sendRedirect("./talkService.srv?action=talkPage");
                return;
            }
        }
        show("login.jsp");
    }
    
    //注冊
    public void reg() throws IOException{
        String userName=this.get("userName","");
        String password=this.get("password","");
        String passConfirm=this.get("passConfirm","");
        if(!"".equals(userName)&&!"".equals(password)&&password.equals(passConfirm)){
            if(talkBean.saveUser(userName, password)){
                response.sendRedirect("./talkService.srv?action=loginPage");
                return;
            }
        }
        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("userName",info.get("user_name"));
            show("talk.jsp");
            return;
        }
        show("login.jsp");
    }
    
    //發送消息
    public void sendMsg() throws 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("message",new String(msg.getBytes("utf-8"),"iso-8859-1"));
            
            Dispatcher.getInstance().multicast(event);
        }
    }
}

注:以下僅包含主要代碼,完整工程代碼見:http://pan.baidu.com/s/1dDIo085

以上就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxx大片| 亚洲国产婷婷香蕉久久久久久| 精品久久久香蕉免费精品视频| 国产精品国模在线| 欧美片一区二区三区| 亚洲欧美另类自拍| 日韩av免费在线观看| 奇米四色中文综合久久| 国产丝袜精品第一页| 亚洲欧美在线一区二区| 日韩小视频在线| 一区二区三区精品99久久| 亚洲欧美日韩精品久久奇米色影视| 欧美性猛交xxxx| 国产日韩在线亚洲字幕中文| 久久99精品久久久久久噜噜| 国产精品伦子伦免费视频| 日韩激情视频在线播放| 国产精品扒开腿做爽爽爽男男| 精品视频久久久久久久| 欧美最猛性xxxx| 日韩精品在线视频美女| 青青青国产精品一区二区| 久久91亚洲精品中文字幕| 国产午夜精品免费一区二区三区| 国产精品影院在线观看| 国产精品永久免费在线| 国产成人免费91av在线| 亚洲аv电影天堂网| 亚洲精品av在线播放| 日韩免费观看在线观看| 日韩美女毛茸茸| 亚洲最新av在线| 亚洲激情自拍图| 欧美精品激情在线观看| 插插插亚洲综合网| 亚洲午夜色婷婷在线| 色噜噜国产精品视频一区二区| 国内揄拍国内精品| 欧美一级片免费在线| 国产97在线|日韩| 亚洲少妇中文在线| 欧美中文字幕在线观看| 国产精品6699| 欧美高清第一页| 亚洲女人被黑人巨大进入al| 91久久嫩草影院一区二区| 亚洲成人精品av| 在线精品国产成人综合| 亚洲国产欧美一区二区三区同亚洲| 亚洲久久久久久久久久久| 色综合色综合网色综合| 欧美激情视频一区二区三区不卡| 亚洲欧美日韩一区二区三区在线| 色七七影院综合| 国产一区私人高清影院| 欧美日韩国产中文精品字幕自在自线| 国产精品久久久久久久9999| 精品日本美女福利在线观看| 亚洲国产91色在线| 深夜成人在线观看| 亚洲精品一区久久久久久| 国产一区二区三区18| 日韩电影中文字幕| 国产精品久久久久久久久免费| 最新国产精品亚洲| 亚洲美女久久久| 成人黄色影片在线| 成人黄色av网| 国产精品久久久久久久av大片| 欧美亚洲国产成人精品| 狠狠综合久久av一区二区小说| 在线a欧美视频| 国产精品国模在线| 亚洲人成电影网| 欧美日韩性视频在线| 国产成人小视频在线观看| 精品二区三区线观看| 18性欧美xxxⅹ性满足| 国产欧美一区二区三区在线看| 97精品欧美一区二区三区| 亚洲第一页自拍| 正在播放亚洲1区| 久久免费少妇高潮久久精品99| 日本高清视频一区| 亚洲国产精彩中文乱码av| 91经典在线视频| 国产精品高潮视频| 国产精品激情av电影在线观看| 久久亚洲精品一区二区| 欧美性猛交xxxx偷拍洗澡| 亚洲欧美成人在线| 亚洲自拍小视频| 97国产真实伦对白精彩视频8| 久久全国免费视频| 欧美电影免费观看网站| 亚洲情综合五月天| 日韩中文字幕亚洲| xxxx性欧美| 久久久久久久久久国产精品| 亚洲人午夜色婷婷| 国产精品旅馆在线| 日韩有码视频在线| 亚洲视频日韩精品| 久久99精品视频一区97| 成人中文字幕+乱码+中文字幕| 色偷偷av一区二区三区| 国产成人精品av在线| 国产精品一区二区三区在线播放| 欧美激情一二三| 欧美日韩免费区域视频在线观看| 日本久久亚洲电影| 国产成人精品久久二区二区91| 亚洲国产精品美女| 久久久久久国产精品三级玉女聊斋| 欧美日韩成人黄色| 国产亚洲精品一区二区| 久久九九国产精品怡红院| 日韩电影中文字幕在线观看| 欧美放荡办公室videos4k| 在线电影欧美日韩一区二区私密| 亚洲第一网中文字幕| 久久久亚洲国产天美传媒修理工| 69av视频在线播放| 欧美午夜xxx| 亚洲国产精品久久精品怡红院| 久久99国产精品自在自在app| 日韩一中文字幕| 国产精品成人一区| 国产精品a久久久久久| 中文字幕亚洲欧美在线| 自拍偷拍亚洲在线| 亚洲成人教育av| 国产精彩精品视频| 亚洲欧美国产精品| 成人精品网站在线观看| 国产成人欧美在线观看| 亚洲精品视频中文字幕| 国产精品美女无圣光视频| 亚洲石原莉奈一区二区在线观看| 日韩国产中文字幕| 亚洲天堂免费在线| 成人免费午夜电影| 欧美色图在线视频| 国产成人精品午夜| 久久精品美女视频网站| 最新91在线视频| 亚洲第一区在线| 91久久久在线| 国产精品久久久av久久久| 91精品视频网站| 91精品国产九九九久久久亚洲| 亚洲欧美激情在线视频| 777午夜精品福利在线观看| 国产精品爽爽ⅴa在线观看| 精品国产欧美一区二区五十路| 91久久综合亚洲鲁鲁五月天| 精品少妇一区二区30p| 日韩av不卡在线| 亚洲男人天堂视频| 91青草视频久久| 日韩av在线免费观看| 欧美国产视频日韩| 久久久久久久久亚洲|