JavaWeb四个作用域

ServletContext:ServletContext代表当前web应用

       Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext对象,代表当前web应用。

      由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。

      ServletContext对象通常也被称之为context域对象,在本Web应用中共用ServletContext对象。

      ServletContext做为域对象可以在整个web应用范围内共享数据

ServletContext是一个全局的储存信息的空间,表示 Servlet 上下文对象;

一个 web 工程,只有一个 ServletContext 对象实例;

生命周期:当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁;

ServletContext的主要方法
voidsetAttribute(String str,Object obj);
ObjectgetAttribute(String str);
voidremoveAttribute(String str) ;

作用域对象

作用域:变量能够起作用的区域

PageContext(当前页面)

只能当前页面定义数据,当前页面使用

request(请求间)

后端程序和页面之间有请求关系,则数据可以共享

常用方法 

方法 概述
setAttribute( String name,Object obj )设置属性以及属性值
getAttribute(String name)返回name的属性值,若不存在指定的属性,就返回null
getParameter(String name) 获取客户端用户传到服务端的参数值
removeAttribute(String name )删除指定的属性
setCharacterEncoding(编码)指定getParameter接收的编码

session(当前会话)

是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享)

方法概述
setAttribute( String name,Object obj )设置属性以及属性值
getAttribute(String name)返回name的属性值,若不存在指定的属性,就返回null
removeAttribute(String name )删除指定的属性

application(应用程序)

是整个服务器有效,所有用户的请求都可以数据共享

方法概述
setAttribute( String name,Object obj )设置属性以及属性值
getAttribute(String name)返回name的属性值,若不存在指定的属性,就返回null
removeAttribute(String name )删除指定的属性

response对象

作用:页面重定向

方法描述
SendRedirect(“跳转链接”跳转本地链接和超链接
setHeader(“refresh”;“秒数”)自动刷新
setHeader(“refresh”;“秒数;跳转链接”)定时跳转链接

 请求转发和重定向的区别 

如果要实现路径跳转,又要实现数据共享,建议使用请求转发;
如果只想要实现路径跳转,我们可以使用重定向;

1、请求转发是服务器行为、重定向是客户端浏览器行为;
2、请求转发是request对象调用方法、重定向是response对象调用方法;
3、请求转发只有一次请求可以实现request域对象中的数据共享;重定向是多次请求、多次响应;
4、请求转发的效率高于重定向;请求转发地址栏不变,重定向地址栏发生变化;
5、请求转发是服务器内部的行为,所以只能访问服务器内部资源;重定向是浏览器行为,地址栏会变,所以可以访问服务器外部资源; 

Test01.java 

package com.su.servlet;

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;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/test01")

public class Test01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.PageContext

        //2.request
        request.setAttribute("name","request");
        //3.session
        HttpSession session = request.getSession();
        session.setAttribute("name","session");
        //4.application
        ServletContext servletContext = request.getServletContext();
        servletContext.setAttribute("name","servletContext");

        //请求转发
        //request.getRequestDispatcher("test01.jsp").forward(request,response);
        //重定向
        response.sendRedirect("test01.jsp");
    }
}

test01.jsp 

<html>
<head>
    <title>作用域对象测试</title>
</head>
<body>
<h1>test01.jsp</h1>
<!-- EL表达式获取作用域对象的顺序是pageContext(当前页面)、request(请求间)、session(当前会话)、application(应用程序) -->
<%
    //pageContext.setAttrbute("name","pageContext");
%>
<h2>
    pageContext只能当前页面定义数据,当前页面使用;<br>
    request后端程序和页面之间有请求关系,则数据可以共享;<br>
    session是当前会话有效(同一个人使用同一个浏览器在任何页面都可以数据共享);<br>
    application是整个服务器有效,所有用户的请求都可以数据共享;
</h2>
<%!
    int n =1;
%>
<%
    n++;
    application.setAttribute("count",n);
%>
   ${name}

</body>
</html>

 test02.jsp

<html>
<head>
    <title>作用对象测试</title>
</head>
<body>
  <h1>test02.jsp</h1>
  ${name}
</body>
</html>

 ​​​​​当加上test01时,有两次请求

 

 返回session

当加上test01.jsp时,只有一次请求

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值