- session域是基于会话的,即网页关闭后数据消失,session清空。创建session对象:
// 创建session对象
HttpSession session = request.getSession();
- application域是基于服务器的,即当服务器(比如tomcat)关闭时,内部的application域的数据清空。
- page指当前页面。只在一个jsp页面里有效 。
- request 指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
比较直观的理解的话,可以参照下面的代码来看(一个累加器)
session:
package servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class PrivateSum extends HttpServlet {
/**
* 初始化
*/
public void init() {
}
/**
* doGet方法
* <li> 完成局部私有累加计数
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int count;
// 设置输出类型和编码格式
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 通过表单中的控件名称获得控件的value值
String str = request.getParameter("number");
// 将字符串转为整型数据
int num = Integer.parseInt(str);
// 创建session对象
HttpSession session = request.getSession();
// 返回由count指定的会话属性
String o = (String) session.getAttribute("count");
if (o != null) {
count = Integer.parseInt(o);
} else {
count = 0;
}
// 累加,但在同一个session中会一直累加
count += num;
String result = String.valueOf(count);
session.setAttribute("count", result);
out.println("现在的累加结果是" + count);
}
/**
* 销毁方法
*/
public void destroy() {
}
}
application:
package servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/**
* @author fhzheng
* <li> 全局计数器,即置于容器中的共享数据
*/
public class PublicSum extends HttpServlet
{
//声明上下文对象
ServletContext sc;
public void init()
{
//实例化上下文对象
sc=this.getServletContext();
}
public void doGet(
HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException{
int count; //计数器
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//通过表单中的控件名称获得控件的value值
String str=request.getParameter("number");
int num=Integer.parseInt(str); //字符串型转变为整型
//返回Servlet上下文中count的对象,如没有count的对象,则返回null
String o=(String)sc.getAttribute("count");
if( o != null ) { //如果在当前服务器中,曾调用过该应用程序,则有count的对象。
count=Integer.parseInt(o);
} else {
count=0;
}
// 累加,同一个服务一旦户动,会一直累加
count += num;
String result = String.valueOf(count); //整型转变为字符串型
sc.setAttribute("count",result); //把result对象的值赋给count对象,即count的值为result的值
out.println("现在的累加结果是"+count);
}
public void destroy(){}
}