文档章节

在线交流系统的实现

c
 chuiyuan
发布于 2014/06/18 19:47
字数 738
阅读 279
收藏 4
点赞 0
评论 0

一。系统分析 

1. 页面结构 

      要用到两个界面 ,登录界面和聊天界面。应该写几个JSP 代码 呢?为了利于分工,我们将

界面显示和动作分开。

三个动作

(1)登录,为这个动作设计一个输入页面 loginForm.jsp ,显示登录表单;提交给 loginAction.jsp, 负责接收参数,处理请求

(2)聊天,为这个动作设计 一个输入页面chatForm.jsp. 显示聊天 界面表单;该表单提交 给 chatAction.jsp ,负责接受

聊天 信息,处理聊天请求。

    请求完毕 ,跳转到 chatForm.jsp,在chatForm.jsp中,信息内容的显示和在线名单可以另外写msgs.jsp ,通过 iframe 嵌入。

作用是显示用户的聊天信息,在线名单 ,这个页面每隔一会刷新一下。

(3)退出登录,为这个动作写一个 logoutAction.jsp ,负责 清空用户的状态,跳转到 loginForm.jsp。

2. 状态保存

消息内容和在线名单都是保存在  application 中。

用户的信息保存在session 中。


二、开发过程 

1. 准备数据 

创建 数据 库脚本为

create table t_customer(
 account varchar(40),
 password varchar(40),
 name varchar(40));

2. 编写 DAO 和VO

在DAO中验证用户的身份,用户的信息用VO封装。这里只写下DAO中的关键代码 。

public void initConnection() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");  //指明驱动
		String url = "jdbc:mysql://localhost:3306/test";  
		connection= DriverManager.getConnection(url, "root","root");
	}
	
	public Customer getCustomerByAccount(String account)throws Exception{
		Customer customer= null;
		initConnection();
		String sql= "select *  from t_customer where account =?";
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setString(1, account);
		ResultSet rs= ps.executeQuery();
		
		if (rs.next()){
			customer= new Customer();
			customer.setAccount(rs.getString("account"));
			customer.setName(rs.getString("name"));
			customer.setPassword(rs.getString("password"));
		}
		closeConnection();
		return customer;
	}

3. 编写 loginForm.jsp 和loginAction.jsp 

对于登录界面来说 ,有两个页面。

loginForm是:

<%
    	//初始化application 
      	ArrayList customers = (ArrayList) application.getAttribute("customers");
    	if (customers == null) {
    		customers = new ArrayList();
    		application.setAttribute("customers", customers);
    	}

    	ArrayList msgs = (ArrayList) application.getAttribute("msgs");
    	if (msgs == null) {
    		msgs = new ArrayList();
		    application.setAttribute("msgs", msgs);
    	}
    %>
    
    欢迎登录在线交流系统 
    <form action="loginAction.jsp"  name ="form1" method ="post">
    输入帐号:<input name ="account"  type="text"><br>
    输入密码:<input name ="password"  type= "text"> <br>
    <input type ="submit"  value="登录">
    </form>

loginAction是

  <%
    request.setCharacterEncoding("gb2312");
    String account = request.getParameter("account");
    String password = request.getParameter("password");
    
    CustomerDAO cdao = new CustomerDAO();
    Customer customer= cdao.getCustomerByAccount(account);
    if (customer==null|| !customer.getPassword().equals(password)){
    %> 
    登录失败,<a href ="loginForm.jsp">返回页面</a>
    <%
    }
    else{
    session.setAttribute("customer", customer);
    ArrayList customers =(ArrayList) application.getAttribute("customers");
    ArrayList msgs = (ArrayList)application.getAttribute("msgs");
    customers.add(customer);
    msgs.add(customer.getName()+"上线啦");
    response.sendRedirect("chatForm.jsp");
    } 
     %>

4. 编写 chatForm.jsp 和chatAction.jsp 

chatForm.jsp .

 <%
  Customer customer=(Customer)session.getAttribute("customer");
   %>
   欢迎 <%=customer.getName() %>聊天<br>
   <form action="chatAction.jsp"  method ="post">
   输入聊天信息:<input name ="msg" type="text"  size="40">
   <input type ="submit" value ="发送">
   </form>
   <a href ="logoutAction.jsp">退出登录</a>
   <hr>
   <iframe src ="msgs.jsp" witdth ="100%"  height ="80%"  frameborder ="0"></iframe>

chatAction.jsp 

<%
		Customer customer = (Customer) session.getAttribute("customer");
	%>
	<%
		request.setCharacterEncoding("gb2312");
		String msg = request.getParameter("msg");
		ArrayList msgs = (ArrayList) application.getAttribute("msgs");
		if (msg != null && !msg.equals("")) {
			msgs.add(customer.getName() + "说:" + msg);
			response.sendRedirect("chatForm.jsp");
		}
	%>

msgs.jsp

<%response.setHeader("Refresh", "10");
     %>
    
     <table width ="80%"  border="0" align ="center">
     <tr bgcolor = "yellow"  align ="center">
     <td width ="75%" >消息</td>
     <td width ="25%">当前在线</td>
     </tr>
     
     <tr bgcolor= "pink">
     <td >
     <%
     	ArrayList msgs = (ArrayList) application.getAttribute("msgs");
       	if (msgs != null) {
     		for (int i = msgs.size() - 1; i >= 0; i--) {
     			out.println(msgs.get(i) + "<br>");
     		}
     	}
     %></td>
     <td valign="top">
     <%
     ArrayList customers = (ArrayList)application.getAttribute("customers");
     if (customers!=null){
     	for (int i=customers.size()-1; i>=0;i--){
    		 Customer customer= (Customer)customers.get(i);
     		out.println(customer.getAccount()+"("+customer.getName()+")"+"<br>");
     	}
     }
      %></td>
     </tr>
     </table>


© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 91
码字总数 40993
作品 0
海淀
开源中国2010年10款热门教学相关的开源软件

百年大计,教育为本。本文收录了 2010 年度开源中国社区最受欢迎的 10 款跟教学服务和教学管理相关的开源软件,这些软件多数采用PHP开发,也有Java的系统。 1. BigBlueButton BigBlueButton...

红薯 ⋅ 2010/12/29 ⋅ 18

远程教育平台--BigBlueButton

BigBlueButton 是一个使用 ActionScript 开发的在线视频会议系统或者是远程教育系统,主要功能包括在线PPT演示、视频交流和语音交流,还可以进行文字交流、举手发言等功能,特别适合用在网上...

匿名 ⋅ 2010/03/04 ⋅ 4

零起飞/FLY-CMS

#CMS-07FLY 你还在为没人写后台程序烦恼吗? 你还在为招不到合适的程序员而烦恼吗? 你还在为写后台源码浪费了大量的时间而烦恼吗? 现在你将不在为此而烦恼,只要你拥有了07FLY企业建站系统,...

零起飞 ⋅ 2014/12/01 ⋅ 0

名称:53KF网站客服系统 v3.0.1官方版

名称:53KF网站客服系统 v3.0.1官方版版本:3.0.1软件大小:107 KB软件语言:简体中文软件授权:免费版应用平台:Win7/Win2003/Vista/Win2000/WinXP 53KF网站客服系统用于企业内部人员之间、...

相心的泪 ⋅ 2016/08/03 ⋅ 0

BigBlueButton 0.9.0 RC 发布,远程教育系统

BigBlueButton 0.9.0 RC 发布,此版本改善了音频质量。对于 Firefox 和 Chrome 用户来说,通过网络实时协作协议(WebRTC)支持在线发送和接收音频。同时此版本可以设置公共聊天和私人聊天两种模...

oschina ⋅ 2015/04/29 ⋅ 9

基于Java企业门户网站设计(一)

开始 第一章 绪论 1.1 课题背景及意义 1.2 开发环境与技术简介 1.2.1 B/S架构 1.2.2 jsp 1.2.3 SQL server 2000 第二章 需求分析 2.1系统功能需求 2.2系统功能建模 第三章 总体设计 3. 1 系统...

请叫我赵小宝 ⋅ 2014/11/23 ⋅ 3

shuzheng/zhengAdmin

zhengAdmin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统 交流QQ群:133107819🈵、284280411🈵、305155242🈵、528049386🈵、157869467🈵、570766789♨️ 在线...

shuzheng ⋅ 2017/03/13 ⋅ 0

浅析政府网站如何走向一站式、一体化管理

目前,政府网站多数以信息发布、政务公开为主,缺少真正的在线服务内容,缺乏公众的实时监督,仍然停留在简单的网站信息展示阶段。随着政府网站绩效考核办法的发布,越来越多的政府网站要向“...

xibudongli博客 ⋅ 2014/02/21 ⋅ 0

在线编辑器 TQEditor 评测

TQEditor是国内第一个兼容IE9的在线编辑器, 也是一个功能体积比最优的的在线编辑器。笔者此前曾使用多款类似的在线编辑器,如:KindEditor CKEditor,相比这两款编辑器,虽然TQEditor的名气没...

litqqs ⋅ 2011/10/21 ⋅ 1

PHP通用用户中心框架--OpenCenter

OpenCenter是一款基于ThinkPHP的用户中心产品。其介于框架和应用之间,提供通用的用户中心和后台模块给开发者用来实现自己的业务系统。 基于Apache2.0的开源协议,对商业友好,永久开源免费。...

陈一枭 ⋅ 2015/02/04 ⋅ 29

没有更多内容

加载失败,请刷新页面

加载更多

下一页

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 45分钟前 ⋅ 0

vim使用手册--配对括号的查找

1、把光标放在标记有(、[或{处。 2、按%字符 3、此时光标的位置应当在配对的括号处 4、再次按%就可以跳回配对的第一个括号处。

dragon_tech ⋅ 48分钟前 ⋅ 0

c++ 、object-c printf,%02X和%x有什么区别 ?

%x即按十六进制输出,英文字母小写,右对齐。 %02X有以下变化:英文字母变大写,如果输出字符不足两位的,输出两位宽度,右对齐,空的一位补0。超过两位的,全部输出。 如果不用 %02x 会出现...

yizhichao ⋅ 53分钟前 ⋅ 0

Spring源码解析(七)——实例创建(中)

前言 上一节讲到了,Spring 会根据实例的作用域执行不同的创建逻辑,分别是 Singleton、Prototype、其他 Scope,其中 Singleton 会调用 getSingleton 从缓存中获取,缓存中没有才会创建实例;...

MarvelCode ⋅ 54分钟前 ⋅ 0

Thrift RPC实战(六) spring集成thrift

1.服务端设置 对泛型Thrift Service的支持, 通过采用spring配置以及反射的方式来实现.对于一个服务提供者来说,需要提供端口,接口以及接口实现类,因此在接口中spring配置文件中配置如下 <!...

lemonLove ⋅ 56分钟前 ⋅ 0

oracle11g自动分区使用

为什么使用自动分区? 在oracle11g之前,oracle是不支持自动分区功能的,这就可能导致我们系统在运行一段时间之后,就需要看看分区是否创建或者写触发器进行创建分区,否则就会导致数据无法入...

strict_nerd ⋅ 今天 ⋅ 0

Spring mvc ViewResolver视图解析器实现机制

概要 我们在controller里面经常这样return一个ModelAndView。 return new ModelAndView("userList", "users", userList); DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF......

轨迹_ ⋅ 今天 ⋅ 0

策略模式

1.策略模式 策略模式是同一个行为的不同处理办法。策略模式和简单工厂模式的区别:1.策略模式主要是方法的执行方式,工厂模式要获取的对象。两者的侧重点不同。 ...

Cobbage ⋅ 今天 ⋅ 0

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 今天 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部