0

0

最全的java四大域总结(图文)

PHPz

PHPz

发布时间:2017-04-03 09:49:18

|

1777人浏览过

|

来源于php中文网

原创

最近学完了web部分,发现有些地方总是单个容易理解,可是把所有的放在一起来大杂烩,总是有那么几个知识点容易混淆。其实网上的资料已经够多了,虽然也不乏辛劳的搬运工。可是最终的目的不就是要我们自身理解吗?自己理解了的东西才正真是我们的。作为额外的奖励,我们先来关注一下JSP的九大隐式对象

可以看看下图中关于JSP的九大隐式对象,它们可总是被老师们说是重点重点哦。

 

 

作用域------顾名思义,起作用的大小范围也!如果是你自己去学习一个知识点,你要达到哪些目标才算是对一个知识点称得上是懂得,理解,掌握呢?从扁神医的望闻问切,到数据库的增删改查,所有的事物开始也不外乎:是什么?有什么用?怎么用?为什么可以这么用?故而,我觉得咱们应该把握以下问题,带着这些问题去学习,发现自己的不足,才是学习的上策。

1)作用域的实际大小。(是什么?)

2)作用域的作用。(有什么用?)

3)怎么使用这些作用域。(怎么用?)

4)它这样使用实现的原理。(为什么可以这么用?)

 

下面开始逐一分析:

(一)servletcontext域(application域)

1)作用域的实际大小。(是什么?)

  servletcontext域起作用的范围是:整个web应用程序。

  数据产生之后,不仅等会还要用 ,还要给别人用,则请使用servletcontext。

  它是四个域中范围最大的域。

2)  作用域的作用。(有什么用?

  由于一个web应用中的所有servlet共享同一个servletcontext对象,所以多个servlet通过servletcontext对象实现了数据在不同servlet之间的共享。

3)怎么使用这些作用域。(怎么用?)

  a)可以通过编程的方式绑定,也可以作为web应用的全局变量被所有Servlet和JSPs访问

设置Context属性:
              ServletContext application=this.getServletContext();
              application.setAttribute("person1",new Person("Jim"));
              application.setAttribute("person2",new Person("Green"));
 获取Context属性:
              ServletContext application=this.getServletContext();
              Enumberation persons=application.getAttributeNames();
               while(persons.hasMoreElements()){
                      String name=(String)persons.nextElement();
                      Person p=(Person)persons.getAttribute(name);
                      application.removeAttribute(name);
              }

 

  b)为整个web应用配置context域:

  修改web.xml配置文件,加入以下内容

  

    data

    Hello world !

  - param>

  从Servlet中访问这些初始化参数:

              ServletContext application=this.getServletContext();

              out.println(application.getInitParameter("data"));

 

  c)读取资源文件

     使用ServletContext接口可以直接访问web应用中的静态内容文档结构.包括HTML,GIF和JPEG文件。如以下方法:
         .getResource()
         .getResourceAsStream()
   这两个方法的参数都是以"/"开头的字符串,表示资源相对于context根的相对路径.文档结构可以存在于服务器文件系统,或是war包中,或是在远程服务器上,抑或其他位置。不可以用来获得动态资源,比如,getResource("/index.jsp"),这个方法将返回该jsp文件的源码,而不是动态页面.可以用 "Dispatching Requests" 获得动态内容.列出web应用中可被访问的资源,可以使用getResourcePaths(String path)方法。

             

4)它这样使用实现的原理或优缺点。(为什么可以这么用?)

  servlet并不适合做数据输出,故需要将数据转发给JSP文件进行美化再输出给客户端。

  JSP中可嵌入java代码,这使得它接收java数据变得可能。同时,由于servletcontext域可使整个web应用共享该数据,因此而带来“线程安全”问题同样影响对转发的数据,故而需要使用request域。

 

(二)Httpsession域(session域)

1)作用域的实际大小。(是什么?)

  Httpsession的作用域是:一次会话。

  数据产生之后显示给用户了,等会还要使用的情况下使用Httpsession域。

  它是四个域中范围第二大的域。

2)  作用域的作用。(有什么用?)

  (会话范围)在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session。如果没有,就在内存中创建一个session并返回。当一短时间内(默认30分钟)session没有被使用,则服务器会销毁该session。若服务器非正常关闭,未到期的session也会跟着销毁。若调用session提供的invalidate()方法,可以立即销毁session。

3)怎么使用这些作用域。(怎么用?)

  a) jsp中操作session
    (String)request.getSession().getAttribute("username"); // 获取
    request.getSession().setAttribute("username", "xxx");  // 设置

   b) java中操作session
    //servlet中
    request.getSession();
    session.getAttribute("username");
    session.setAttribute("username", "xxx");
    session.setMaxInactiveInterval(30*60);
    session.invalidate();
 
    //struts中方法1
    ServletActionContext.getRequest().getSession().setAttribute("username", "xxx");
    ServletActionContext.getRequest().getSession().getAttribute("username");
    ServletActionContext.getRequest().getSession().setMaxInactiveInterval(30*60);
    ServletActionContext.getRequest().getSession().invalidate();

    //struts中方法2
    ActionContext.getContext().getSession().put("username", "xxx");
    ActionContext.getContext().getSession().get("username");
    ActionContext.getContext().getSession().clear();

   c) web.xml中操作session
              30         d) tomcat-->conf-->conf/web.xml
            30    

4)它这样使用实现的原理。(为什么可以这么用?)

  HttpSession在服务器中,为浏览器创建独一无二的内存空间,在其中保存了会话相关的信息。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都 会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。如果要问我为什么,我也不知道啊!

(三)ServletRequest域(request域)

1)作用域的实际大小。(是什么?)

  ServletRequset域是:整个请求链(请求转发也存在)。

  数据产生之后,只需要使用一次,这种情况下请使用ServletRequset域。

  它是四个域中范围排第三的域。

2)  作用域的作用。(有什么用?)

  在整个请求链中共享数据。

  最常用到:在servlet中处理好的数据交给JSP显示,此时参数就可以放置在ServletRequset域中带过去。

3)怎么使用这些作用域。(怎么用?)

  a) 获得客户机信息的方法
      getRequestURL方法返回客户端发出请求时的完整URL。
      getRequestURI方法返回请求行中的资源名部分。
      getQueryString 方法返回请求行中的参数部分。
      getRemoteAddr方法返回发出请求的客户机的IP地址
      getRemoteHost方法返回发出请求的客户机的完整主机名
      getRemotePort方法返回客户机所使用的网络端口号
      getLocalAddr方法返回WEB服务器的IP地址。
      getLocalName方法返回WEB服务器的主机名
      getMethod得到客户机请求方式
   b) 获得客户机请求头
      getHeader(string name)方法
      getHeaders(String name)方法
      getHeaderNames方法 
   c) 获得客户机请求参数(客户端提交的数据)
      getParameter(name)方法
      getParameterValues(String name)方法
      getParameterNames方法
      getParameterMap方法

4)它这样使用实现的原理。(为什么可以这么用?)

  在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

 

(四)PageContext域(page域)

1)作用域的实际大小。(是什么?)

  PageContext域的作用范围是:整个JSP页面。

  它是四个域中范围最小的一个域。

2)  作用域的作用。(有什么用?)  
  a) 它可以获取其它八大隐式对象,可以认为它是一个入口对象。

  b) 获取其它所有域中的数据。

  c) 跳转到其它资源。其身上提供了forword和sendRedirect方法,简化了转发和重定向的操作。 

3)怎么使用这些作用域。(怎么用?)

  以下以一个简单的JSP页面程序为例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>pageContext对象_例1
<%//使用pageContext设置属性,该属性默认在page范围内 pageContext.setAttribute("name","地球"); request.setAttribute("name","太阳系"); session.setAttribute("name","银河系");//session.putValue("name","麦哲伦系"); application.setAttribute("name","宇宙");%>page设定的值:<%=pageContext.getAttribute("name")%>
request设定的值:<%=pageContext.getRequest().getAttribute("name")%>
session设定的值:<%=pageContext.getSession().getAttribute("name")%>
application设定的值:<%=pageContext.getServletContext().getAttribute("name")%>
范围1内的值:<%=pageContext.getAttribute("name",1)%>
范围2内的值:<%=pageContext.getAttribute("name",2)%>
范围3内的值:<%=pageContext.getAttribute("name",3)%>
范围4内的值:<%=pageContext.getAttribute("name",4)%>
<%pageContext.removeAttribute("name",3);%>pageContext修改后的session设定的值:<%=session.getValue("name")%>
<%pageContext.setAttribute("name","宇宙",4);%>pageContext修改后的application设定的值:<%=pageContext.getServletContext().getAttribute("name")%>
值的查找:<%=pageContext.findAttribute("name")%>
属性name的范围:<%=pageContext.getAttributesScope("name")%>

显示结果:

page设定的值:地球
request设定的值:太阳系
session设定的值:银河系
application设定的值:宇宙
范围1内的值:地球
范围2内的值:太阳系
范围3内的值:银河系
范围4内的值:宇宙
pageContext修改后的session设定的值:nullpageContext修改后的application设定的值:宇宙
值的查找:地球
属性name的范围:1

4)它这样使用实现的原理。(为什么可以这么用?)

   pageContext对象,这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。当对JSP的请求时开始,当响应结束时销毁。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

17

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

6

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

1

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

2

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

1

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

53

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

25

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

31

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.2万人学习

Webpack4.x---十天技能课堂
Webpack4.x---十天技能课堂

共20课时 | 1.5万人学习

Bootstrap4.x---十天精品课堂
Bootstrap4.x---十天精品课堂

共22课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号