session與application的用法;以及簡單聊天室功能

Servlet中的9大內置對象:html

做用域:area(區域,範圍)
做用域佔有的兩個方法:
set、get
1.page:在當前頁面有效,(object類型,this)頁面對象
2.request:再一次請求範圍有效
3.session:再一次會話範圍有效(一次會話可能包含屢次請求,當頁面重定向時也會失效)
4.application:在整個應用程序範圍有效
5.out輸出對象
6.response:重定向
7.pageContext:頁面上下文對象
8.confing:配置對象
9.exception異常對象java

其中服務器

session:(存放用戶本身的信息)cookie

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

 

Session基於Cookie技術,也是經過鍵-值對來存儲信息。app

經過HttpSession session = request.getSession(); 來得到session(一般用於判斷是不是新用戶)框架

設置session屬性:session.setAttribute(String name, Object obj);jsp

獲取session值:session.getAttribute(name);佈局

返回客戶端最後一次與會話相關的請求時間:session.getLastAccessedTime();post

以秒爲單位返回一個會話內兩個請求最大時間間隔: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);
    }

}
相關文章
相關標籤/搜索