当前位置: 移动技术网 > IT编程>开发语言>Java > 使用java基于pushlet和bootstrap实现的简单聊天室

使用java基于pushlet和bootstrap实现的简单聊天室

2019年07月22日  | 移动技术网IT编程  | 我要评论

巩汉林收春晚邀请,南方寝室官网,倾世皇妃mp4下载

这是一个简单的不能再简单的聊天室,本代码包含以下功能

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);
        }
    }
}

注:以下仅包含主要代码,完整工程代码见:

以上就是本文的全部内容了,希望大家能够喜欢。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网