项目介绍本项目使用jsp+servlet+mysql架构搭建可聊天的酷炫博客系统。界面非常好看,除了登录注册个人中心修改外,博客还添加背景音乐,可在线交友聊天,发表动态,相互评论等,喜欢的博文还能添加收藏。

开发环境:jdk 8

intellij idea

tomcat 8

mysql 5.7

所用技术:jsp+servlet

js+ajax

layui

jdbc+C3P0

博客访问地址http://localhost:8090/indexServlet

项目目录结构

运行效果登录

首页

动态评论

关注列表

个人资料

聊天页面

核心代码:

1.注册使用邮箱验证码//邮件对象

public class EmailModel {

private String title;//标题

private String receiverEmail;//接收人邮箱

private String text;//发送内容

public static String register="欢迎来到微博客n您的注册为:";

public static String registerTitle="注册验证码";

public static String findPwdTitle="找回密码:";

public static String findPwdText="找回密码验证码:";

}

// 邮件发送

public class EmailUtils {

private final static String authorizationCode="khdotvxxxxdba"; //授权码-自己设置

private final static String senderEmail ="1022287044@qq.com"; //发送人邮箱--测试邮箱

//发送邮件方法

public static int sendEmail(EmailModel emailModel){ try{ Properties props = new Properties(); // 开启debug调试

props.setProperty("mail.debug", "false"); // 发送服务器需要身份验证

props.setProperty("mail.smtp.auth", "true"); // 设置邮件服务器主机名

props.setProperty("mail.host", "smtp.qq.com"); // 发送邮件协议名称

props.setProperty("mail.transport.protocol", "smtp"); MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); Session session = Session.getInstance(props); Message msg = new MimeMessage(session); msg.setSubject(emailModel.getTitle());//标题

StringBuilder builder = new StringBuilder(); builder.append(emailModel.getText()); msg.setText(builder.toString()); msg.setFrom(new InternetAddress(senderEmail));//发送人的邮箱地址

Transport transport = session.getTransport(); //发送人的邮箱地址 //你的邮箱密码或者授权码

transport.connect("smtp.qq.com", senderEmail, authorizationCode); transport.sendMessage(msg, new Address[] { new InternetAddress(emailModel.getReceiverEmail()) });// 接收人的邮箱地址

transport.close(); return 1; }catch (Exception e){ e.printStackTrace(); return 0; } }}

//注册及发送邮箱验证码

public void doGet(HttpServletRequest request, HttpServletResponse response) {

try{ PrintWriter printWriter=response.getWriter(); HttpSession session=request.getSession(); String action = request.getParameter("action"); String userName=request.getParameter("userName"); String password=request.getParameter("password"); if("sendEmail".equals(action)){ //发送验证码

String receiverEmail=request.getParameter("receiverEmail"); String type=request.getParameter("type"); String authCode=RandomUtil.randomNumbers(4); EmailModel emailModel=new EmailModel(); if("register".equalsIgnoreCase(type)){ //注册

User search=new User(); search.setUserName(receiverEmail); search=userService.getUser(search); if(null!=search){ printWriter.println("2"); return; }else{ emailModel.setTitle(EmailModel.registerTitle); emailModel.setText(EmailModel.register+authCode); } }else{ //找回密码

emailModel.setTitle(EmailModel.findPwdTitle); emailModel.setText(EmailModel.findPwdText+authCode); } System.out.println("邮箱验证码:"+authCode);

emailModel.setReceiverEmail(receiverEmail); int result= EmailUtils.sendEmail(emailModel); session.setAttribute(receiverEmail+"#EmailCode",authCode);//注册验证码

printWriter.println(result);

}else if("doRegister".equals(action)){ //注册验证

String authCode=request.getParameter("authCode");//验证码

String sessionCode=(String)session.getAttribute(userName+"#EmailCode");//注册验证码

if(null==sessionCode){ printWriter.println("3"); //验证码为空,请先获取邮箱验证码

}else if(!sessionCode.equals(authCode)){ printWriter.println("2"); //验证码错误

}else{ User user=new User(); user.setUserName(userName); user.setNickName(userName); user.setPassword(password); int result=userService.addUser(user); printWriter.println(result); //验证成功

} } }catch (Exception e){ e.printStackTrace(); return ; }}

2.上传头像protected void doGet(HttpServletRequest request, HttpServletResponse response) {

try { // 配置上传参数

PrintWriter printWriter = response.getWriter(); String fileName = ""; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); String userId = request.getParameter("userId"); String type = request.getParameter("type"); if (null != userId && !"".equals(userId)) { List formItems = upload.parseRequest(request); for (FileItem item : formItems) { // 迭代表单数据

if (!item.isFormField()) { String fileName2 = item.getName(); //重置乱码中文

fileName = RandomUtil.randomString(5) + (fileName2.substring(fileName2.indexOf("."))); String filePath = String.format("%s/%s", SystemConfig.fileUploadPath, fileName); File storeFile = new File(filePath); item.write(storeFile); // 保存文件到硬盘

} } if (null == type || "".equalsIgnoreCase(type)) { String userUpload = SessionUtils.getUserUpload(Integer.valueOf(userId), request); if (null != userUpload && !"".equalsIgnoreCase(userUpload)) { userUpload = userUpload + fileName + ","; } else { userUpload = fileName + ","; } SessionUtils.setUserUpload(Integer.valueOf(userId), userUpload, request); printWriter.println("0"); } else if ("headPic".equalsIgnoreCase(type)) {//头像

SessionUtils.setUserHeadPic(Integer.valueOf(userId), fileName, request); printWriter.println("0"); } } else { printWriter.println("0"); //用户信息未找到

} printWriter.close(); } catch (Exception ex) { ex.printStackTrace(); }}

3.个人聊天(发送消息及读取消息实现)//消息采用读取数据库模式实现,并非socket或者其他通讯主件

public void doGet(HttpServletRequest request, HttpServletResponse response) {

HttpSession session=request.getSession(); PrintWriter printWriter=response.getWriter(); String action = request.getParameter("action"); User user= SessionUtils.getUser(request); if ("sendMsg".equals(action)) { //发送消息

String message=request.getParameter("message"); String receiveId=request.getParameter("receiveId"); Chat chat=new Chat(); chat.setUserId(user.getId()); chat.setUserName(user.getNickName()); chat.setMessage(message); chat.setStatus(0); chat.setReceiveId(Integer.valueOf(receiveId)); chat.setCreateTime(DateUtil.formatDateTime(new Date())); Posts posts=new Posts(); posts.setReleaseId(user.getId()); chatService.addChat(chat); printWriter.println("0"); session.setAttribute(user.getId()+":"+receiveId,message); //添加推送

Notice notice=new Notice(); notice.setNoticeUserId(Integer.valueOf(receiveId)); notice.setUserId(user.getId()); notice.setNoticeType(3); notice.setIsRead(0); Notice isExtis=noticeService.getNotice(notice); if(null==isExtis){ System.out.println("添加推送");

notice.setUserName(user.getUserName()); notice.setPostTitle(message); noticeService.addNotice(notice); //添加通知

}else{ System.out.println("有未读消息,不添加推送");

} }else if ("getMsg".equals(action)) { //获取消息

String sendUserId=request.getParameter("sendUserId"); //发送人id

String receiveId=request.getParameter("receiveId"); //接收人

Chat chat=new Chat(); chat.setUserId(Integer.valueOf(sendUserId)); chat.setReceiveId(Integer.valueOf(receiveId)); chat.setStatus(0); List list=chatService.getChatList(chat); if(list.size()>0){ printWriter.println(JSONUtil.toJsonStr(list)); for(Chat c:list){ c.setStatus(1); chatService.updateChat(c); } }else{ printWriter.println(""); } printWriter.close(); }}

//前端jsp页面代码

${userInfo.userName}

${userInfo.nickName}

发送(s)

4.关注 粉丝 喜欢统计//每一项根据用户id单独统计在组装数据

public void getLikeFansNul(Integer userId,HttpServletRequest request){

String fansSql="select count(id) from t_likeuser where likeUserId="+userId; int fansNum= JDBCUtils.getCount(fansSql); String likeSql="select count(id) from t_likeuser where userid="+userId; int likeNum= JDBCUtils.getCount(likeSql); String collectSql="select count(id) from t_collection where userid="+userId; int collectNum= JDBCUtils.getCount(collectSql); CountsVo countsVo=new CountsVo(fansNum,likeNum,collectNum); SessionUtils.setCountsVo(countsVo,request);}

项目注意事项

1: 收藏和关注才会有通知

2:收藏自己的推文没有通知

3:聊天消息推送如果有一条当前人发送的消息未读时,只保存一条未读消息

4:消息采用读取数据库模式实现,并非socket或者其他通讯主件,后期会单独起一个项目完成socket版本及其他三方开源的通信主件版本,敬请关注及更新

jsp ajax聊天室,jsp+servlet实战酷炫博客+聊天系统相关推荐

  1. jsp注册里密码强弱怎么弄_jsp+servlet实战酷炫博客+聊天系统

    项目介绍 本项目使用jsp+servlet+mysql架构搭建可聊天的酷炫博客系统.界面非常好看,除了登录注册个人中心修改外,博客还添加背景音乐,可在线交友聊天,发表动态,相互评论等,喜欢的博文还能添 ...

  2. 基于jquery的ajax聊天室系统,基于jQuery的Ajax聊天室应用毕业设计(含外文翻译)...

    基于jQuery的Ajax聊天室应用毕业设计(含外文翻译) 毕业设计(论文) I 基于基于 jQuery 的的 Ajax 聊天室应用聊天室应用 摘摘 要要 随着网络的逐渐普及,以及网络技术的不断发展, ...

  3. ajax聊天室_Ajax聊天

    ajax聊天室 当出现Web 2.0术语时,开发人员会谈论很多社区. 而且,无论您认为是炒作还是不炒作,吸引客户或读者就当前话题或所售产品进行即时对话的想法都非常引人注目. 但是你怎么到达那里? 您能 ...

  4. 妙味课堂ajax教程,前后端高级实战 | Node.js 实战开发:博客系统【妙味课堂】

    第一部分:Node.js基础视频内容 1-初识NodeJs 2-webstorm的使用 3-Node和JS的异同 4-模块的使用 5-模块加载机制 6-模块-module和exports 7-glob ...

  5. 基于Hexo和Github的炫酷个人博客(进阶篇)

    基于Hexo和Github的炫酷个人博客(基础篇) 基于Hexo和Github的炫酷个人博客(进阶篇) 网页底部加上浏览量 打开/themes/next/layout/_partials/footer ...

  6. 【Python开发】Flask开发实战:个人博客(三)

    Flask开发实战:个人博客(三) 在[Python开发]Flask开发实战:个人博客(一) 中,我们已经完成了 数据库设计.数据准备.模板架构.表单设计.视图函数设计.电子邮件支持 等总体设计的内容 ...

  7. 基于Hexo和Github的炫酷个人博客(基础篇)

    什么是hexo Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.       本文采用最新的Hexo版 ...

  8. 重磅回归-SSM整合进阶项目实战之个人博客系统

    历经一个多月的重新设计,需求分析以及前后端开发,终于有了一定的输出:我自己实现的spring4+springmvc+mybatis3整合的进阶项目实战-个人博客系统 已然完成了,系统采用mvc三层模式 ...

  9. asp.net ajax聊天室,ASP.NET MVC4异步聊天室的示例代码

    本文介绍了ASP.NET MVC4异步聊天室的示例代码,分享给大家,具体如下: 类图: Domain层 IChatRoom.cs using System; using System.Collecti ...

最新文章

  1. 【微服务架构】SpringCloud使用Ribbon实现负载均衡
  2. 更改域控制器的计算机名
  3. LeetCode171——Excel Sheet Column Number
  4. 浅入浅出webpack
  5. 【新星计划】Matlab绘制分岔图
  6. 【统计学习方法】感知机笔记
  7. leetcode701. 二叉搜索树中的插入操作(dfs)
  8. 大龄屌丝自学笔记--Java零基础到菜鸟--036
  9. 找工作的人太多导致平台崩了?BOSS直聘回应:系统故障 已修复
  10. 第四章:变量、作用域和内存问题
  11. 毕设题目:Matlab车辆计数
  12. BDF 字体文件格式
  13. CNCC技术论坛|分布式数据库HTAP的探索与实践
  14. 品牌鞋的运作,如何判别鞋的品牌真伪
  15. 王彦霖艾佳妮婚纱大片,校园牵手漫步,女方秀心形婚戒
  16. 服务器导出表为dmp文件,mysql数据库导出dmp文件
  17. input 标签中的 Hiden隐藏域
  18. 黑马点评关键业务流程梳理一
  19. CTF中的无线电以及一些取证题目
  20. 利用ipv6技术,废旧笔记本变成server

热门文章

  1. python标签控件是_Python 图形用户界面编程
  2. php的函数是谁写的,一个用PHP写的中文分词函数
  3. java 鸡尾酒排序_Java实现几种常见排序方法
  4. mysql 常用命令集_Mysql 常用命令集
  5. 【LeetCode】剑指 Offer 45. 把数组排成最小的数
  6. 微信小程序|开发实战篇之九-image-picker图片选择器组件及其子组件
  7. ubuntu server 下使用subversion的总结【原创】
  8. js常用字符串处理方法
  9. python 代码片段22
  10. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题