一、 认识JSP的9种内置对象
一般对象需要实例化才可以调用,而JSP的内置对象是不用实例化就可以直接调用的对象。一个9个,要记住前6个及其对应的类型。如下表:
NO | JSP内置对象 | 对应的Java类型 |
1 | pageContxt | javax.servlet.jsp.PageContext |
2 | request | javax.servlet.http.HttpServletRequest |
3 | session | javax.servlet.http.HttpSession |
4 | application | java.servlet.ServletContext |
5 | response | java.servlet.http.HttpServletReponse |
6 | config | javax.servlet.ServletConfig |
7 | out | javax.servlet.jsp.JspWriter |
8 | page | javax.lang.Object |
9 | exception | java.lang.Throwable |
二、 四种属性范围
提示:所谓的属性范围就是一个属性设置之后,可以经过多少个页面后还可以访问的保存范围。四种属性范围分别指的是以下的四种:
·当前页(pageContext):一个属性只能在一个页面的取得,跳到其他页面无法取得。
·一次服务器请求范围(request):一个页面中设置的属性,只要经过了几次服务器跳转(forward),则跳转之后的页面还是可以取得。
·一次会话(session):一个用户设置的内容,只要是与此用户相关的页面都可以访问取得。
·上下文(application):在整个服务器上设置的属性,所以人都可以访问。
对四种属性的操作方法如下:
描述 | 方法 |
设置属性 | public void setAttribute(String name,Object value) |
获取属性 | public Object getAttribute(String name) |
删除属性 | Public void removeAttribute(String name) |
1、 page属性范围(也叫pageContext属性范围)
表示一个页面的上下文,pageContext的属性操作流程如图所示:
范例1:pageScopeDemo1.jsp 在此页中设置两个属性
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 此时设置的属性只能够在本页中取得 pageContext.setAttribute("name","MLDN") ; // 设置属性 pageContext.setAttribute("date",new Date()) ; // 设置属性 %> <% // 取得设置的属性 String refName = (String)pageContext.getAttribute("name") ; Date refDate = (Date)pageContext.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2> |
结果:
范例2:PageScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 此时设置的属性只能够在本页中取得 pageContext.setAttribute("name","MLDN") ; // 设置属性 pageContext.setAttribute("date",new Date()) ; // 设置属性 %> <jsp:forward page="PageScopeDemo03.jsp"/> |
经过了服务器跳转到PageScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 取得设置的属性 String refName = (String)pageContext.getAttribute("name") ; Date refDate = (Date)pageContext.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2>
|
结果为null,所以pageContext属性范围不能再其他页面获取。
如果现在希望跳转到其他页面也可以获取,则可以扩大属性范围,使用request属性范围即可。
2、request属性范围:
Request属性范围是指:只要是服务器跳转,则设置的request属性可以获取。
范例1:requestScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 此时设置的属性只能够在服务器跳转中取得 request.setAttribute("name","MLDN") ; // 设置属性 request.setAttribute("date",new Date()) ; // 设置属性 %> <jsp:forward page="RequestScopeDemo02.jsp"/> |
RequestScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <jsp:forward page="RequestScopeDemo03.jsp"/> |
RequestScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 取得设置的属性 String refName = (String)request.getAttribute("name") ; Date refDate = (Date)request.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2> <h3><a href="RequestScopeDemo04.jsp">RequestDemo04</a></h3> |
结果如下:
在单击RequestScopeDemo04进行超链接时
RequestScopeDemo04.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 取得设置的属性 String refName = (String)request.getAttribute("name") ; Date refDate = (Date)request.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2> |
获取不了,因为超链接是客户端的跳转,是非服务器跳转
3、 session属性范围
不管如何跳转,都可以取得的,当然:session指针对于一个用户。
SessionScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 此时设置的属性只能够在本页面相关的任何页中取得 session.setAttribute("name","MLDN") ; // 设置属性 session.setAttribute("date",new Date()) ; // 设置属性 %> <jsp:forward page="SessionScopeDemo02.jsp"/> |
SessionScopeDemo02.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 取得设置的属性 String refName = (String)session.getAttribute("name") ; Date refDate = (Date)session.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2> <h2><a href="SessionScopeDemo03.jsp">SessionScopeDemo03</a></h2> |
SessionScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% // 取得设置的属性 String refName = (String)session.getAttribute("name") ; Date refDate = (Date)session.getAttribute("date") ; %> <h2>姓名:<%=refName%></h2> <h2>日期:<%=refDate%></h2> |
运行得:
点击SessionScopeDemo03得到
但是,此时,如果新开一个浏览器,侧坑定无法获取,session指是保留一个人的信息,如果想让所有的用户都可以访问,则使用application属性范围。
4、 application属性范围
所有用户都可以范围的属性
注意:如果服务器设置过多的application属性,则会影响到服务器的性能。