JSP实现简易的聊天功能(Session机制)

简介: 这是一个使用JSP实现的简易聊天功能,基于Session机制和服务器端全局应用空间Application。用户通过login.jsp登录,信息存储在Session中。container.jsp展示聊天界面,包括用户列表、聊天内容和输入框,同时处理发送、清空和刷新等操作。view.jsp动态显示聊天历史,根据用户颜色选择改变消息显示。多用户间通过切换浏览器模拟聊天。网址格式为:http://localhost:8080/项目名/...。如果仅本机可访问,可能因不在同一局域网,需确保所有设备在同一网络并使用本机IP替代localhost。

JSP实现简易的聊天功能(Session机制)

基于服务器端全局应用空间 application 的简易聊天室实现

1.login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>聊天室登录</title>
</head>
<style>
.div1{
   
   
    background-color:skyblue;
    border:solid 1px black;
    width:300px;
    height:170px;
    text-align:center;
    line-height:150%
}
</style>
<body>
<div class="div1">
<%
StringBuffer view=new StringBuffer("");
session.setAttribute("view",view);
String color="balck";
session.setAttribute("Color",color);
%>
<h3>聊天室登录</h3>
<form action="cotainer.jsp" method="post">
用户名:<input type="text" name="userName"><br>
<br>
<input type="submit" value="登录">

</form>
</div>
</body>
</html>

image.png

2.container.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <head>
  <style>
.div3{
   
   
    background-color:lightgreen;
    border:solid 1px black;
    width:700px;
    height:600px;

    line-height:150%
}
img{
   
   
    width:15px;
    height:20px;
}
</style>
  </head>
  <body>
  <div class="div3">

    <%
    request.setCharacterEncoding("utf-8");
    if(request.getParameter("userName")!=null)
    {
   
   session.setAttribute("userName",request.getParameter("userName").toString());}
        String sessionID=session.getId();
    StringBuffer users=new StringBuffer();
    //确定用户数量
        if(application.getAttribute("count")!=null)
        {
   
   
            users=users.append(application.getAttribute("users").toString());
            if(users.indexOf(sessionID)==-1){
   
   
                session.setAttribute("isNew","true");
            int  userCount= Integer.parseInt(application.getAttribute("count").toString());
             userCount++;
             application.setAttribute("count",new Integer(userCount));
                users=users.append("<br>"+sessionID);
                application.setAttribute("users",users.toString());
            }
        }
        else
        {
   
   
            users=users.append("<br>"+sessionID);
               application.setAttribute("users", users.toString());
            application.setAttribute("count", "1");

        }
        //获取默认颜色
       String select="black";
       if(request.getParameter("Color")!=null)
        select=request.getParameter("Color").toString();
        request.setAttribute("select",select);
        //确定用户次序
        int userId=1;
        String[]userss=users.toString().split("<br>");
        for(int i=0;i<userss.length;i++){
   
   
            if(userss[i].equals(sessionID)){
   
   
                userId=i;
                break;
            }
        }
       %>
       您是第<img src="数字/<%=userId%>.png">位访问者!

        <jsp:include page="view.jsp" />
        <form action="cotainer.jsp" method="post">
        <input type="text" name="message">
        <input type="hidden" name="send" value="true">
        选择我的颜色:<select name="color">
             <option value="red" ${
   
   select=="red"?'selected':''}>红色</option>
             <option value="blue" ${
   
   select=="blue"?'selected':''}>蓝色</option>
             <option value="green" ${
   
   select=="green"?'selected':''}>绿色</option>
             <option value="black" ${
   
   select=="black"?'selected':''}>黑色</option>
             <option value="yellow" ${
   
   select=="yellow"?'selected':''}>黄色</option>
             <option value="purpole" ${
   
   select=="purpole"?'selected':''}>紫色</option>
            </select>
        <input type="submit" value="发送"> 
        </form>
        <form action="cotainer.jsp">
           <input type="hidden" name="clear" value="true">
            <input type="submit" value="清空"></form>
             <form action="cotainer.jsp">
           <input type="hidden" name="flush" value="true">
            <input type="submit" value="刷新"></form>

        <form action="login.jsp">
         <input type="submit" value="退出聊天">
         </form>
       </div> 
  </body>
</html>

image.png

view.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*" import="java.text.SimpleDateFormat"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>聊天</title>
<style>
.div2{
   
   
    border:solid 1px black;
    width:500px;
    height:400px;
    overflow-y:scroll; 
}</style>
</head>
<body>

        <%request.setCharacterEncoding("utf-8");

        String userName = session.getAttribute("userName").toString();
        if(request.getParameter("color")!=null)
            session.setAttribute("Color",request.getParameter("color").toString());
        String color=session.getAttribute("Color").toString();
        request.setAttribute("select",color);
        StringBuffer view=new StringBuffer();
        view.append(session.getAttribute("view").toString());
            String chatTexts="";

            //判断是不是新用户
                String isNew="false";
            if(session.getAttribute("isNew")!=null){
   
   
                isNew=session.getAttribute("isNew").toString();
                session.setAttribute("isNew","false");
                }
            if(isNew.equals("false"))
            {
   
    
                //发送
                String send="false";
                    if (request.getParameter("send") != null)
                        send = "true";
                    if(send.equals("true")){
   
   
                    if (request.getParameter("message") != null) {
   
   
                        String message = request.getParameter("message").toString();

                    Date time = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                    String time1 = sdf.format(time);
                    String chatText ="<br>"+ userName + "["+time1 + "]:" + message;
                    view.append(chatText);
                    session.setAttribute("view",view.toString());
                    //view存到application中
                    if (application.getAttribute("chatText") != null) {
   
   
                        String ss=application.getAttribute("chatText").toString();                    
                        StringBuffer ssb=new StringBuffer();
                        ssb.append(ss);
                        ssb.append(chatText);
                        application.setAttribute("chatText",ssb.toString());
                    }
                        else{
   
   
                            application.setAttribute("chatText",view.toString());
                        }
            }
                    }
                //清空
                    String clear="false";
                    if (request.getParameter("clear") != null)
                        clear = "true";
                    if(clear.equals("true")){
   
   
                        view.delete(0,view.length());
                            }
                    session.setAttribute("view",view.toString());
            //刷新
            String flush="false";
            if (request.getParameter("flush") != null)
                 flush ="true";
            if (flush.equals("true")) {
   
   
                if (application.getAttribute("chatText") != null) {
   
   
                     chatTexts=application.getAttribute("chatText").toString();
                     view.delete(0,view.length());
                     view.append(chatTexts);
                     session.setAttribute("view",view.toString());
                }

            }
            //加颜色
                    String scolor=view.toString();
                    String[]a=scolor.split("<br>");
                    for(int i=0;i<a.length;i++){
   
                           
                        if(a[i].contains((userName+"["))){
   
   
                            if(a[i].contains("<span")){
   
   
                                //问题一:字符串取子串
                                    a[i]=a[i].substring(0,a[i].length()-7);
                                    int index=a[i].lastIndexOf(">");
                                    a[i]=a[i].substring(index+1);
                                }
                            a[i]="<br><span style='color:"+color+"'>"+a[i]+"</span>";
                        }
                        else{
   
   
                            a[i]="<br>"+a[i];
                        }

                        }
                    StringBuffer sb=new StringBuffer();
                        for(String s:a){
   
   
                            sb.append(s);
                        }
                        view.delete(0,view.length());
                        view.append(sb.toString());
                    }


        %>
<div class="div2">
<%=view.toString() %>
</div>
</body>
</html>

image.png

通过切换不同的浏览器可以实现在本机进行聊天。
(2)聊天室网站建好后,若尝试和同学一块开展聊天,你分享给他人的网站地址的构成应该是什么?
网址的构成:http://localhost:8080/项目名/...
(3)如果该网站只在本机能够使用,而其他同学无法访问,请分析原因是什么?应如何解决这个问题?
运行的项目不再同一局域网内。
解决办法:
一般我们想在别人电脑上运行本机tomcat项目,不考虑服务器的话,必须在同一局域网中,而网线连接和无线网络连接之间还是有很多不同的,流程基本都是在本机将项目运行起来,然后找到本机ip,将http://localhost:8080/项目名/...中的localhost换成本机ip(注意:必须在同一局域网中)。

目录
相关文章
|
4天前
|
存储 Java 开发者
JSP 教程 之 JSP Session 2
JSP教程讲解了如何使用Session进行会话跟踪。HTTP协议本身无状态,但JSP通过HttpSession接口存储用户信息。默认开启会话跟踪,可设置`&lt;%@ page session=&quot;false&quot; %&gt;`禁用。session对象提供多种方法,如getAttribute()获取绑定对象,getCreationTime()获取创建时间,setAttribute()用于存储数据,以及invalidate()使会话失效。这些方法便于开发者管理用户会话和数据。
8 0
|
3天前
|
Java 应用服务中间件
JSP 教程 之 JSP Session 4
JSP教程讲解了HTTP无状态特性及Session管理。删除Session数据可通过移除特定属性(removeAttribute())或注销整个会话(invalidate())。设置会话超时使用setMaxInactiveInterval()。在Servlet 2.4及以上版本,可用logout()登出用户并结束相关session。Tomcat的web.xml配置中,&lt;session-timeout&gt;15&lt;/session-timeout&gt;定义了15分钟超时,而getMaxInactiveInterval()以秒返回此值(默认30分钟为1800秒)。
12 0
|
4天前
|
Java
JSP 教程 之 JSP Session 3
该JSP教程介绍了如何使用HTTP Session处理无状态HTTP协议。示例展示了通过HttpSession对象获取会话的创建和最后访问时间,并利用session跟踪用户访问次数和ID。如果会话新建,则设置访问计数和用户ID;否则,更新访问计数。页面以表格形式展示会话ID、创建时间、最后访问时间、用户ID和访问次数。请尝试访问指定URL进行实践。
4 0
|
5天前
|
Java
JSP 教程 之 JSP Session 1
JSP教程讲解了三种维持HTTP会话的方法:Cookies、隐藏表单域和重写URL。尽管Cookies是最常见的,但由于不总被支持,所以不推荐。隐藏表单域在表单提交时能跟踪会话,但超链接无法触发。重写URL是更通用的方法,即使在无Cookie支持下仍能工作,但需对每个URL动态添加session ID,增加了复杂性。
8 2
|
1月前
|
Java 数据库连接 数据库
通过JSP、JavaBean、JDBC、Servlet技术,实现用户登录功能
通过JSP、JavaBean、JDBC、Servlet技术,实现用户登录功能
|
8月前
|
存储 设计模式 JavaScript
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(三)
当某个特殊的事件发生(特殊的事件发生其实就是某个时机到了。)之后,被web服务器自动调用。 思考一个业务场景
50 0
|
8月前
|
缓存 前端开发 Java
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(二)
我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。 适配器设计模式Adapter
39 0
|
8月前
|
前端开发 Java 应用服务中间件
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(一)
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
58 0
|
12月前
|
存储 前端开发 Java
【JavaWeb】JAVABean+Session实现JSP登录注册(List模型数据库用户信息存储+商品展示)
先说说这个题目吧,好端端的数据库不连,偏偏喜欢要整一个JavaBean和List来模拟数据库,虽然说这样的做法非常的愚蠢,但没办法,毕竟是主人的任务是吧doge。作者其实已经做了一版,但是这代码写的实在是。。。于是乎作者使用了MVC框架后整理了一个新的。(如果你学了servlet,那会发现和它的结构和思想非常的像)
92 0
|
1月前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
44 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)