你一定在你的Jsp文件中的监本片段中使用过以下九个对象的几种:out、config、page、pageContext、exception、request、response、application、session。就像下面这样:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Jsp脚本片段:用来在里面写Java代码-->
<%
for(int i=0;i<10;i++){
out.print(i);
}
%> <!-- JSP表达式 :用来想浏览器输出对象-->
<%="I'm JSP expression" %> <!-- JSP九大隐含对象 -->
<h1>欢迎你,<%=request.getParameter("username") %></h1>
</body>
</html>

  上面这段标签中的脚本片段中使用了out对象,但这个out对象是怎么来的呢?上一篇关于Jsp底层原理中我们介绍过,Tomcat会为每一个jsp文件产生相应的的servlet,也就是在这个servlet类中,帮我们创建了这久个隐藏对象,其中的exception比较特别,只有在Jsp文件中指定了isErrorPage=“true”时,Tomcat才会为此jsp创建带有exception对象的servlet类。

  虽然在jsp文件中显示的使用了隐藏对象,但实际上使用却在对应的Servlet类中,所以所有的jsp文件中的隐藏对象都是有据可循的。在这九个对象中,有四个比较特殊,也比较重要,他们被称为域对象。

  分别是:page、request、session、application。下面介绍四者的区别:<%@ 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>
<!--
四个域:
page域
范围:当前页面
对应的域对象:pageContext
域对象的类型:PageContext
request域
范围:当前请求(一次请求)
对应的域对象:request
域对象的类型:HttpServletRequest
session域
范围:当前会话(一次会话)
对应的域对象:session
域对象的类型:HttpSession
application域
范围:当前Web应用
对应的域对象:application
域对象的类型:ServletContext
四个域对象都以下三个方法:
void setAttribute(String key , Object value)
Object getAttribute(String key)
void removeAttribute(String key)
四个域对象的使用规则:
能用小的就不用大的
-->
<!-- 在当前页面分别向四个域中添加四个属性 -->
<%
pageContext.setAttribute("pageKey", "pageValue");
request.setAttribute("reqKey", "reqValue");
session.setAttribute("sessKey", "sessValue");
application.setAttribute("appKey", "appValue");
%>
<h1>在当前页面中获取四个域中的属性值</h1>
page域中的属性值是:<%=pageContext.getAttribute("pageKey") %><br>
request域中的属性值是:<%=request.getAttribute("reqKey") %><br>
session域中的属性值是:<%=session.getAttribute("sessKey") %><br>
application域中的属性值是:<%=application.getAttribute("appKey") %><br>
<!-- 转发到scope2.jsp页面 -->
<%-- <jsp:forward page="/scope2.jsp"></jsp:forward> --%> <a href="/Web_JSP/scope2.jsp">去scope2.jsp页面</a>
</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">
<title>Insert title here</title>
</head>
<body> <h1>在scope2.jsp页面中获取四个域中的属性值</h1>
page域中的属性值是:<%=pageContext.getAttribute("pageKey") %><br>
request域中的属性值是:<%=request.getAttribute("reqKey") %><br>
session域中的属性值是:<%=session.getAttribute("sessKey") %><br>
application域中的属性值是:<%=application.getAttribute("appKey") %><br>
</body>
</html>

  在上面这个页面中,分别向四个域对象中设置了值,打开页面后会发现本页面的四个域对象的都能取出来相应的value,而通过本页面转发的页面不能取出pagevalue,原因就是page域的作用范围仅仅在本页面中,别的页面是无法获取本页面page域对象的值的。而如果将转发改为跳转(重定向也是跳转的一种),即重新向服务器发送一次请求,会发现第二个请求的页面pagevalue和reqValue都取不出来,pagevalue的值取不出来是因为其所在的page域对象因为页面已经跳转而失效,reqValue值悟不出来的原因是request域对象的作用域仅限于一次请求,上面之所以能在第二个页面中获取到热情Value,是因为虽然页面跳转了,但跳转的方式是“转发”,所以本质上还是一个请求。如果此时重启浏览器并输入二号页面的URL直接访问二号页面,就只能获取到application的值了,原因就是session的作用域仅限于一个会话,重启浏览器以后再次访问就是一个新的会话了,上一次会话的域对象就失效了。而如果重启服务器后,再访问二号页面,四个值都将无法获得,四个域对象都失效了。

  

  

JSP——九大隐藏对象之四大域对象的更多相关文章

  1. JSP九大隐式对象和四大域对象-----面试

    因为jsp实质是一个Servlet对象:jsp在第一次访问时会被Web容器翻译成Servlet,在执行过程:第一次访问---->inex.jsp---->index_jsp.java--- ...

  2. servlet的九大内置对象和四大域对象

    隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletRes ...

  3. 四大域对象,和jsp的九大隐式对象,已经el表达式的11个隐式对象

    四大域对象 1.PageContext :页面范围的数据 2.ServletRequest:请求范围的数据 3.HttpSession:回话范围的数据 4.ServletContext:应用范围的数据 ...

  4. JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

  5. JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1.    JSP模板元素:JSP中HT ...

  6. JSP四大域对象与九大内置对象

    什么是内置对象? 在jsp开发中会频繁使用到一些对象,如 ServletContext.HttpSession.PageContext 等: 如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手 ...

  7. jsp 九大内置对象和其作用以及四大域对象

    感谢作者:Fangcf. 链接:https://blog.csdn.net/qq_39320833/article/details/80818442 一.jsp 九大内置对象 方法简单介绍:https ...

  8. JSP九大内置对象及其作用以及四大域对象

    一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...

  9. JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象

    1 什么是JSP   1)为什么说,Servlet是一个动态Web开发技术呢?     Servlet是基于服务端的一种动态交互技术,     HttpServletRequest表示客户端到服务端的 ...

随机推荐

  1. 爬虫 xpath

    xpath简介 1.xpath使用路径表达式在xml和html中进行导航 2.xpath包含标准函数库 3.xpath是一个w3c的标准 xpath节点关系 1.父节点 2.字节点 3.同胞节点 4. ...

  2. Asp.net内置对象用途说明

    Asp.net 内置对象 1.Session当客户第一次请求网页,session创建.当客户最后一次请求页面,一段时间后,session销毁.默认30分钟. 一般存用户信息,即登陆成功后,在sessi ...

  3. Windows API 编程入门

    Windows 工作原理的中心思想就是“动态链接”概念.Windows 自身带有一大套函数,应用程序就是通过调用这些函数 来实现它的用户界面和在屏幕上显示文本和图形的.这些函数都是在动态链接库里实现的 ...

  4. 在web端使用html5访问远程桌面

    背景: 2019年12月5日,微软宣布放弃浏览器Edge,转而推出一款新的浏览器,而这款新浏览器将会采用谷歌的Chromium 内核... 好了,反正已经无力吐槽,微软烂尾的项目也不是一个两个了,之前 ...

  5. 单引号、双引号与定界符——PHP

    单引号与双引号 单引号和双引号在echo输出时的区别 echo输出时,如果使用单引号,那么echo会把单引号之间的全部内容当成普通字符串输出,不能识别变量和转义字符(单引号串中的内容总被认为是普通字符 ...

  6. 内网渗透bypassuac和smb溢出

    对内网渗透需要渗透的目标主机处于跨网段和uac限制的情况做一个渗透记录 环境大致如下 拥有shell权限的win7(有uac限制,处于双网段) 和同win7同一网段下暂时无权限的靶机xp 先对有权限的 ...

  7. FastDFS集群-安装说明

    一.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线 ...

  8. dubbo初学采坑记

    写在前面的话 dubbo 现在是apache组织旗下的项目,相信国内也有很多人使用.最近一个同事离职,我就接手了他的项目.远程通讯就是用的dubbo框架来实现的.使用Intelij idea 写了一个 ...

  9. The usage of Markdown---引用

    目录 1. 序言 2. 引用与嵌套引用 3. 列表中的引用 更新时间:209.09.14 1. 序言   在本篇,我们来仔细谈一下Markdown的引用. 2. 引用与嵌套引用   在Markdown ...

  10. Prism - MVVM模式下,StackPanel中增加和删除View(UserControl)

    一.现实效果 在学习Prim,看官方的例子 03-CustomRegions 只是一个简单演示,这里用MVVM方式做个了相对完整的例子,实现效果如图: 点击Add,右侧StackPanel中增加一个V ...