网页聊天室的开发笔记

因为参加比赛,需要在网页系统中集成一个网页聊天室的功能,想着自己完整地开发一个。想起最开始学习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"//接受到的响应类型为json
			data : {
				"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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值