最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java web實現(xiàn)簡單聊天室

 更新時間:2020年11月23日 11:42:21   作者:今天肝代碼了嗎  
這篇文章主要為大家詳細介紹了java-web實現(xiàn)簡單聊天室,含拍一拍功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

目標

servlet、jsp實現(xiàn)簡單聊天室,用戶通過瀏覽器登錄后進入聊天室,可發(fā)送消息進行群聊,點擊聊天信息框中的用戶名可實現(xiàn)拍一拍功能。

基礎知識

  • 數(shù)據(jù)的存取 setAttribute / getAttribute
  • request請求對象 :有效時間短

ServletContext上下文對象:一直存在于服務器,存儲公有、 共享數(shù)據(jù)
Session會話對象:獨立

  • 網(wǎng)站默認頁面一般是index.jsp

實現(xiàn)思路

1.登錄頁面 login.jsp 輸入昵稱

2.編寫一個LoginSevlet,處理登錄提交的昵稱,保存登錄昵稱到session(會話變量)
若昵稱合法 if(nickname.length()!=0),跳轉(zhuǎn)到聊天室,不合法回到登錄頁面

3.編寫聊天室頁面chatroom.jsp ,是一個框架,把多個頁面集成到一個頁面中

<iframe src="message.jsp" width="100%" height="70%"> </iframe>
<iframe src="input.jsp" width="100%" height="25%"> </iframe>

4.聊天內(nèi)容顯示message.jsp,不斷自動刷新標簽內(nèi)設置響應頭,用${上下文變量}顯示聊天內(nèi)容

<meta http-equiv="refresh" content="1">

5.input.jsp(不刷新)輸入聊天內(nèi)容文本框text,點擊發(fā)送聊天內(nèi)容按鈕時,將把文本框的聊天信息提交給ChatServlet處理。下方有超鏈接可退出聊天室。

<a href="login.jsp" target="_top">退出聊天室</a>

6.ChatServlet:檢測聊天信息合法性,把聊天信息加入到ServletContext變量(字符串)中,(每次都將xx:xxxx加入上下文字符串)
判斷是否存在該變量,存在則直接讀取現(xiàn)有聊天內(nèi)容,把數(shù)據(jù)加入進去后,重新寫回上下文變量

7.實現(xiàn)拍一拍功能(目的:學習如何進行鏈接操作)
每個人名做成一個鏈接,訪問某一個servlet,該servlet可以在聊天信息(上下文變量)里添加一行,xx拍了yyy一下,跳轉(zhuǎn)回message.jsp
問題:鏈接里應該包含yyy參數(shù),servlet?nick=yyy

say = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;

8.多人聊天實現(xiàn):多種類型瀏覽器

關(guān)鍵代碼

login.jsp

昵稱:<input type="text" name="nickname"/><br> <br><br>
<input type="submit" value="登錄"/>
<input type="reset" value="取消"/>

input.jsp

<form action="input.do" method="post">
 <input type="text" size="50" name="text"/>
 <input type="submit" value="發(fā)送"><br><br><br><br>
 <a href="login.jsp" rel="external nofollow" rel="external nofollow" target="_top">退出聊天室</a>
</form>

message.jsp

<h3>一起來聊天吧</h3>
${says}

LoginServlet.java

package chatting;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "LoginServlet2",urlPatterns = {"/login.do"})
public class LoginServlet2 extends HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //避免亂碼
 response.setContentType("text/html;charset=utf-8");
 request.setCharacterEncoding("utf-8");
 //nickname保存用戶昵稱
 String nickname = request.getParameter("nickname");
 //nickname存儲到session變量中
 HttpSession session = request.getSession();
 session.setAttribute("nickname",nickname);
 //對nickname進行合法性判斷
 if(nickname.length()!=0){
 //昵稱合法,則進入聊天室頁面
  request.getRequestDispatcher("/chatroom.jsp").forward(request,response);
 }
 else{
 //昵稱不合法,返回登陸頁面
  request.getRequestDispatcher("/login.jsp").forward(request,response);
 }

 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 }
}

ChatServlet.java

package chatting;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Vector;

@WebServlet(name = "ChatServlet",urlPatterns = "/input.do")
public class ChatServlet extends HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //防止亂碼
 request.setCharacterEncoding("utf-8");
 response.setContentType("text/html;charset=utf-8");
 HttpSession session = request.getSession();
 String text = request.getParameter("text");
 //text存儲聊天信息,并進行合法性判斷
 if (text.length()!=0) {
  String say =new String();
  //獲取session中的昵稱
  String nickname = (String)session.getAttribute("nickname");
  //將昵稱作為鏈接,并傳參
  say = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;
  String says = new String();
  //將昵稱和聊天信息一起放在上下文變量
  ServletContext context = getServletContext();
  if(context.getAttribute("says")!=null){
  says = context.getAttribute("says") + say + "<br>";
  }
  else{
  says = say + "<br>";
  }
  context.setAttribute("says", says);
  request.setAttribute("says", says);
 }
 //轉(zhuǎn)發(fā)
 RequestDispatcher dispatcher = request.getRequestDispatcher("/input.jsp");
 dispatcher.forward(request, response);
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


 }
}

NickServlet.java

package chatting;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "NickServlet",urlPatterns = "/NickServlet")
public class NickServlet extends HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 response.setContentType("text/html;charset=UTF-8");
 request.setCharacterEncoding("utf-8");
 //將拍一拍放到上下文變量says中 一起輸出

 HttpSession session = request.getSession();
 //nickname存儲當前用戶昵稱
 String nickname = (String)session.getAttribute("nickname");
 //name存儲連接中傳遞的參數(shù),即被拍的用戶昵稱
 String name = java.net.URLDecoder.decode(request.getParameter("nickname"),"UTF-8");
 String pick = nickname+"拍了拍"+name+"<br>";

 ServletContext context = request.getServletContext();
 String says = context.getAttribute("says")+pick;
 context.setAttribute("says",says);

 RequestDispatcher dispatcher = request.getRequestDispatcher("/chatroom.jsp");
 dispatcher.forward(request, response);
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot項目打包部署到Tomcat的操作流程

    SpringBoot項目打包部署到Tomcat的操作流程

    在最近一個項目中,維護行里一個年代較為久遠的單體項目,需要將項目打包放到的tomcat服務器下運行,所以本文就給大家介紹一下SpringBoot項目打包部署到Tomcat的流程步驟,需要的朋友可以參考下
    2023-08-08
  • Java?Thread?類和Runnable?接口詳解

    Java?Thread?類和Runnable?接口詳解

    這篇文章主要介紹了Java?Thread?類和Runnable接口詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • SpringBoot定時調(diào)度之Timer與Quartz詳解

    SpringBoot定時調(diào)度之Timer與Quartz詳解

    Java?中常用的定時調(diào)度框架有以下幾種:Timer、ScheduledExecutorService、Spring?Task和Quartz,本文主要來和大家講講他們的具體使用,需要的可以參考一下
    2023-06-06
  • Java編寫的24點紙牌游戲

    Java編寫的24點紙牌游戲

    這篇文章主要介紹了Java編寫的24點紙牌游戲的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • java反射機制及beanUtils的實現(xiàn)原理分析

    java反射機制及beanUtils的實現(xiàn)原理分析

    本文介紹了Java的反射機制、VO、DTO、PO的概念以及BeanUtils的實現(xiàn)原理和簡單示例,通過反射可以在運行時動態(tài)操作類、方法和字段,BeanUtils用于在不同bean之間進行屬性復制
    2024-12-12
  • Spring Boot構(gòu)建優(yōu)雅的RESTful接口過程詳解

    Spring Boot構(gòu)建優(yōu)雅的RESTful接口過程詳解

    這篇文章主要介紹了spring boot構(gòu)建優(yōu)雅的RESTful接口過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Java中split根據(jù)"."分割字符串問題舉例

    Java中split根據(jù)"."分割字符串問題舉例

    split表達式其實就是一個正則表達式,* | . ^ 等符號在正則表達式中屬于一種有特殊含義的字符,下面這篇文章主要給大家介紹了關(guān)于Java中split根據(jù)“.“分割字符串問題的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • SpringBoot配置綁定方法詳解

    SpringBoot配置綁定方法詳解

    配置綁定是SpringBoot其中一個底層功能,SpringBoot把配置綁定的過程變得更加簡單,傳統(tǒng)java將常用的配置放到配置文件properties中,之后將這些配置綁定到javabean中
    2022-10-10
  • Spring cloud 限流的多種方式

    Spring cloud 限流的多種方式

    在頻繁的網(wǎng)絡請求時,服務有時候也會受到很大的壓力,尤其是那種網(wǎng)絡攻擊,非法的。這樣的情形有時候需要作一些限制。本文主要介紹了兩種限流方法,感興趣的可以了解一下
    2021-06-06
  • 生成PDF全攻略之在已有PDF上添加內(nèi)容的實現(xiàn)方法

    生成PDF全攻略之在已有PDF上添加內(nèi)容的實現(xiàn)方法

    下面小編就為大家?guī)硪黄蒔DF全攻略之在已有PDF上添加內(nèi)容的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

方山县| 邯郸市| 遵化市| 仁寿县| 商城县| 西畴县| 乳山市| 睢宁县| 措美县| 武义县| 宁化县| 萨迦县| 金塔县| 长阳| 涞水县| 东安县| 德惠市| 勃利县| 康保县| 南昌市| 常熟市| 宜宾市| 武安市| 凤城市| 芒康县| 石台县| 阿荣旗| 新邵县| 右玉县| 肥东县| 崇左市| 桐城市| 清水县| 惠安县| 泸州市| 鄂托克旗| 赤壁市| 阿巴嘎旗| 襄城县| 海林市| 香格里拉县|