国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何用 javaweb來寫在線聊天應用

開發 后端
  寫這個玩意兒就是想練練手, 用戶需要登陸才能在線聊天,不要依賴數據庫, 不需要數據庫的操作, 所有的數據都是保存在內存中, 如果服務器一旦重啟,數據就沒有了;

寫這個玩意兒就是想練練手, 用戶需要登陸才能在線聊天,不要依賴數據庫, 不需要數據庫的操作, 所有的數據都是保存在內存中, 如果服務器一旦重啟,數據就沒有了;

登錄界面:

  

聊天界面:

  

左側是在線的用戶列表, 右側是聊天的內容, 內容的格式為 “作者 : 內容”;

點擊button可以發布聊天信息;

使用的是spring搭建的框架,基于tomcat的服務器;

web.xml的配置如下:

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app version="3.0"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
  7.   <display-name></display-name>     
  8.   <welcome-file-list> 
  9.     <welcome-file>index.htm</welcome-file> 
  10.   </welcome-file-list> 
  11.    
  12.   <servlet> 
  13.     <servlet-name>test</servlet-name> 
  14.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class
  15.     <load-on-startup>1</load-on-startup> 
  16.     </servlet> 
  17.  
  18.     <servlet-mapping> 
  19.     <servlet-name>test</servlet-name> 
  20.     <url-pattern>*.htm</url-pattern> 
  21.     </servlet-mapping> 
  22.  
  23.     <listener> 
  24.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class
  25.     </listener> 
  26.      
  27.     <filter> 
  28.         <filter-name>CharacterEncodingFilter</filter-name> 
  29.         <filter-class>com.nono.Filter.CharacterEncodingFilter</filter-class
  30.         <init-param> 
  31.             <param-name>encoding</param-name> 
  32.             <param-value>UTF-8</param-value> 
  33.         </init-param> 
  34.     </filter> 
  35.      
  36.     <filter>   
  37.         <filter-name>SecurityServlet</filter-name>   
  38.         <filter-class>com.nono.SecurityServlet</filter-class>   
  39.     </filter>   
  40.     <filter-mapping>   
  41.         <filter-name>SecurityServlet</filter-name>   
  42.         <url-pattern>*.htm</url-pattern>   
  43.     </filter-mapping> 
  44.      
  45.  
  46.     <!--  
  47.         使用Spring中的過濾器解決在請求和應答中的中文亂碼問題  
  48.     <filter> 
  49.         <filter-name>characterEncodingFilter</filter-name> 
  50.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class
  51.         <init-param> 
  52.             <param-name>encoding</param-name> 
  53.             <param-value>utf-8</param-value> 
  54.         </init-param> 
  55.         <init-param> 
  56.                 強制轉換編碼(request和response均適用)  
  57.             <param-name>ForceEncoding</param-name> 
  58.             <param-value>true</param-value> 
  59.         </init-param> 
  60.     </filter> 
  61.     --> 
  62.     
  63.     <context-param> 
  64.         <param-name> 
  65.         contextConfigLocation 
  66.         </param-name> 
  67.         <param-value> 
  68.         /WEB-INF/test-servlet.xml 
  69.         </param-value> 
  70.     </context-param> 
  71. </web-app> 

 

conteConfigLocation的配置為:

 

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
  4.  xmlns:context="http://www.springframework.org/schema/context" 
  5.  xmlns:aop="http://www.springframework.org/schema/aop" 
  6.  xmlns:tx="http://www.springframework.org/schema/tx" 
  7.  xmlns:mvc="http://www.springframework.org/schema/mvc" 
  8.  xmlns:task="http://www.springframework.org/schema/task" 
  9.  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  10.       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  11.       http://www.springframework.org/schema/context 
  12.       http://www.springframework.org/schema/context/spring-context-3.0.xsd 
  13.       http://www.springframework.org/schema/tx 
  14.       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
  15.       http://www.springframework.org/schema/aop 
  16.       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
  17.       http://www.springframework.org/schema/mvc 
  18.       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
  19.       http://www.springframework.org/schema/task 
  20.       http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 
  21.      
  22.  
  23.     <context:annotation-config> </context:annotation-config> 
  24.     <context:component-scan base-package="com.nono" > </context:component-scan> 
  25.      
  26.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  27.         <property name="suffix"
  28.             <value>.jsp</value> 
  29.         </property> 
  30.     </bean> 
  31. </beans> 

整個項目的結構為一個主路由, 四個po層,  兩個過濾器:

  

 

界面的用戶列表和用戶內容列表用了ajax刷新, 感覺不錯的說:

 

  1. <!-- 
  2.     修改pageEncoding為 utf-8 
  3.  --> 
  4. <%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%> 
  5. <% 
  6. String path = request.getContextPath(); 
  7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
  8. %> 
  9.  
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  11. <html> 
  12.   <head> 
  13.     <base href="<%=basePath%>"
  14.      
  15.     <title>login</title> 
  16.     <meta charset="utf-8"
  17.     <link href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"
  18.     <script src="http://cdn.bootcss.com/jquery/1.9.0/jquery.js"></script> 
  19.   </head> 
  20.   <style> 
  21.       html,body,.bg{ 
  22.           height:100%; 
  23.       } 
  24.       .bg{ 
  25.           background:url(imgs/bg.jpeg); 
  26.       } 
  27.   </style> 
  28.   <body> 
  29.         <div class="container-fuild bg"
  30.             <div class="row"
  31.                 <div class="col-sm-4"
  32.                     <div class="page-header"
  33.                         <h2> 
  34.                             list 
  35.                         </h2> 
  36.                         <ol id="list"
  37.                             <li>name—</li> 
  38.                             <li>name—</li> 
  39.                             <li>name—</li> 
  40.                             <li>name—</li> 
  41.                         </ol> 
  42.                     </div> 
  43.                 </div> 
  44.                 <div class="col-sm-8"
  45.                         <h2> 
  46.                             content 
  47.                         </h2> 
  48.                     <div id="con" class="page-header"
  49.                       <p> 
  50.                           <b>haha:</b> 
  51.                           <big> 
  52.                               say someting 
  53.                           </big> 
  54.                       </p> 
  55.                       <p> 
  56.                           <b>haha:</b> 
  57.                           <big> 
  58.                               say someting 
  59.                           </big> 
  60.                       </p> 
  61.                     </div> 
  62.                     <form> 
  63.                       <div class="form-group"
  64.                         <label for="text">enter text</label> 
  65.                         <input type="text" id="answer" class="form-control" id="text" placeholder="text"
  66.                       </div> 
  67.                       <button type="button" id="sb" class="btn btn-default">Submit</button> 
  68.                     </form> 
  69.                 </div> 
  70.             </div> 
  71.         </div> 
  72.         <script> 
  73.             $("#sb").click(function() { 
  74.                 $.post("chat.htm""content="+ $("#answer").val(), function(data) { 
  75.                     console.log(data); 
  76.                 }); 
  77.             }); 
  78.              
  79.             function Get(url , el, fn) { 
  80.                 this.post = function() { 
  81.                     $.post(url, function(data) { 
  82.                         data = JSON.parse(data); 
  83.                         var html = ""
  84.                         $.each(data,function(i, e) { 
  85.                             html += fn(i,e); 
  86.                         }); 
  87.                         $(el).html( html ); 
  88.                     }); 
  89.                 }; 
  90.             }; 
  91.              
  92.             (function() { 
  93.              
  94.                 var list = new Get("getList.htm""#list", function(i, e) { 
  95.                     return  "<li>" + e.name + "</li>"
  96.                 }); 
  97.                  
  98.                 var content =  new Get("getContent.htm""#con", function(i, e) { 
  99.                     return "<p><b>"+ e.name +" : </b><big>"+ e.content +"</big></p>"
  100.                 }); 
  101.                  
  102.                 setInterval(function() { 
  103.                     list.post(); 
  104.                     content.post(); 
  105.                 },1000); 
  106.                  
  107.             })(); 
  108.         </script> 
  109.   </body> 
  110. </html> 

 

權限控制的話我們可以用到fileter:

 

  1. package com.nono; 
  2.  
  3. import java.io.IOException; 
  4. import javax.servlet.Filter; 
  5. import javax.servlet.FilterChain; 
  6. import javax.servlet.FilterConfig; 
  7. import javax.servlet.ServletException; 
  8. import javax.servlet.ServletRequest; 
  9. import javax.servlet.ServletResponse; 
  10. import javax.servlet.http.HttpServlet; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import javax.servlet.http.HttpServletResponse; 
  13. import javax.servlet.http.HttpSession; 
  14.  
  15. import com.nono.po.User; 
  16.  
  17. public class SecurityServlet extends HttpServlet implements Filter { 
  18.     private static final long serialVersionUID = 1L; 
  19.  
  20.     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { 
  21.            HttpServletRequest request=(HttpServletRequest)arg0;    
  22.            HttpServletResponse response  =(HttpServletResponse) arg1;     
  23.            HttpSession session = request.getSession(); 
  24.            User user = (User) session.getAttribute("user"); 
  25.            String url=request.getRequestURI();    
  26.            //如果用戶信息不是空的, 或者要訪問的是登陸的界面(get,post的方式包含了login字符串); 
  27.            if( user!=null  || url.indexOf("login")>-1 ) { 
  28.                arg2.doFilter(arg0, arg1);    
  29.                return
  30.            }else
  31.                //余下的全跳到登陸界面 
  32.                response.sendRedirect(request.getContextPath() + "/login.htm"); 
  33.                return
  34.            } 
  35.     } 
  36.     public void init(FilterConfig arg0) throws ServletException { 
  37.     } 
  38.  

 

 路由控制和服務放到了一起, 因為權限控制使用過濾器處理, 所以在路由里面我們就不用關心用戶的消息, 只要處理業務邏輯就好了:

 

  1. package com.nono.Controller; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.HashMap; 
  5. import java.util.Vector; 
  6.  
  7. import javax.jms.Session; 
  8. import javax.print.DocFlavor.STRING; 
  9. import javax.print.attribute.HashAttributeSet; 
  10. import javax.servlet.http.HttpServletRequest; 
  11. import javax.servlet.http.HttpServletResponse; 
  12. import javax.servlet.http.HttpSession; 
  13.  
  14. import net.sf.json.JSONArray; 
  15.  
  16. import org.omg.CORBA.PUBLIC_MEMBER; 
  17. import org.springframework.beans.factory.annotation.Autowired; 
  18. import org.springframework.stereotype.Controller; 
  19. import org.springframework.web.bind.annotation.RequestMapping; 
  20. import org.springframework.web.bind.annotation.RequestMethod; 
  21. import org.springframework.web.bind.annotation.ResponseBody; 
  22.  
  23. import com.nono.po.Content; 
  24. import com.nono.po.Contents; 
  25. import com.nono.po.User; 
  26. import com.nono.po.Users; 
  27.  
  28. @Controller 
  29. public class MainController { 
  30.     //用戶和用戶組; 
  31.     @Autowired 
  32.     Users users; 
  33.      
  34.     @Autowired 
  35.     Contents contents; 
  36.      
  37.     @RequestMapping(value="login", method=RequestMethod.GET) 
  38.     public String login (HttpServletRequest request) { 
  39.         return "login"
  40.     } 
  41.  
  42.      
  43.     @RequestMapping(value="login", method=RequestMethod.POST) 
  44.     public String loginPOST ( HttpServletRequest request, HttpServletResponse response ) { 
  45.          
  46.         String string = "login"
  47.         String name = (String) request.getParameter("name"); 
  48.         Boolean flag = true
  49.         //如果名字不是空的話; 
  50.         if( !name.equals("") ) { 
  51.             Vector vector = users.getList(); 
  52.             for(int i=0; i< vector.size(); i++) { 
  53.                 User user = (User) vector.elementAt(i); 
  54.                 if( user.getName().equals( name ) ) { 
  55.                     flag = false
  56.                 }; 
  57.             }; 
  58.         }; 
  59.          
  60.         //用戶名不存在 
  61.         if( flag ) { 
  62.             User user = new User(); 
  63.             user.setName( name ); 
  64.             HttpSession session = request.getSession(true); 
  65.             //設置Session的過期時間為10分鐘 
  66.             session.setMaxInactiveInterval(600); 
  67.             //設置seesion中的用戶信息; 
  68.             session.setAttribute("user", user); 
  69.             //添加用戶; 
  70.             users.addUser( user ); 
  71.              
  72.             //加入的提示; 
  73.             Content content = new Content(); 
  74.             content.setName( name ); 
  75.             content.setContent( "enter the chat room!" ); 
  76.             contents.addContent( content  ); 
  77.              
  78.             string = "chat"
  79.             return string; 
  80.         }else
  81.             //用戶名已經存在 
  82.             request.setAttribute("info""用戶名已經存在1"); 
  83.             string = "login"
  84.             return string; 
  85.         } 
  86.     } 
  87.      
  88.     @RequestMapping(value="chat", method=RequestMethod.GET) 
  89.     public String main (HttpServletRequest request) { 
  90.         String string = "chat"
  91.         return string; 
  92.     } 
  93.      
  94.     @RequestMapping(value="chat", method=RequestMethod.POST) 
  95.     @ResponseBody 
  96.     public String chat(HttpServletRequest request) { 
  97.         String string = (String) request.getParameter("content"); 
  98.         HttpSession session = request.getSession(); 
  99.         //設置seesion中的用戶信息; 
  100.         User user = (User) session.getAttribute("user"); 
  101.         String name = user.getName(); 
  102.         Content content = new Content(); 
  103.         content.setName( name ); 
  104.         content.setContent( string ); 
  105.         contents.addContent( content  ); 
  106.         return "true"
  107.     } 
  108.      
  109.     @RequestMapping(value="getList", method=RequestMethod.POST, produces = "text/html;charset=UTF-8"
  110.     @ResponseBody 
  111.     public String getList( HttpServletRequest request) { 
  112.         return JSONArray.fromObject( users.getList() ).toString(); 
  113.     } 
  114.      
  115.     @RequestMapping(value="getContent", method=RequestMethod.POST, produces = "text/html;charset=UTF-8"
  116.     @ResponseBody 
  117.     public String getArrayList() { 
  118.         ArrayList list = (ArrayList) contents.getContents(); 
  119.         ArrayList result = new ArrayList(); 
  120.         forint i= 0; i< list.size(); i++ ) { 
  121.             HashMap<String,String> hashMap = new HashMap(); 
  122.             hashMap.put("name", ((Content)list.get(i)).getName()); 
  123.             hashMap.put("content", ((Content)list.get(i)).getContent()); 
  124.             result.add( hashMap ); 
  125.         }; 
  126.         return JSONArray.fromObject( result ).toString(); 
  127.     } 
  128.      

 

有哪位大神告訴我為什么中文各種亂碼, 在界面中的utf-8也設置, @ResponseBody的也設置了, 還是亂碼, encodeURIComponent過的也是亂碼, 坑爹啊;

責任編輯:王雪燕 來源: 博客園
相關推薦

2021-11-16 14:25:38

JavaScript前端

2016-09-14 21:17:47

PythonAsyncio游戲

2016-09-22 21:12:14

2016-09-19 21:24:08

PythonAsyncio游戲

2013-06-07 09:57:21

iPaaSSaaS集成iPaaS解決方案

2012-05-21 10:19:31

Hadoop

2011-09-28 11:22:52

Hadoop

2013-02-22 09:28:45

MEAP軟件移動應用開發HTML5

2019-06-04 08:00:00

機器人聊天機器人人工智能

2014-06-04 13:19:29

C++ndk安卓開發

2014-06-10 15:07:19

Oracle數據庫優化

2011-12-31 14:24:13

2025-03-31 09:30:52

2023-04-13 21:59:44

ChatGPT聊天機器人

2009-06-15 10:21:07

基于JBossMBean

2025-05-09 08:34:57

RSocketSpringBoot聊天系統

2020-01-09 09:43:12

Signal聊天應用開源

2017-06-07 23:33:01

應用程序熱補丁代碼

2015-10-12 16:45:26

NodeWeb應用框架

2023-12-21 08:00:00

ChatGPT人工智能大型語言模型
點贊
收藏

51CTO技術棧公眾號

成人av资源在线观看| 久久看人人摘| 欧美大胆的人体xxxx| 国产女优裸体网站| 日韩毛片在线免费看| 日韩在线三区| 好看的日韩精品视频在线| 国产综合视频在线观看| 91精品国产成人| 裸体女人亚洲精品一区| 国产亚洲欧美日韩一区二区| 欧美v日韩v国产v| 欧美精品一级二级三级| 色偷偷成人一区二区三区91| 亚洲综合色噜噜狠狠| 亚洲色图视频免费播放| 国产精品沙发午睡系列990531| 久久亚区不卡日本| 94色蜜桃网一区二区三区| caoporm超碰国产精品| 青椒成人免费视频| 亚洲精品国产欧美| 国产在线视频一区| 国产xxxxx视频| 色资源网在线观看| 欧美视频亚洲视频| 欧美精品momsxxx| 少妇久久久久| 国产欧美一区二区三区米奇| 写真福利精品福利在线观看| 日韩在线视频一区| 日本道免费精品一区二区三区| 五月天网站亚洲| 亚洲三级小视频| 成人免费视频77777| 欧美一区二区三区激情视频| 欧美天堂社区| 国产亚洲欧美日韩在线一区| 国产精品一级片| 丰满少妇久久久久久久| 99国产精品国产精品久久| 久久你懂得1024| 国产精品午夜电影| 一区二区三区在线视频播放| 婷婷综合另类小说色区| 在线视频一区二区三区| 欧美一级久久久| 日韩精品在线第一页| 综合激情国产一区| 韩国视频理论视频久久| 国产精品成人免费视频| 99久久伊人精品影院| 欧美18视频| 在线视频精品一区| 阿v天堂2017| 先锋影音成人资源| 欧美性猛交7777777| 中文字幕在线观看日本| 黄色大片在线播放| 欧美xo影院| 97久久综合精品久久久综合| av亚洲在线观看| 99精品国产一区二区青青牛奶| 久久精品国产99| 久久综合久久99| 一区二区三区 在线观看视频| 色播五月激情综合网| 精品成人免费观看| 久久人人爽亚洲精品天堂| 欧美中文字幕视频在线观看| 亚洲中国色老太| 亚洲精品视频一二三| 黄色免费观看视频网站| 午夜影院免费播放| 欧美r级在线| 欧美性www| 国产精品探花在线观看| 亚洲精品1区| 国产成人午夜高潮毛片| 亚洲欧洲中文日韩久久av乱码| 欧美亚洲精品一区| 伊是香蕉大人久久| 国产精品爱啪在线线免费观看| 美国av一区二区三区| 日韩亚洲欧美视频| 在线免费观看色| 国产高清在线a视频大全| 玖玖精品一区| 欧美 日韩 国产 一区| 国产一区二区三区四区在线观看 | 欧美美乳视频| 99综合视频| 白白色 亚洲乱淫| 亚洲成人资源在线| 亚洲精品国产电影| 2023亚洲男人天堂| 欧美婷婷久久| 男女无套免费视频网站动漫| av在线免费一区| 男人亚洲天堂| 欧美影院一区| 99在线视频精品| 91国偷自产一区二区开放时间 | 91最新在线视频| 麻豆国产一区| 亚洲国产高清一区| 26uuu另类欧美亚洲曰本| 色狠狠一区二区| 久久精品国产欧美激情| 国产成人免费观看| 99999精品视频| a√在线中文网新版址在线| 欧美黄色成人| 在线看片一区| 国产欧美一区二区三区在线看蜜臀 | 亚洲激情视频在线播放| 欧美亚洲在线观看| 亚洲高清在线播放| 国产黄色一级电影| 美女视频在线免费| 日韩精品中文字幕第1页| 国v精品久久久网| 福利二区91精品bt7086| 依依成人综合视频| 欧美国产大片| 久久夜色撩人精品| 中文字幕精品在线| 99精品国产高清一区二区| 97成人在线免费视频| 不卡在线视频| 影音先锋欧美激情| 日日摸夜夜添夜夜添亚洲女人| 一区在线中文字幕| 亚洲精品色婷婷福利天堂| 亚洲影影院av| 无需播放器的av| 欧美伦理91| 女同性一区二区三区人了人一| 国产日韩欧美激情| 日韩久久精品电影| 波多野结衣成人在线| 中文字幕第100页| 性感女国产在线| 欧美三区不卡| ...xxx性欧美| 最近2019年手机中文字幕| 蜜桃成人在线| 在线中文字幕视频| 国产精品极品| 国产盗摄视频一区二区三区| 欧美日韩成人在线| 国产原创欧美精品| 偷窥自拍亚洲色图| 日韩成人综合网| 蜜臀久久久99精品久久久久久| 色94色欧美sute亚洲线路一ni| 国产99在线|中文| 88av.com| 91欧美精品| 欧美a一区二区| 在线看不卡av| 国产精品影片在线观看| 66av99| 亚洲成人毛片| 国产在线一区观看| 日韩视频在线一区二区| 都市激情久久久久久久久久久| 日韩毛片视频在线看| 性久久久久久久久| 97精品国产97久久久久久春色| 97在线国产视频| 91破解版在线观看| 黄色免费在线看| 午夜欧美在线| 亚洲精品乱码久久久久久黑人 | 黄色网址免费在线观看| 亚洲欧美色图| 午夜精品成人在线视频| 日韩av不卡在线| 亚洲高清免费在线观看| 国产午夜精品一区在线观看| 高清shemale亚洲人妖| 亚洲美女自拍视频| 一区二区三区av在线| 尤物网址在线观看| 国自产拍偷拍福利精品免费一| 欧美日韩国产页| 成人国产精品一区二区| 中文字幕在线看| 欧美高清视频在线观看mv| 亚洲第一综合色| 国产精品久久久久久久天堂| 久草亚洲一区| 欧美日韩在线播放视频| 一区二区三区免费观看| 国产精品久久久久久久久久免费| julia京香一区二区三区| 成人影视亚洲图片在线| 亚洲成人777| 91在线观看网站|