JSP: 九个内置对象、四种属性范围

目录

九个内置对象 

四种属性范围

page属性范围(pageContext)

request属性范围

session属性范围

application属性范围 


九个内置对象 

比较熟悉的request.getParameter("参数名称"),显然request是一个类,而getParameter()是类中的方法,这个对象的实例化是由WEB容器帮助用户提供此对象的实例,这样的对象就被称为内置对象。在整个JSP之中一共提供有九个内置对象(背下来):

No内置对象类型描述
01requestjavax.servlet.http.HttpServletResquest服务器端接收客户端发送的用户请求信息
02responsejavax.servlet.http.HttpServletResponse服务器端对客户端的回应信息
03session

javax.servlet.http.HttpSession

保存每一个用户的信息
04applicationjavax.servlet.ServletContext描述这个应用服务上下文
05pageContextjavax.servlet.jsp.PageContext描述的是一个JSP页面的上下文信息
06configjavax.servlet.ServletConfig取得一些初始化的配置信息
07outjavas.servlet.jsp.JspWriter向客户端的浏览器进行HTML的输出
08pagejava.lang.Object描述一个JSP的页面
09exceptionjava.lang.Throwable每一个JSP的页面都不需要强制处理异常

javaee api文档:https://docs.oracle.com/javaee/7/api/toc.htm

对于以上的九个内置对象,一定要记住对应的类型,因为在进行文档查询的时候是查询的对应的类型,而不是对象名称。web也属于一个标准。

如果要想编写代码,那么对于以上的对象以及对象的类型必须记熟练。

四种属性范围

在WEB开发里面,四种属性范围是最为核心的概念,也就是说理解了四种属性范围的特点以及应用,那么就可以编写出合理的web程序。(需要强记下来)

所谓的属性范围是指一个对象保存的有效范围,可能某个对象只能在某个页面使用,也可能在整个web服务器上使用,或者某个对象只允许一个用户使用。而如果要想进行对象的处理操作,可以采用如下的处理方法完成:

  • 设置属性:public void setAttribute(String name, Object value) ;

  • 取得属性:public Object getAttribute(String name);

  • 删除属性:public void removeAttribute(String name);

拥有以上方法的对象一共有四个:pageContext(很多的时候简化为page)、request、session、application。属性保存的范围越长,其占用内存空间就会越久,服务器的并发量就会降低。

page属性范围(pageContext)

所谓的page属性范围,指的是在一个页面设置的对象信息,只能在本页面中取得,如果发生了跳转则无法取得。

范例:定义一个scope_a.jsp页面,在这个页面设置和取得page属性

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	pageContext.setAttribute("name", "ren");
	pageContext.setAttribute("birthday", new Date());
%>
<% // 取得属性
	String myName = (String) pageContext.getAttribute("name");
	Date myBirthday = (Date) pageContext.getAttribute("birthday") ; 	
%>
<h1>属性内容:<%=myName %> , <%=myBirthday %></h1>

在本页面之中同时进行属性的设置与取得。于是观察一下跳转后属性属性是否可以继续取得。

范例:创建page_scope_a.jsp,该页面主要负责创建属性信息。

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	pageContext.setAttribute("name", "ren");
	pageContext.setAttribute("birthday", new Date());
%>
<jsp:forward page="page_scope_a.jsp"></jsp:forward>

范例:创建page_scope_b.jsp,负责属性的接收

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	String myName = (String) pageContext.getAttribute("name");
	Date myBirthday = (Date) pageContext.getAttribute("birthday");
%>
<h1>属性内容:<%=myName %><%=myBirthday %></h1>

使用page范围定义的属性只有在本页面有效,跳转后无效,占用内存时间是最短的。

request属性范围

如果希望在发生服务器端跳转后依然希望设置的属性可以取得,那么就可以采用request对象进行属性的处理。

范例:定义request_scope_a.jsp页面

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	request.setAttribute("name", "ren");
	request.setAttribute("birthday", new Date());
%>
<jsp:forward page="request_scope_b.jsp"/>

范例:定义request_scope_b.jsp页面

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	String myName = (String) request.getAttribute("name");
	Date myBirthday = (Date) request.getAttribute("birthday");
%>
<h1>属性内容:<%=myName %> , <%=myBirthday %></h1>

需要注意的是设置了request属性范围之后,不管你中间跳过了多少页面,该属性依然可以被保留下来。但是如果此时使用的超链接(改变地址、客户端跳转),由于地址发生了改变,那么此时设置的request属性就将消失了。

只要地址不发生改变,则该请求将继续保留,即request设置的内容继续被保留,而一旦地址发生了改变,则表示第二次请求,那么之前的请求内容都将彻底的消失。

session属性范围

如果现在希望一个属性,在服务端跳转和客户端跳转都能保存下来,那么就可以使用session解决此类问题。

范例:通过session_scope_a.jsp页面设置属性

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	session.setAttribute("name", "ren");
	session.setAttribute("birthday", new Date());
%>
<jsp:forward page="session_scope_b.jsp"/>

范例:通过服务器端跳转到session_scope_b.jsp页面,此属性会保留下来

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	String myName = (String) session.getAttribute("name");
	Date myBirthday = (Date) session.getAttribute("birthday");
%>
<h1>属性内容:<%=myName %> , <%=myBirthday %></h1>
<a href="session_scope_c.jsp">超链接</a> 

范例:通过客户端跳转一样会保留

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	String myName = (String) session.getAttribute("name");
	Date myBirthday = (Date) session.getAttribute("birthday");
%>
<h1>c-属性内容:<%=myName %> , <%=myBirthday %></h1>

只要是通过一个浏览器设置的session的属性,中间不管经过多少次的跳转操作,该属性会一直保留,一直到用户彻底关闭浏览器为止。session在以后的开发之中主要是作用于用户的登录检测,如:邮箱发邮件,不管跳转多少个页面,始终在你的账号下。在整web开发之中,每一个session对象都是保存的一个用户(线程)的信息,这些信息并不是所有的用户共享的。

application属性范围 

如果希望现在设置的属性所有的用户(线程)都可以看见,那么就可以将该属性保存在服务器上下问之中,那么这就可以通过application进行属性保存。

范例:设置application的属性

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	application.setAttribute("name", "ren");
	application.setAttribute("birthday", new Date());
%>
<a href="appplication_scope_b.jsp">超链接</a> 

范例:取得属性

<%@ page pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<% // 设置属性
	String myName = (String) application.getAttribute("name");
	Date myBirthday = (Date) application.getAttribute("birthday");
%>
<h1>属性内容:<%=myName %><%=myBirthday %></h1>

将浏览器(注意是彻底关上,而不是关页面)关上,换一个浏览器也可以,依然可以取得:

这个属性已经保存在了Tomcat服务器之中,那么显然此时如果关闭了Tomcat服务器那么该属性一定会消失。此属性范围保存的是最长的,如果你在这个属性范围里面保存的对象数据过多,那么这个服务器的性能将严重下降,所以一般不要操作此类属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值