项目:chatroom_websocket、网页聊天室
title: chatroom_websocket
date: 2019-07-27 10:51:22
tags: [project,java]
项目讲解,基于websocket实现的聊天室
业务
开发从dao层开始写
dao:数据库CURD
- 获取数据源
- 获取连接
- sql语句
- 关闭
- 各个数据操作只是sql语句不同,1,2,4为公共操作封装在父类BaseDao中
- 数据库操作在子类AccountDao中实现
service:处理业务
调用dao层
- 登录验证
- 注册验证
controller:
- 调用service获取数据返回给客户端
- 从客户端获得数据调用业务处理
JDBC(Java程序连接数据库标准)
JDBC:Java操作数据库的接口(OS)
所有数据库厂商必须实现此接口
Java DataBase Connector
JDBC操作格式
数据源
类似线程池,创建好已连接的数据库直接拿来使用
- c3p0
- druid(阿里数据源)
- Hakari
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/chatroom_websocket?charset=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC username=root password=root filters=stat initialSize=5//初始化数量 maxActive=30//最大数量 maxWait=60000//创建后等待时间 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false poolPreparedStatements=false
线程池优点
- **提高响应速度 :**因为当线程池中的线程没有超过线程池的最大上限时,有的线程处于等待分配任务状态,当任务到来时,无需创建线程就能被执行。
- **提高资源利用率:**线程池可以重复利用已经创建了的线程
- **方便线程管理:**线程池会根据当前系统特点对池内的线程进行优化处理,减少创建和销毁线程带来的系统开销
1.加载驱动或加载数据源
Class.forName(“com.mysql.jdbc.Driver”);2.获取连接 Connection
- **url:**jdbc:mysql://localhost:3306/db_name
- username
- password
3.使用连接执行SQL CURD
- 执行sql Statement
- 获取查询返回值 ResultSet
select : statement.executeQuery(sql) : ResultSet insert,delete,update statement.executeUpdate(sql) : int
4.关闭资源
- Connection
- Statement
- ResultSet
配置文件方式
- 将数据库的配置信息存放到配置文件(*.properties)
- 将信息从配置文件读到程序中
Junit单元测试 : 白盒测试
- 创建测试类
- 创建测试文件夹,test与main同目录,将test文件夹标记为测试文件夹
- 要测试的类选中,ctrl+shift+T 创建测试类
- 使用断言Assert
SQL注入漏洞
Statement
语句通过字符串拼接,黑客只需改变参数的值即可改变sql语句的正确性
userName为正确值password拼接为 or 1 = 1成为一个永真式就可以获得这个用户的连接
connection = getConnection(); String sql = "select * from user where username = ' " + username + " ' and" + "password = '" + password "'"; statement = connection.createStatement(); resultSet = statement.executeQuery(sql);
通过PreparedStatement用通配符替换字符串拼接可以检查语法错误
connection = getConnection(); String sql = "select * from user where username = ? and" + "password = ?"; statement = connection.prepareStatement(sql); statement.setString(1, userName); statement.setString(2, DigestUtils.md5Hex(password)); resultSet = statement.executeQuery();
WebSocket
单边通信 - http协议
- 浏览器
- 服务端
全双工通信(应用层协议) - tcp/ip
- websocket -(c/s)
- 多线程聊天
服务端可以主动向浏览器发送信息
协议
**http协议:**http://域名:端口号
websocket://域名:端口号
浏览器版本的socket
模板引擎 - FreeMarker
获取后端传的参数,也可以用jsp,html,但是这个比较方便,要想用模板引擎后端必须要加载模板引擎
- 配置tomcat加载ftl页面路径
- 配置监听器,项目启动的时候监听器就执行了,所以可以将全局配置放在里面,各个Servlet都能用了
package com.epochong.chatroom.config;import freemarker.template.Configuration;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;/*** @author epochong* @date 2019/8/6 10:03* @email epochong@163.com* @blog epochong.github.io* @describe 预加载配置,相当于类的static静态块* WebListener:这个类具备监听器的能力*/
@WebListener
public class FreeMarkerListener implements ServletContextListener {/*** 读取配置的时候通过k,v的方式* k:_template_* v:cfg (freemarker.template.Configuration)*/public static final String TEMPLATE_KEY = "_template_";/*** 当项目启动的时候tomcat会自动调用* @param sce*/@Overridepublic void contextInitialized(ServletContextEvent sce) {//配置版本Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);//配置加载ftl路径try {cfg.setDirectoryForTemplateLoading(new File("F:\\Program\\Java\\Maven\\chatroom_websocket\\src\\main\\webapp"));} catch (IOException e) {e.printStackTrace();}// 配置页面编码cfg.setDefaultEncoding(StandardCharsets.UTF_8.displayName());//将配置写入上下文中,设置k,vsce.getServletContext().setAttribute(TEMPLATE_KEY,cfg);}/*** 项目快要终止的时候调用* 可以放一些全局的资源释放* @param sce*/@Overridepublic void contextDestroyed(ServletContextEvent sce) {}
}
项目:chatroom_websocket、网页聊天室相关推荐
- 项目总结 -网页聊天室
项目名称:网页聊天室 项目地址:http://101.37.14.113:8888/ 一.项目简介 本项目是基于WebSocket和Socket实现的网页聊天室.使用到的技术包括:MVC编程思想.We ...
- 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项目源码及数据库文件、
下载地址:https://download.csdn.net/download/ouyangxiaobai123/22679732 项目介绍: 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项 ...
- WebSocket 网页聊天室的实现(服务器端:.net + windows服务,前端:Html5)
websocket是HTML5中的比较有特色一块,它使得以往在客户端软件中常用的socket在web程序中也能轻松的使用,较大的提高了效率.废话不多说,直接进入题. 网页聊天室包括2个部分,后端服务器 ...
- Java和WebSocket开发网页聊天室
一.项目简介 WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,前端框架会使用AmazeUI,后台使用Java,编辑器使用U ...
- 基于flask的网页聊天室(一)
基于flask的网页聊天室(一) 基于flask的网页聊天室(一) 基本目标 基于flask实现的web聊天室,具有基本的登录注册,多人发送消息,接受消息 扩展目标 除基本目标外添加当前在线人数,消息 ...
- 使用WebSocket实现网页聊天室
使用WebSocket实现网页聊天室 一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体 ...
- 基于WebSocket实现网页聊天室
背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 ...
- Nodejs+socket.io 搭建个人的网页聊天室
Nodejs+socket.io 搭建个人的网页聊天室 最近看到别人搭建了自己的实时聊天室便产生了兴趣,于是乎自己也着手搭建了一个.在socket这里我选用了socket.io这个模块,在网上看了很多 ...
- Spring Boot WebChat 网页聊天室
使用Spring Boot +Spring Security+Spring Data Jpa+Thymeleaf+Spring websocket 搭建的简易网页聊天室. 项目源码参考:http:// ...
- 如何使用WebSocket实现网页聊天室?
一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体的开发中 WebSocket概述 使用 ...
最新文章
- php中const和static的区别和联系
- 软件工程第一周开课博客
- OAM K8s 标准实现 Crossplane 项目进入 CNCF Sandbox
- 高斯拟合 vc++代码_NMA2020W1 极大似然法模型拟合与bootstrap
- 【数据结构与算法】单链表的Java实现
- Javascript 判断 object 的特定类
- BZOJ.1029.[JSOI2007]建筑抢修(贪心)
- 帆软报表重要Activator之DesignerInitActivator之一
- assoc fetch mysql 用法_mysql_fetch_assoc、mysql_fetch_object、mysql_fetch_row、mysql_fetch_array用法学习...
- ef codefirst字段类型与sqlserver表字段类型对应概要
- LaTeX 中常用的导数符号命令
- 湖北省2021年高考成绩查询日期,湖北2021年高考查分及志愿填报时间公布!
- HTML前端连接go语言后段,一次完整的浏览器请求响应过程-Go语言中文社区
- Raster Map光栅图 VS Vector Map矢量图
- 计算机专业毕业论文选哪方面,计算机专业毕业论文格式有哪些要求
- 太极自定义diy名片模板_没有合适的手帐本?拿走这些电子模板,自制属于自己的手帐本...
- 常用的mysql存储引擎及其特点
- HBase(一):概述
- 360 VS QQ:一场精心策划的西安事变(下)
- 驱动级的特征码修改——终级免杀之PcShare