JSP学习笔记之内置对象

JSP中的内置对象一共有9个,此内置对象不需要经过实例化就可以使用。

pageContext:  javax.servlet.jsp.PageContext

request: javax.servlet.http.HttpServletRequest

response:javax.servlet.http.HttpServletResoponse

session:javax.servlet.http.HttpSession

application:javax.servlet.ServletContext

config:javax.servlet.ServletConfig

out:javax.servlet.jsp.JspWrite

page:java.lang.Object

exception:java.lang.Throwable

 

JSP中提供了四中属性范围(page,application,request,session)

这四中属性范围都包含了如下的方法:

public void setAttribute(String name,Object value)----设置属性

public Object getAttribute(String name)----取得属性

public void removeAttribute(String name)---删除属性

 

|---Page属性范围:在一个页面设置的属性范围跳转到其它的页面就无法访问了,但是在使用此属性的时候必须注意,虽然习惯上将页面范围称为page范围,但是实际操作的时候是使用pageContext内置对象完成的。

pageContext从字面上的定义,可以发现,是表示一个页面的上下文,可以表示一个页面中的所有内容,pageContext属性范围表示如下图所示:

 

实例如下:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<html>
  <head>
    
    <title>PageContext属性范围</title>

  </head>
  <body>
  <%--
  	通过使用pageContext.setAttribute()内置对象设置属性name和date
  --%>
  	<%
  		pageContext.setAttribute("name","李海超");
  		pageContext.setAttribute("date",new Date());
  	%>
  <%--
  	通过使用pageContext.getAttribute()内置对象取得name和date两个属性的值
  --%>
  <%
  		String rename = (String)pageContext.getAttribute("name");
  		Date   redate = (Date)pageContext.getAttribute("date");
  %>
  <%--
  	输出属性的值
  --%>
  		<h1>姓名:<%=rename %></h1>
  		<h1>日期:<%=redate %></h1>
  </body>
</html>


页面结果:

从以上结果可以看出,在同一个页面中可以取得我们设置的PageContext属性的值

但是如果我们将此页面进行了forward跳转后将不能得到此属性的值,值为空(null),因为此时是使用了forward跳转,是服务器端的跳转,从而证明page属性只能在本页中被使用,跳转后将不能使用。如果希望跳转后依然可以使用那就使用request属性范围即可

 

|---Request属性:表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直跳转下去

request属性范围应用实例:

属性设置页面----requestdemo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<html>
  <head>
    
    <title>PageContext属性范围</title>

  </head>
  <body>
  <%--
  	通过使用pageContext.setAttribute()内置对象设置属性name和date
  --%>
  	<%
  		request.setAttribute("name","李海超");
  		request.setAttribute("date",new Date());
  	%>
  <%--
  	对页面进行跳转
  --%>
	<jsp:forward page="request_forward.jsp"></jsp:forward>
  </body>
</html>


结果处理页面---reqeust_forward.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<html>
  <head>
    
    <title>PageContext属性范围</title>

  </head>
  <body>
  <%--
  	通过使用request.getAttribute()内置对象取得属性name和date
  --%>
  	<%
  		String rename=(String)request.getAttribute("name");
  		Date	date =(Date)request.getAttribute("date");
  	%>
  <%--
  	对页面进行跳转
  --%>
	<h1>姓名:<%=rename %></h1>
	<h1>年龄:<%=date %></h1>
  </body>
</html>


显示效果截图:

如果在第二个页面中继续使用<jsp:forward  page="" />标签跳转到第三个页面,那么在第三个页面中依然可以使用request.getAttribute()方法获取第一个页面中设置的值,但是如果是使用超链接导向第三个页面的话讲不能获取到值

 

|---Session范围用图表示如下:session属性范围不管页面如何跳转都是可以取得的,但是只针对一个用户,知道浏览器关闭

 

 

|---application属性范围:此属性范围是在服务器上设置一个范围,所以一旦设置后所有用户都可以访问此属性,直到此服务器关闭

|---关于pageContext属性的进一步研究

以上的四中属性其实都是通过pageContext属性一起设置上的,pageContext类中有一个setAttribute()方法被重载了

public void setAttribute(String name,Object o ,int scope)此方法中存在一个整型的scope变量,此变量就是用来设置各属性的保存范围

应用实例:

属性设置页面中使用了静态变量,PageContext.REQUEST_SCOPE来表示此pageContext的属性设置为request属性范围

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<html>
  <head>
    
    <title>PageContext属性范围</title>

  </head>
  <body>
  <%--
  	通过使用pageContext.setAttribute()内置对象设置属性name和date
  --%>
  	<%
  		pageContext.setAttribute("name","李海超",PageContext.REQUEST_SCOPE);
  		pageContext.setAttribute("date",new Date(),PageContext.REQUEST_SCOPE);
  	%>
  <%--
  	对页面进行跳转
  --%>
	<jsp:forward page="pagecontext_forward.jsp"></jsp:forward>
  </body>
</html>



属性获取页面中使用request.getAttribute()方法,而不是pageContext.getAttribute()方法

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page contentType="text/html; charset=GBK" %>
<html>
  <head>
    
    <title>PageContext属性范围</title>

  </head>
  <body>
  <%--
  	通过使用request.getAttribute()内置对象取得属性name和date
  --%>
  	<%
  		String rename=(String)request.getAttribute("name");
  		Date	date =(Date)request.getAttribute("date");
  	%>
  <%--
  	对页面进行跳转
  --%>
	<h1>姓名:<%=rename %></h1>
	<h1>年龄:<%=date %></h1>
  </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值