JSP内置对象--基础

内置对象

1) out  

             ------------------ 是客户端输出 -------【在实际应用中使用表达式<%= %>来输出比使用out.println使用更方便更常用。】


2)pageContext 

           -----------是一个功能强大的内置对象,几乎可以操作各种内置对象。pageconext的主要功能是在JSP文件中的支持。

      setAttribute( )作用范围只是本页面。

 

<span style="color:#000000;"><%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@page import="java.util.*" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
  pageContext.setAttribute("name", "##");  //只可以用于本页面
  pageContext.setAttribute("birthday",new Date());
  %>
  <%   
   String username = (String) pageContext.getAttribute("name");
   Date userbirthday = (Date) pageContext.getAttribute("birthday");
   %>
   <p>姓名:<%=username%></p>
   <p>生日:<%=userbirthday%></p>

</body>
</html></span>
这里即为pageContext的setAttibute应用,输出


如果存在了跳转关系,则无法取得,a.jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@page import="java.util.*" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
  pageContext.setAttribute("name", "##");
  pageContext.setAttribute("birthday",new Date());
  %>
 
<jsp:forward page="err.jsp"></jsp:forward>
</body>
</html>
err.jsp:

<%@ page language="java"  contentType="text/html; charset=utf-8"
    pageEncoding="UTF-8"%>
    <%@page import="java.util.*" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
  <%   
   String username = (String) pageContext.getAttribute("name");
   Date userbirthday = (Date) pageContext.getAttribute("birthday");
   %>
   <p>姓名:<%=username%></p>
   <p>生日:<%=userbirthday%></p>
</body>
</html>
则输出结果为:

但是pageContext可以操作四种范围。 可以通过 pageContext.setAttribute(name , value , scope)<scope有:PAGE_SCOPE  . REQUEST_SCOPE .  SESSION_SCOPE  以及APPLICATION_SCOPE>直接指定scope的种类

<body>
<%
pageContext.setAttribute("name", "三",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("birthday",new Date(),PageContext.REQUEST_SCOPE);//注意格式
  %>
<jsp:forward page="err.jsp"></jsp:forward>
</body>
在err.jsp中使用request方法获取数据,则在服务器跳转时仍旧可以获取之前的设置。


3) request     // 接收客户端的HTTP请求

             request属性范围在服务器跳转之后所设置的内容依然会保存下来、

                       getPrameter(String name)http://write.blog.csdn.net/postedit

                       getPrameterValues(String name)

                       setAttribute(String name,obj )

                       setAttribute(name)-----返回由name指定的属性值,如果不存在就返回null

                 request. setAttribute( )作用范围对比pageContext.setAttribute:

    

<body>
<%
  request.setAttribute("name", "##");
  request.setAttribute("birthday",new Date());
  %>
 
<jsp:forward page="err.jsp"></jsp:forward> // ------forward 是服务器跳转-------------------
</body>
            err.jsp:

<body>
  <%   
   String username = (String) request.getAttribute("name");
   Date userbirthday = (Date) request.getAttribute("birthday");
   %>
   <p>姓名:<%=username%></p>
   <p>生日:<%=userbirthday%></p>
</body>
</html><span style="color:#993300;">   ----------输出正常</span>

但是如果通过超链接跳转,地址栏也会发生改变,这种统一成为客户端跳转。是无法传递request属性的。即上面的jsp文件跳转改为 <a  href="err.jsp"></a>,结果姓名生日为null


关于request属性范围的理解:

request表示的客户端请求,正常情况下一次请求服务器只给一次回应,那么如果是服务器的跳转,请求的地址栏没有改变,所以也就相当于回应了一次。但是如果地址栏改变,就相当于发出了第二次请求,则第一次请求的内容肯定已经消失,所以无法取得。


4) session 

所以如果是客户端跳转就相当于发出了两次请求。那么肯定第一次的请求不再存在。如果希望不管是服务器端还是客户端请求都可以保存的话,则可以扩大范围。即扩大到session。

把request改成session:

<body>
<%
  session.setAttribute("name", "##");
  session.setAttribute("birthday",new Date());
  %>
<a href="err.jsp">点击这里跳转</a>  //--------超链接是客户端跳转---------
</body>

err.jsp:

<body>
  <%   
   String username = (String) session.getAttribute("name");
   Date userbirthday = (Date) session.getAttribute("birthday");
   %>
   <p>姓名:<%=username%></p>
   <p>生日:<%=userbirthday%></p>
</body>

点击跳转时输出正常。即客户端跳转正常。但是如果此时打开一个新的浏览器,则无法取得之前设置的session了。  因为每一个session 值保存在当前的浏览器中,并且可以从相关的页面中取得。

对于服务器而言,每一个连接到他的客户端都是一个session。

5) application

如果想要属性设置一次后,不管是否新的了浏览器打开都可以访问的话,则可以使用application属性范围了。因为application属性直接保存在服务器上,所有的用户(每一个session)都可以访问了。只有服务器关闭了,才不可以取

如果同时设置很多和application的话服务器的性能肯定会降低,而且四种属性范围都是保存在服务器的,这时候尽可能使用保存范围小的,减小服务器的压力。


6)response 
7)exception
8)page
9) config





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值