網(wǎng)絡聊天室系統(tǒng)1_第1頁
網(wǎng)絡聊天室系統(tǒng)1_第2頁
網(wǎng)絡聊天室系統(tǒng)1_第3頁
網(wǎng)絡聊天室系統(tǒng)1_第4頁
網(wǎng)絡聊天室系統(tǒng)1_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、項目題目:網(wǎng)絡聊天室評分項得分技術(40 分)ServletJSPELFilterListenerTagJSTLData SourceJava MailEJB需求設計文檔(8分)注釋說明(8分)一.項目規(guī)劃:開發(fā)環(huán)境:NetBeans & MySQL開發(fā)語言:java,SQL一需求分析:伴隨的網(wǎng)絡的普及,網(wǎng)絡聊天室成為群眾網(wǎng)絡生活的一部分,各 種類型的聊天室為大眾學習,生活,工作服務。本聊天室系統(tǒng)專門針對大學生中對 J2EE編程有興趣的同學提供一個可以互相交流的平臺,分享經(jīng)驗和知識。結構化分析:該程序分成4個模塊及分工:數(shù)據(jù)庫建立和鏈接模一用戶登錄和注冊模塊一聊天室模管理員功能模塊一一數(shù)據(jù)庫建

2、立:數(shù)據(jù)庫連接代碼:用戶登錄界面和管理員登錄選項連接:注冊界面:聊天室3個框體:全體3人共同完成管理員刪除功能:在線用戶分頁顯示:文檔制作:系統(tǒng)完善:數(shù)據(jù)庫建立和鏈接模塊:需求分析:創(chuàng)建程序所需的數(shù)據(jù)庫,2個表的建立及鏈接數(shù)據(jù)庫的java文件編寫, 要求能夠將各模塊有關的數(shù)據(jù)操作行為所造成的數(shù)據(jù)變更及時準確的提交到數(shù)據(jù)庫并 改變。復雜度分析:多表建立,連接,查詢功能,連接MySQL數(shù)據(jù)庫??尚行苑治觯菏褂胮owerdesigner建立合適的數(shù)據(jù)庫,上網(wǎng)查找連接MySQL的鏈 接代碼。用戶登錄和注冊模塊:需求分析:要求創(chuàng)建簡單明了的登陸界面,包括普通用戶的賬號密碼輸入框,管 理員特殊登錄選項,找

3、回密碼,普通用戶注冊選項以及相應的注冊界面。同時在用戶登 錄及注冊時,能夠將用戶的輸入信息準確的鏈接到數(shù)據(jù)庫中,對數(shù)據(jù)進行添加,修改和 比較。當管理員登錄后自動連接至管理員模塊界面。復雜度分析:界面創(chuàng)建及點擊后的界面轉換,登錄與注冊時連接數(shù)據(jù)庫后的數(shù)據(jù) 對比和添加??尚行苑治觯菏褂肑SP編程實現(xiàn)界面及轉換,利用數(shù)據(jù)庫連接模塊對數(shù)據(jù)進行 比較和添加。聊天室模塊:需求分析:本程序的主體部分,要求建立3個分框體:聊天信息框,在線成員框 和用戶聊天信息輸入框形成主窗體。3個框體中要求聊天信息框體按照時間順序顯示所 有用戶的聊天信息并聲明是否是私人聊天信息,在線成員框體能夠及時準確的表現(xiàn)在線 成員的名字

4、和在線總人數(shù),聊天信息輸入框體要求除信息輸入欄外還要有動作,表情選 項,并在輸入欄下方顯示當前時間,并將信息時間存放入數(shù)據(jù)庫相應的表中復雜度分析:3部分框體實現(xiàn),聊天信息的保存,信息輸入框與聊天信息框顯示 的鏈接。可行性分析:JSP實現(xiàn)3部分框體及框體信息的鏈接,聊天信息保存到XML文件 中,聊天時間存放入charroom表中。管理員功能模塊:需求分析:要求當管理員登陸后進入高級管理界面,顯示所有用戶的信息以分頁形式 顯示,并允許對用戶進行刪除操作,同時改變數(shù)據(jù)庫中的數(shù)據(jù)信息。復雜度分析:高級界面的實現(xiàn)及用戶信息的分頁顯示,連接數(shù)據(jù)庫并操作數(shù)據(jù)庫數(shù)據(jù)??尚行苑治?JSP實現(xiàn)界面,標簽Tag實現(xiàn)

5、分頁顯示及數(shù)據(jù)庫的鏈接。系統(tǒng)總體模塊模塊名文件名功能描述數(shù)據(jù)庫建立和鏈接模塊BaseConnection.java鏈接和數(shù)據(jù)查詢更新操 作用戶登錄和注冊模塊login.jsp用戶登錄界面Check.jsp用戶登錄后臺處理Search.jsp密碼找回界面regist.jsp用戶注冊界面SecureFilter.java登錄過濾Check_login.java檢查登錄注冊操作loginCheckBean.java封裝登錄功能的JavaBeanReceiveMail.java接收用戶密碼SendMail.java發(fā)送用戶密碼聊天室模塊ChatRoom.jsp聊天室界面,信息輸入界 面Contant.

6、jsp聊天內容界面leave.jsp用戶退出處理online.jsp顯示在線用戶列表UserInfo.java在線用戶后臺處理UserListener.java監(jiān)聽用戶在線情況MessageAction.java聊天內容后臺處理StringUtils.java修改字符編碼管理員功能模塊manage.jsp高級管理界面ManageTag.java分頁實現(xiàn)及用戶刪除數(shù)據(jù)庫設計ER圖player nicknamplayer nicknam巳 yarKhar(50) password varchar(50)數(shù)據(jù)庫物理結構在線用戶列表onlineusernickNameVARCHAR(50)主碼用戶名l

7、oginTim eVARCHAR(50)Not Null登錄時間注冊用戶列表playernicknameVARCHAR(50)外碼用戶名passwordVARCHAR(50)Not Null用戶密碼MySQL建表SQL腳本(包含索引)/*=*/ /* DBMS name:MySQL 4.0*/* Created on:2010-1-10 14:13:05*/*=*/ drop index Relationship_1_FK on onlineuser; drop table if exists onlineuser; drop table if exists player; /*=*/ /*

8、Table: onlineuser*/*=*/ create table onlineuser ( nicknamevarchar(50),logintimevarchar(50) type = InnoDB; /*=*/ /* Index: Relationship_1_FK*/*=*/ create index Relationship_1_FK on onlineuser ( nickname ); /*=*/ /* Table: player*/*=*/ create table player ( nicknamevarchar(50)not null,passwordvarchar(

9、50),primary key (nickname) ) type = InnoDB; alter table onlineuser add constraint FK_Relationship_1 foreign key (nickname) references player (nickname) on delete restrict on update restrict;設計:a)數(shù)據(jù)庫建立和連接模塊實現(xiàn)i實現(xiàn)功能:程序對應的數(shù)據(jù)庫及2個表的創(chuàng)建,包括,在線用戶表和登陸用戶表。在 線用戶表中的數(shù)據(jù)來自登錄用戶表中。ii.邏輯設計運用的組件以及組件之間的關系:運用DATA SOURCE技術

10、實現(xiàn)數(shù)據(jù)庫的連接b)1. 0層數(shù)據(jù)流圖user4user4c)子模塊設計1,用戶登錄和注冊模塊實現(xiàn)1.1邏輯設計運用的組件以及組件之間的關系:用servlet和JSP組件技術實現(xiàn)用戶的登陸功能。loginCheckBean在用戶登錄時,運用session組件保存用戶的登陸信息,并用loginCheckBean的javabean組件封裝登錄功能。Filter組件用來阻止用戶的非法登錄,如果用戶企圖不登錄而直接進入聊天室 錯誤登錄方式等都將通過filter攔截。運用javamail技術實現(xiàn)用戶的密碼找回功能。1.2界面設計用戶登錄界面應包含用戶名和密碼輸入框,找回密碼按鈕,注冊按鈕,重置 按 鈕,

11、登錄按鈕。各個按鈕分別按內容實現(xiàn)各自的功能。聊天室模塊實現(xiàn)2.1邏輯設計運用的組件以及組件之間的關系:運用servlet和JSP組件技術實現(xiàn)聊天的的信息顯示功能和基本對話功能。運用EL組件技術顯示用戶登錄時間。運用JSTL組件技術實現(xiàn)在線人員列表的顯示和普通用戶的刪除。運用listener監(jiān)聽用戶的登錄情況(用戶是否在線)。2.2界面設計聊天系統(tǒng)界面,應包含在線人員列表,信息發(fā)送框,信息發(fā)送按鈕,信息發(fā) 送 對象框,悄悄話選項按鈕,管理員實現(xiàn)管理功能的高級選項按鈕,信息顯 示 框。管理員功能模塊實現(xiàn)3.1邏輯設計運用的組件以及組件之間的關系:運用servlet和JSP技術實現(xiàn)管理員的管理功能。

12、管理員可以查看在線人員列表,在此處運用TAG組件技術實現(xiàn)在線人員的分 頁 顯示。3.2界面設計該頁面應包含管理員實現(xiàn)管理的刪除普通用戶功能,顯示所有注冊用戶列表,四.系統(tǒng)實現(xiàn)代碼說明1數(shù)據(jù)庫連接模塊數(shù)據(jù)庫連接:BaseConnection.javapublic BaseConnection() throws Exceptiontry initCtx = new InitialContext();DataSource ds=(DataSource)initCtx.Lookup(java:comp/env/jdbc/mysql/chatroom);conn = ds.getConnection()

13、;stmt = conn.createStatement(); catch (Exception e) e.printStackTrace();/執(zhí)行靜態(tài)SQL查詢語句并返回它所生成結果的對象public ResultSet executeQuery(String sql) throws SQLException rs = null;try rs = stmt.executeQuery(sql);catch (SQLException ex) System.out.println(Error occured when query database: + ex); throw ex;return

14、 rs;執(zhí)行靜態(tài)SQL更新語句并返回影響數(shù)據(jù)條數(shù)public int executeUpdate(String sql) throws SQLExceptiontry conn.setAutoCommit(false);int re = stmt.executeUpdate(sql);mit();return re;catch (SQLException e) conn.rollback();System.out.println(Error occured when update database: + e); throw e; 數(shù)據(jù)庫關閉操作public boolean closeDB()

15、throws Exceptiontry if (this.rs != null)rs.close();if (this.stmt != null)this.stmt.close();if (this.ps != null)this.ps.close();if (this.conn != null) conn.close();if (this.initCtx != null)initCtx.close();return true;catch (SQLException e) System.out.println(Error occured when close database: + e); t

16、hrow e;2用戶登錄及注冊模塊使用的技術組件:JSP2.1登錄注冊界面實現(xiàn):login.jsp使用的技術組件:JSP代碼設計框圖如圖所示:聊天用戶注冊/登錄昵稱:密珂口管理員登錄找回密碼a .hPfSbaich.jsp-x.hg找回密碼巳口口口七 ./檢測是否注冊成功 注冊成功 /檢測用戶名是否正確用戶名或密碼錯誤.請重新輸入%2.2如果是注冊,進入注冊頁面regist.jsp2.2.1注冊框圖如圖所示:跳轉代碼:Check_login.Javaif(login.equals(regist)request.getRequestDispatcher(7regist.jsp).forward(

17、request,response);用戶注冊昵稱:密碼:| 口311暗12.2.2從 request中檢查是否用戶名已經(jīng)存在, 用戶名已被使用 后臺處理:Check_login.Javaif(login.equals()try BaseConnection bc=new BaseConnection();String name=request.getParameter(nickName);String query =select * from player;rs=bc.executeQuery(query);while(rs.next()if(rs.getString(1).equals(na

18、me)request.setAttribute(check”,false);request.getRequestDispatcher(/regist.jsp).forward(request,response);String pass=request.getParameter(userPassword);query =insert into player(nickname,password) values(+name+,+pass+); bc.executeUpdate(query);bc.closeDB();catch (Exception e) e.printStackTrace(); o

19、ut.print(regist failed); request.setAttribute(login”, true);request.getRequestDispatcher(/login.jsp).forward(request,response);2.3找回密碼界面實現(xiàn)Search.jsp2.3.1實現(xiàn)框圖如圖所示:跳轉代碼:login.jsp找回密碼 發(fā)送郵件用戶昵稱: 匡15接收,站2茴.2發(fā)送代碼:SendMail.Javaprotected void processRequest(HttpServletRequest request, HttpServletResponse re

20、sponse)throws ServletException, lOException response.setContentType(text/html;charset=UTF-8”);PrintWriter out = response.getWriter();String query = select * from player;String host= ;String name = request.getParameter(username);String text=No such person;ResultSet rs=null;try BaseConnection bc=new B

21、aseConnection();rs=bc.executeQuery(query);while(rs.next()if(rs.getString(nickName).equals(name)text=rs.getString(password);break;catch(Exception e)e.printStackTrace();tryProperties props = new Properties();props.put(mail.smtp.host”, host); 設置協(xié)議所使用的 hostSession session = Session.getInstance(props,nul

22、l);/獲得 Session 對象MimeMessage message = new MimeMessage(session); 獲得message對象mailmessage.setFrom(newInternetAddress( HYPERLINK mailto:Rua Rua); message.setRecipient(Message.RecipientType.TO,newInternetAddress( HYPERLINK mailto:Ruage Ruage); message.setSubject(Search password);message.setSentDate(new

23、Date();message.setText(text);Transport.send(message);request.setAttribute(send”, true);request.getRequestDispatcher(Search.jsp).forward(request, response); catch(MessagingException m)m.printStackTrace(); finally out.close();2.3.3 接收郵件 ReceiveMail.javaprotected void processRequest(HttpServletRequest

24、request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8”);PrintWriter out = response.getWriter();String host = ;String protocol =pop3;String user=Ruage;String password = ruage;out.println();out.println();out.println(Servlet ReceiveM

25、ail);out.println();out.println()trySession ses = Session.getDefaultInstance(System.getProperties(),null);Store store = ses.getStore(protocol); 設置protocol,獲得store對象 store.connect(host,user,password);Folder folder = store.getFolder(INBOX);folder.open(Folder.READ_WRITE);Message arraymessage = folder.ge

26、tMessages();for(int i=0; iarraymessage.length; i+) MimeMessage mm = (MimeMessage)arraymessagei;int number = mm.getMessageNumber();String subject = mm.getSubject();Date date = mm.getReceivedDate();Address address = mm.getFrom();String from-;for(int j=0;jaddress.length;j+) from+=addressj.toString();St

27、ring content - mm.getContent().toString();/Object 轉 String out.println(*); out.println(Message No:+number+ );out.println(Subject:+subject+”);out.println(Received Date:+date+);out.println(From:+from+”);out.println(Content:+content+”);out.print( 返回 );out.println();out.println();Message No:3Subject:Sea

28、rch passwordReceived Date mullF順瞰岫.貳u a.co m檢查是否是登陸,如果是是登陸是不是管理員登陸if(login.e業(yè)al#log!n)C o iiteiit:666666返回if(owner!=null) /owner是取得的判斷是否是管理員的checkbox的值 String name=request.getParameter(nickName);返回String pass=request.getParameter(userPassword); if(name.equals(admin)&pass.equals(admin) HttpSession se

29、ssion = request.getSession(); session.setAttribute(checkFilter”, true);request.getRequestDispatcher(7manage.jsp).forward(request,response);elserequest.setAttribute(checklogin”,false);request.getRequestDispatcher(/login.jsp).forward(request,response); elserequest.getRequestDispatcher(/check.jsp).forw

30、ard(request,response);2.4.2如果是用戶登錄調用check.jsp檢查用戶名密碼是否正確,在check.jsp將調用 javaBeanjsp:setProperty name=check property=username value=/jsp:setProperty name=check property=password value=/ JavaBean 實現(xiàn) loginCheckBean.javapublic class loginCheckBean private String username;private String password;public bo

31、olean check_login() 從數(shù)據(jù)庫取出數(shù)據(jù)boolean temp=false;ResultSet rs = null;try BaseConnection bc=new BaseConnection();String query =select * from player;rs=bc.executeQuery(query);while(rs.next()if(rs.getString(1).equals(username)&rs.getString(2).equals(password)temp=true;break;bc.closeDB();catch (Exception

32、e) e.printStackTrace(); return temp;public int add() /向在線用戶數(shù)據(jù)表中插入數(shù)據(jù)int temp=0;java.util.Date date=new java.util.Date();try BaseConnection bc=new BaseConnection();String query =INSERT INTO onlineuser ( nickName, loginTime) VALUES (,+username+,,+date+,);temp=bc.executeUpdate(query);bc.closeDB();catch

33、(Exception e) e.printStackTrace(); return temp;2.5登錄過濾:SecureFilter.java (主要代碼)這是一個過濾器,如果用戶未登錄,直接通過網(wǎng)址輸入聊天網(wǎng)址將不會通過。使用技術組件為filterpublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws lOException, ServletException HttpServletRequest hRequest=(HttpServletRequest)r

34、equest;HttpSession session = hRequest.getSession();if(session.getAttribute(checkFilter)!=null)if(!(session.getAttribute(checkFilter).equals(true)request.getRequestDispatcher(7login.jsp).forward(request, response); 3.聊天室模塊 3.1聊天室界面,信息輸入界面chatroom.jsp / 用于提供像素 對像素處理 window.setInterval(showContent();,1

35、000);var sysBBS=歡迎光臨開心聊天室,請遵守聊天室規(guī)則,不要使 用不文明用語。;function showContent()varloader1=newnet.AjaxRequest(MessagesAction?action=getMessages&nocache=+newDate().getTime(),deal_content,onerror,GET); function deal_content()var returnValue=this.req.responseText; /獲取 Ajax 處理頁的返回值var h=returnValue.replace(/s/g,);

36、/去除字符串中的 Unicode 空白符content.innerHTML=sysBBS+returnValue+; /控制是否滾屏 function checkScrollScreen()if(!form1.scrollScreen.checked)document.getElementById(content).style.overflow=scroll;elsedocument.getElementById(content).style.overflow=hidden;document.getElementById(content).scrollTop =document.getElem

37、entById(content).scrollHeight*2; window.onload=function()checkScrollScreen();/當頁面載入后控制是否滾屏showContent();/當頁面載入后顯示聊天內容 / /聊天信息輸入欄 function send() /驗證聊天信息并發(fā)送if(form1.to.value=) alert(請選擇聊天對象! );return false; if(form1.content1.value=)alert(發(fā)送信息不可以為空! );form1.content1.focus();return false; if(form1.isPr

38、ivate.checked) isPrivate=true; elseisPrivate=false;Varparam=from=+form1.from.value+&face=+form1.face.value+&color=+form1.color.value+&to=+form1 .to.value+&content=+form1.content1.value+&isPrivate=+isPrivate;Var loader=new net. AjaxRequest(MessagesAction?action=sendMessage,deal_send,onerror,POST,para

39、m);function deal_send()content.innerHTML=sys BBS+this.req.responseText+;if(form1.scrollScreen.checked)document.getElementById(content).scrollTop= document.getElementById(content).scrollHeight*2; form1.content1.value=;function Exit()window.location.href=leave.jsp;alert(歡迎您下次光臨!);function set(selectPe

40、rson) / 自動添加聊天對象if(selectPerson!=)if(form1.isPrivate.checked & selectPerson=所有人)alert(請選擇私聊對象!);elseform1.to.value=selectPerson;elsealert(請重新選擇聊天對象!);function checkIsPrivate()if(form1.isPrivate.checked)if(form1.to.value=所有人|form1.to.value=)alert(請選擇私聊對象!);form1.to.value=;window.onbeforeunload=functi

41、on()/當用戶單擊瀏覽器中的“關閉”按鈕時,執(zhí)行退出操作if(event.clientYdocument.body.scrollWidth)Exit();執(zhí)行退出操作毆迎光臨開慢聊天室,請豆守聊天室規(guī)則,.不要使用不文明用語。系統(tǒng)公告:Angel進入了聊天室,大家歡迎毆迎光臨開慢聊天室,請豆守聊天室規(guī)則,.不要使用不文明用語。系統(tǒng)公告:Angel進入了聊天室,大家歡迎系統(tǒng)公告:Davie進入了聊天室,大家歡迎Davie 對 Angel 說:Hello,Angel.Angel 對所有人說:hello,everyone.I am new here.Davie 對 Angel 說:Angel,se

42、e you again.Davi e 對Davi e 對表暗微笑者 說:悄悄活 滾屏W字體顏色:默認顏色退出聊天室我們的開心聊天室 登錄時間:Sun Jan 10 18:56:45 CST 20103.1.1導入在線用戶:ChatRoom.jsp運用JSTL3.2顯示在線用戶online.jsp如上圖紅色框區(qū)域0)String username=;amount=vector.size();for(int i=0;i設置在線用戶set函數(shù)在ChatRoom.jsp中實現(xiàn)a href=# onclick=set()后臺處理:UserInfo.javapublic Vector getList()t

43、his.vector = new Vector(); /vector 是向量是該類屬性String query = select nickName from onlineuser;ResultSet rs=null;try BaseConnection bc=new BaseConnection();rs=bc.executeQuery(query);while(rs.next()String ss=rs.getString(nickName);addUser(ss);catch(Exception e)e.printStackTrace();return vector;/增加用戶public

44、 boolean addUser(String user) if (user != null) this.vector.add(user);return true;else return false;3.2.2監(jiān)聽是否有用戶上下線UserListenerjavapublic class UserListener implements javax.servlet. HYPERLINK http:/http.HttpSessionBindingListener http.HttpSessionBindingListener private String user;private UserInfo

45、container = UserInfo.getInstance();public UserListener() user =;/設置在線監(jiān)聽人員public void setUser(String user) this.user = user;/獲取在線監(jiān)聽public String getUser() return this.user;/當Session有對象加入時執(zhí)行的方法public void valueBound(HttpSessionBindingEvent arg0) System.out.println(上線用戶:+ this.user);/當Session有對象移除時執(zhí)行的方

46、法public void valueUnbound(HttpSessionBindingEvent arg0) System.out.println(下線用戶:+ this.user);if (user != ) (container.removeUser(user);3.3導入在線用戶:ChatRoom.jsp 聊天內容 3.3.1顯示聊天內容Content.jsp3.3.2后臺處理聊天內容MessagesAction.java聊天內容放在xml文件中public void doPost(HttpServletRequest request, HttpServletResponse resp

47、onse)String action = request.getParameter(action);if (getMessages”.equals(action) /從 XML 文件中讀取聊天信息this.getMessages(request, response); else if (sendMessage”.equals(action) / 發(fā)送聊天信息this.sendMessages(request, response); else if (loginRoom”.equals(action) / 登錄時,寫入系統(tǒng)公告this.loginRoom(request, response);/

48、讀取保存聊天信息的XML文件public void getMessages(HttpServletRequest request,HttpServletResponse response) response.setContentType(text/html;charset=GBK);String fileURL = createFile(request, response); / 當文件不存在時創(chuàng)建該文件 /開始解析保存聊天內容的XML文件 /try SAXBuilder builder = new SAXBuilder();Document feedDoc = builder.build(f

49、ileURL);Element root = feedDoc.getRootElement();/ 獲取根節(jié)點Element channel = root.getChild(messages);/獲取 messages 節(jié)點Iterator items = channel.getChildren(message).iterator();/獲取 message 節(jié),點String messages =; /獲取當前用戶HttpSession session = request.getSession();String userName =;userName = session.getAttribu

50、te(username).toString();DateFormat df = DateFormat.getDateTimeInstance();while (items.hasNext() Element item = (Element) items.next(); try if (df.parse(sendTime).after(df.parse(session.getAttribute(loginTime).toString()| sendTime.equals(session.getAttribute(loginTime).toString() String from = item.g

51、etChildText(from);/ 獲取發(fā)言人String face = item.getChildText(face);/ 獲取表情String to = item.getChildText(to);/ 獲取接收者String content = item.getChildText(content);/獲取發(fā)言內容boolean isPrivate = Boolean.valueOf(item.getChildText(isPrivate);if (isPrivate) /獲取私聊內容if (userName.equals(to) | userName.equals(from) mess

52、ages += 私人對話+from+ + face+ 對+ to+ 說:+ content+ + sendTime + ; else if (系統(tǒng)公告.equals(from) /獲取系統(tǒng)公告信息messages +=系統(tǒng)公告:+ content+ + sendTime + ; else /獲取普通發(fā)言信息messages += + from+ + face + 對 + to+ 說:+ content+ + sendTime + ; catch (Exception e) System.out.println( + e.getMessage();request.setAttribute(mes

53、sages, messages); /保存獲取的聊天信息request.getRequestDispatcher(content.jsp).forward(request,response); catch (Exception e) e.printStackTrace(); /發(fā)送聊天信息 public void sendMessages(HttpServletRequest request,HttpServletResponse response)response.setContentType(text/html;charset=GBK);StringUtils su = new Strin

54、gUtils();Random random = new Random();String from = su.toUTF8(request.getParameter(from);/ 發(fā)言人String face = su.toUTF8(request.getParameter(face);/ 表情String to = su.toUTF8(request.getParameter(to);/ 接收者String color = request.getParameter(color);/ 字體顏色String content = su.toUTF8(request.getParameter(co

55、ntent);/ 發(fā)言內容String isPrivate = request.getParameter(isPrivate);/ 是否為悄悄話String sendTime = new Date().toLocaleString();/ 發(fā)言時間/*開始添加聊天信息/*開始添加聊天信息*/String fileURL = createFile(request, response); / 當文件不存在時創(chuàng)建該文件SAXBuilder builder = new SAXBuilder();Document feedDoc; try feedDoc = builder.build(fileURL)

56、;Element root = feedDoc.getRootElement();Element channel = root.getChild(messages);Element newNode = new Element(message);channel.addContent(newNode);/ 創(chuàng)建 messages 節(jié)點Element fromNode = new Element(HfromH).setText(from);newNode.addContent(fromNode);/ 添加發(fā)言人子節(jié)點Element faceNode = new Element(face).setTe

57、xt(face);newNode.addContent(faceNode);/ 添加表情子節(jié)點Element toNode = new Element(to).setText(to);newNode.addContent(toNode);/ 添加接收者子節(jié)點Element contentNode = new Element(HcontentH).setText(H + content + );newNode.addContent(contentNode);/ 添加聊天內容子節(jié)點/ System.out.println(發(fā)送的信息:+from+face+to+content);Element i

58、sPrivateNode = new Element(isPrivate).setText(isPrivate);newNode.addContent(isPrivateNode);/ 添加是否為悄悄話子節(jié)點request.getRequestDispatcher(MessagesAction?action=getMessages&nocache=+ random.nextInt(10000).forward(request, response);XMLOutputter xml = new XMLOutputter(Format.getPrettyFormat();xml.output(fe

59、edDoc, new FileOutputStream(fileURL); catch (Exception e) e.printStackTrace();/根據(jù)現(xiàn)在日期生成XML文件名,并判斷該文件是否存在,如果不存在將創(chuàng)建該文件public String createFile(HttpServletRequest request,HttpServletResponse response) Date date = new Date();String newTime = new SimpleDateFormat(yyyyMMdd).format(date);String fileURL = r

60、equest.getRealPath(xml/ + newTime + .xml);File file = new File(fileURL);if (!file.exists() /判斷文件是否存在,如果不存在,則創(chuàng)建該文件try file.createNewFile(); / 創(chuàng)建文件String dataStr = rn;dataStr = dataStr + rn;dataStr = dataStr + ;dataStr = dataStr + rn;byte content = dataStr.getBytes();FileOutputStream fout = new FileOu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論