session与application的用法;以及简单聊天室功能

Servlet中的9大内置对象:

作用域:area(区域,范围)
作用域占有的两个方法:
set、get
1.page:在当前页面有效,(object类型,this)页面对象
2.request:再一次请求范围有效
3.session:再一次会话范围有效(一次会话可能包含多次请求,当页面重定向时也会失效)
4.application:在整个应用程序范围有效
5.out输出对象
6.response:重定向
7.pageContext:页面上下文对象
8.confing:配置对象
9.exception异常对象

其中

session:(存放用户自己的信息)

application:(存放全局需要的信息)

Session基于Cookie技术,也是通过键-值对来存储信息。

通过HttpSession session = request.getSession(); 来获得session(通常用于判断是否是新用户)

设置session属性:session.setAttribute(String name, Object obj);

获取session值:session.getAttribute(name);

返回客户端最后一次与会话相关的请求时间:session.getLastAccessedTime();

以秒为单位返回一个会话内两个请求最大时间间隔:session.getMaxInactiveInterval();

以秒为单位设置session的有效时间:session.setMaxInactiveInterval();【Tomcat的默认时间是30分钟,当然我们可以自己在xml中给该默认配置】

再会话中移除指定的对象:session.removeAttribute(name);

销毁session:session.invalidate();当session对象被销毁后将不可以再使用该session对象了。

application对象:

1.当Web服务器启动时,Web服务器会自动创建一个application对象。application对象一旦创建它将一直存在,知道关闭Web服务器。一个Web服务器通常有多个Web目录(网站)当Web服务器启动时它自动为每一个目录创建一个application,并且每个application与目录是一一对应的。

访问同一个(目录)网站的用户都共享一个application对象,因此application对象可以实现多用户之间的数据共享。

2.application对象的作用范围:application对象是一个应用程序级别的对象,它作用于当前网站,所有访问当前网站的用户都共享一个application对象。因此,当在application对象中存储数据后,所有访问网站的用户都能对其存储的数据进行访问(所以在一个项目中application是可以被当前所有工程中的servlet调用的)

3.application对象的基类是:java.servlet.ServletContext

ServletContext application=this.getServletContext();创建一个application对象

简单的聊天室功能:

使用作用域,可以实现一个聊天室的功能:
一般使用框架把页面分为三个部分:
left.jsp:用户列表界面
send.jsp:信息发送页面
content.jsp:聊天记录

session的作用域:(存放用户自己的信息)
application的作用域:(存放全局需要的信息)

用户列表:需要List集合(需要放到application中)

页面自动刷新:
<meta http-equiv="fefresh" content="1"/>
页面1秒刷新一次

一: <Frameset>为框架标记,说明该网页文档为框架组成,并设定文档中组成框架集的框架的布局,用来划分框架,每一个框架由<Frame></Frame>标记。
<Frame>用以设置组成框架集中各个框架的属性。<Frame></Frame>必须在<Frameset></Frameset>之内使用。
注意:<Frame></Frame>标记的框架顺序为从左至右或从上到下。

二: Iframe是Inline Frame的缩写,称为内联框架,它和frame如同兄弟。frame是帧标记,Iframe叫浮动帧标记,它不同于Frame标记最大的特征即这个标记所引用的HTML文件不是与另外的HTML文件相互独立显示,而是可以直接嵌入在一个HTML文件中,与这个HTML文件内容相互融合,成为一个整体;因为它可以多次在一个页面内显示同一内容,而不必重复写内容,所以人们形象称这种效果为“画中画”。

三:

<frameset>框架,必须要去掉boday才能使用frameset。
其中rows="100,*"表示上下分,第一行为100像素,其余为第二行;
cols="100,*"表示左右分,
每个页面用户<frame></frame>包裹,设置其src属性

四:

页面自动刷新:
<meta http-equiv="fefresh" content="1"/>
页面1秒刷新一次

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<frameset cols="150,*">
    <frame src="left.jsp"></frame>
    
    <frameset rows="*,150">
        <frame src="content.jsp"></frame>
        <frame src="send.jsp"></frame>
    </frameset>
</frameset>
<!-- 
<frameset>框架,必须要去掉boday才能使用frameset。
其中rows="100,*"表示上下分,第一行为100像素,其余为第二行;
    cols="100,*"表示左右分,
每个页面用户<frame></frame>包裹,设置其src属性
 -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="SendServlet" method="post">
        <input type="text" size="100" name="cont">
        <input type="submit" value="发送">
    </form>
</body>
</html>


<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="1"/>
<title>Insert title here</title>
</head>
<body>
    <%
    ArrayList<String> list=(ArrayList<String>)application.getAttribute("userlist");
    for(int i=0;i<list.size();i++){
    %>
        <%=list.get(i)+"<br><br>" %>
    <%    
    }
    %>
</body>
</html>



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="1"/>
<title>Insert title here</title>
</head>
<body>
    <%
    request.setCharacterEncoding("utf-8");
    %>
    <%=application.getAttribute("cont")    %>
</body>
</html>

Servlet类

package com.cookie;

import java.io.IOException;

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;

/**
 * Servlet implementation class SendServlet
 */
@WebServlet("/SendServlet")
public class SendServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String cont=request.getParameter("cont");
        ServletContext application=this.getServletContext();
        
        String s=(String)application.getAttribute("cont");
        if(s==null){
            s="";
        }
        
        String user=(String)request.getSession().getAttribute("user");
        cont=user+":<br>"+cont+"<br>";
        s+=cont;
        
        this.getServletContext().setAttribute("cont", s);
        response.sendRedirect("send.jsp");
    
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6353943.html