网页聊天室的开发笔记
因为参加比赛,需要在网页系统中集成一个网页聊天室的功能,想着自己完整地开发一个。想起最开始学习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不能使用的问题,这个问题困扰了好久,最终是重写页面代码才解决的
<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();
网页聊天室的开发笔记相关推荐
- Java和WebSocket开发网页聊天室
一.项目简介 WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,前端框架会使用AmazeUI,后台使用Java,编辑器使用U ...
- java web 聊天室_Java和WebSocket开发网页聊天室
小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ 一.项目简介WebSocket是HTML5一种新的 ...
- WebSocket 网页聊天室的实现(服务器端:.net + windows服务,前端:Html5)
websocket是HTML5中的比较有特色一块,它使得以往在客户端软件中常用的socket在web程序中也能轻松的使用,较大的提高了效率.废话不多说,直接进入题. 网页聊天室包括2个部分,后端服务器 ...
- 使用WebSocket实现网页聊天室
使用WebSocket实现网页聊天室 一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体 ...
- 基于WebSocket实现网页聊天室
背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 ...
- 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项目源码及数据库文件、
下载地址:https://download.csdn.net/download/ouyangxiaobai123/22679732 项目介绍: 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项 ...
- 如何使用WebSocket实现网页聊天室?
一.文章导读 服务器推送你还在使用轮询吗?本文将带你领略WebSocket的魅力,轻松实现服务器推送功能.本文将以下面两方面让你理解WebSocket并应用到具体的开发中 WebSocket概述 使用 ...
- FluorineFx + Flex视频聊天室案例开发----客户端
上一篇<FluorineFx + Flex视频聊天室案例开发----服务器端>详细的介绍了如何利用FluorineFx开发一个及时通信的视频聊天室服务器处理程序,并通过Web网站来宿主这个 ...
- 网页聊天室win10界面源码
简介: 网页聊天室win10界面源码,仿win10桌面网站带后台,源码上传即可使用,无需数据库. 后台地址:http://你的域名/admin/ 后台账号:admin 后台密码:admin 网盘下载地 ...
最新文章
- 数据密集型应用系统设计 [Designing Data-Intensive Applications]
- 遇到 HTTP 错误 403.14 - Forbidden?
- 获取指定文件夹下的所有文件名
- git 修改分支名字_开发中必须要掌握的 Git 技巧
- unity集成openinstall流程
- mckinsey game
- CODEVS 1408 最长公共子序列
- wxWidgets:使用控件
- Flex与.NET互操作系列文章索引
- 帮你排雷Jmeter分布式性能测试那些坑~轻轻松松去实战
- python之optparse模块
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
- 十三种寂寞 你有过吗?『最无奈的是第13种』
- ESP8266+安信可微信智能配网
- Power BI 学习三:数据整理和关系管理
- OPA-Gatekeeper使用
- Eclipse方式: Processes that Adapt (part I)
- 如何使用万用表测量三级管的阻值
- python分拣豆子_〖小豆子〗还在为上网课记考勤而忧虑吗?自制python半自动打考勤程序来了!...
- c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...