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); } }