内置对象
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