因为参加比赛,需要在网页系统中集成一个网页聊天室的功能,想着自己完整地开发一个。想起最开始学习java基础的时候,最后的作业就是利用java开发一个类似qq的在线聊天软件,但是,当时虽然有老师带着一步一步地做,但是最后因为socket通信的一个核心问题,没有解决,最后也不了了之了。这次利用web程序开发方法,做一个聊天软件,想着思想和架构还是挺简单的,但是开发过程中还是遇到了很多很多各种各样的问题,其中也有一些学习过程中一直遗留和忽视的问题,现在将这些问题集中贴上来,以备留存:

1.在web程序中,引用资源文件properties的问题,如果将资源文件放在src目录下,将程序运行为application是没有问题的,但是将程序放在tomcat容器中运行的时候,就会出现找不到指定文件的错误,究其原因,是因为在运行web程序的时候,eclipse会将相关的java文件进行编译成class文件,而jsp文件会编译成相应的servlet文件,并且将整个工程放在tomcat指定的路径webapps下面,这样就造成了properties的相对路径的改变,查找webapps相应的目录线面的properties路径,发现经过编译后,资源文件存放在了WEBINF/classes文件夹下,这样的话,就可以用如下的方法解决:

 public String getPath(){String path =  this.getClass().getResource("/").getPath();//得到classes的文件夹路径path = path.replaceAll("%20"," ");//空格转换path = path +"db.properties";return path;}
</pre><span style="white-space:pre"></span><p></p><div style="text-align:left">.<img src="https://img-blog.csdn.net/20141118165902609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzU5MTg3MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></div><div style="text-align:left"></div><div style="text-align:left">2.系统基于struts进行开发,而struts的action的execute方法又必须要有一个返回值,也就是说action接收到一个请求后,就必须跳转到一个action或者是jsp页面中,当我们不希望其进行跳转,而只是进行接收请求和返回请求的ajax操作的时候,我们可以将返回值设为“return null”:</div><div style="text-align:left"></div><div style="text-align:left"><pre name="code" class="java">   public String execute() throws Exception {HttpServletResponse response = ServletActionContext.getResponse();//在action中得到request和response的方法,在ServletActionContext中得到HttpServletRequest request = ServletActionContext.getRequest();response.setCharacterEncoding("UTF-8");HttpSession session = request.getSession();response.setContentType("text");// 获得已登录用户User user = (User) session.getAttribute("user");//System.out.println("用户" + user.getName() + "正在请求最新消息");ArrayList<Message> list = new ChatImpl().accMsg(user.getId(), toUserId);PrintWriter writer = response.getWriter();if (list.size() == 0) {// 没有新消息,写入""writer.write("");writer.flush();writer.close();} else {// 以gson的数据方式响应请求数据Gson gson = new Gson();String s = gson.toJson(list);//向response中写入json字符串,ajax端的data值设为json,就可以将接受到的data作为json对象进行处理了writer.write(s);writer.flush();writer.close();//每次使用完毕writer以后,都需要关闭一下,不然下一次再接受请求的时候,writer里面会残存上一次的数据,造成数据的不一致性}return null;}

3.jquery的ajax异步通信方式,代码如下:

//ajax与服务器进行通信,异步是否有新消息setInterval(function() {jQuery.ajax({url : "isNewMsg",type : "post",dataType : "json"//接受到的响应类型为jsondata : {"userId":${user.id}//js代码中是可以使用java脚本的},success : function(data) {for(var i=0;i<data.length;i++){//接收的对象为json字符串儿,处理方式shake(data[i]);}}});// 每隔1s刷新一次}, 1000);

4.表单验证:

//在提交前进行检查function check() {if ($("#name").val() == "") {<!-- 在每一个输入框的后面的一个id为lname的lable标签,作为验证信息的显示处 -->$("#lname").text("用户名不能为空");return false;}if ($("#pwd").val() == "") {$("#lpwd").text("密码不能为空");return false;}if ($("#repwd").val() == "") {$("#lrepwd").text("请再次输入密码");return false;} else if ($("#pwd").val() != $("#repwd").val()) {$("#lrepwd").text("两次输入的密码不一致");return false;}if ($("#nickname").val() == "") {$("#lnickname").text("昵称不能为空");return false;}if ($("#sex").val() == "") {$("#lsex").text("请选择性别");return false;}return true;}

5.struts2中,action的默认跳转方式为请求转发方式,但是为了防止表单的重复提交,需要将其设置为重定向类型:
    <action name="register" class="com.chat.action.Register"><result type="redirect" name="success">/index.jsp</result><result type="redirect" name="input">/register.jsp</result></action>

6.将html转换为jsp文档的时候,最主要的是将其jsp的相关头屑规范和标准,不然会出现一些莫名的错误,如jquery不能使用的问题,这个问题困扰了好久,最终是重写页面代码才解决的

7.在进行数据库的事务操作的时候,首先,conn.setautocommit(false)一定要在所有的数据库和connection操作都做完以后,才进行事物提交,不然会出现代码执行没有任何错误,但是数据库相关数据却没有得到更新的错误:

<span style="white-space:pre">  </span>conn.setAutoCommit(false);ps = conn.prepareStatement(sql);ps.setInt(1, msg.getFrom().getId());int count = ps.executeUpdate();conn.commit();

网页聊天室的开发笔记相关推荐

  1. Java和WebSocket开发网页聊天室

    一.项目简介 WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,前端框架会使用AmazeUI,后台使用Java,编辑器使用U ...

  2. java web 聊天室_Java和WebSocket开发网页聊天室

    小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ 一.项目简介WebSocket是HTML5一种新的 ...

  3. WebSocket 网页聊天室的实现(服务器端:.net + windows服务,前端:Html5)

    websocket是HTML5中的比较有特色一块,它使得以往在客户端软件中常用的socket在web程序中也能轻松的使用,较大的提高了效率.废话不多说,直接进入题. 网页聊天室包括2个部分,后端服务器 ...

  4. 使用WebSocket实现网页聊天室

    使用WebSocket实现网页聊天室 一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体 ...

  5. 基于WebSocket实现网页聊天室

    背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 ...

  6. 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项目源码及数据库文件、

    下载地址:https://download.csdn.net/download/ouyangxiaobai123/22679732 项目介绍: 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项 ...

  7. 如何使用WebSocket实现网页聊天室?

    一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体的开发中 WebSocket概述 使用 ...

  8. FluorineFx + Flex视频聊天室案例开发----客户端

    上一篇<FluorineFx + Flex视频聊天室案例开发----服务器端>详细的介绍了如何利用FluorineFx开发一个及时通信的视频聊天室服务器处理程序,并通过Web网站来宿主这个 ...

  9. 网页聊天室win10界面源码

    简介: 网页聊天室win10界面源码,仿win10桌面网站带后台,源码上传即可使用,无需数据库. 后台地址:http://你的域名/admin/ 后台账号:admin 后台密码:admin 网盘下载地 ...

最新文章

  1. 数据密集型应用系统设计 [Designing Data-Intensive Applications]
  2. 遇到 HTTP 错误 403.14 - Forbidden?
  3. 获取指定文件夹下的所有文件名
  4. git 修改分支名字_开发中必须要掌握的 Git 技巧
  5. unity集成openinstall流程
  6. mckinsey game
  7. CODEVS 1408 最长公共子序列
  8. wxWidgets:使用控件
  9. Flex与.NET互操作系列文章索引
  10. 帮你排雷Jmeter分布式性能测试那些坑~轻轻松松去实战
  11. python之optparse模块
  12. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
  13. 十三种寂寞 你有过吗?『最无奈的是第13种』
  14. ESP8266+安信可微信智能配网
  15. Power BI 学习三:数据整理和关系管理
  16. OPA-Gatekeeper使用
  17. Eclipse方式: Processes that Adapt (part I)
  18. 如何使用万用表测量三级管的阻值
  19. python分拣豆子_〖小豆子〗还在为上网课记考勤而忧虑吗?自制python半自动打考勤程序来了!...
  20. c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...

热门文章

  1. 微型计算机显卡必须插在主板的,花小钱办大事 不同型号N卡组建SLI系统
  2. win10 oracle怎样卸载,怎么完全卸载Oracle?(Win10) 以Oracle 11g为例
  3. 海外跨境直播面临的难题及解决方案
  4. 用html设计一个时间距离查询,使用HTML5 Geolocation实现一个距离追踪器
  5. 图片切换上一页 下一页
  6. 云计算优势与风险并存 安全是首要问题
  7. 【LTE基础知识】LTE UE Category LTE终端产品工作类型总结
  8. 线性表中的尾插法双链表的学习
  9. 线性表中的尾插法单链表的学习
  10. Github如何快速找到优秀开源项目