Jsp九大内置对象及四个作用域

一、九大对象:

内置对象:又叫隐含对象,不需要预先申明就可以在脚本代码和表达式中随意使用。
1、out:javax.servlet.jsp.JspWriter类型,代表输出流的对象。作用域为page(页面执行期)。
2、request:javax.servlet.ServletRequest的子类型,此对象封装了web浏览器或其他客户端生成地http请求细节(参数,属性,头标和数据)。作用域为request(用户请求期)。
3、response:javax.servlet.ServletResponse的子类型,此对象封装了放回到http客户端的输出,向页面作者提供设置响应头标和状态码的方式。经常用来设置http标题,添加cookie,设置响应内容的类型和状态,发送http重定向和编码URL。作用域为page(页面执行期)。
4、pageContext:javax.servlet.jsp.PageContext(抽象类)类型,作用域为page(页面执行期)。此对象提供所有四个作用域层次的属性查询和修改能力,提供了对JSP页面所有对象及命名空间的访问,它也提供了转发请求到其它资源和包含其他资源的方法:该对象的方法都是抽象方法。
5、session:javax.servlet.HttpSession类型,主要用于跟踪对话,用于存储特定的用户会话所需的信息。作用域为session(会话期)。
HttpSession是一个类似哈希表的与单一web浏览器会话相关的对象,它存在与http请求之间,可以存储任何类型的命名对象。如果不需要在请求之间跟踪绘画对象,可以通过page指令中指定session=“false”,需要记住的是pageContent对象也可以与session.getAttribute(),session.setAttribute()一样的方式取得并设置会话属性。
6、Application:javax.servlet.ServeletContext类型,servelet的环境通过调用getServletConfig().getContext()方法获得。作用域是Application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方式。
7、config:javax.servelet.ServeletConfig.作用域为page(页面执行期)。
8、page:java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。
9、exception:java.lang.Throwable。通过jsp错误页面中一个catch块已经溢出但没有捕获的java.lang.Throwable的任意实例,传向了errorPage的URL。作用域为page(页面执行期)。注意exception只有在page指令中具有属性isErrorPage=”true”时才有效。

jsp的九大内置对象:

内置对象对象名称类型作用域
request请求对象javax.servelet.ServletRequestRequest
response响应对象javax.servlet.SrvletResponsePage
pageContext页面上下文对象javax.servlet.jsp.PageContextPage
session会话对象javax.servlet.http.HttpSessionSession
application应用程序对象javax.servlet.ServletContextApplication
out输出对象javax.servlet.jsp.JspWriterPage
config配置对象javax.servlet.ServletConfigPage
page页面对象javax.lang.ObjectPage
exception异常对象javax.lang.ThrowablePage

说明:
1>request对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。
常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。

2>response对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。

3>pageContext对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。
常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope。一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

4>session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

概要
HTTP是无状态(stateless)协议;Web Server 对每一个客户端请求都没有历史记忆;Session用来保存客户端状态信息;由Web Server 写入;存于客户端;客户端的每次访问都把上次的session记录传递给Web Server;Web Server读取客户端提交的session来获取客户端的状态信息

5>application 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

6>out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

7>config 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

8>page 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

9>exception 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage=”true “%>”的JSP文件中使用。

二、四个作用域:pageContext、request、session、application。

作用域规定的是变量的有效期限。

如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。

application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他作用域中都是不会发生的,page, request,session都是完全隔离的,无论如何修改都不会影响其他人的数据。

我们使用public Object getAttribute(String name)获得变量值,使用public void setAttribute(String name, Object value)将变量值保存到对应作用域中。举个pageContext的例子就是:

// page
Integer countPage = (Integer) pageContext.getAttribute("countPage");
if (countPage == null) {
    pageContext.setAttribute("countPage", 1);
} else {
    pageContext.setAttribute("countPage", countPage + 1);
}

这里先从pageContext中取出名为countPage的整数,因为返回的都是java.lang.Object类型,所以需要强制转换成我们需要的整形。这里取得的变量如果不存在就会返回null,通过判断countPage == null来辨别变量是否存在,如果不存在就设置为1,如果存在就进行累加,最后使用setAttribute()方法将修改后的变量值放入pageContext。

将其中的pageContext换成request, session, application就可以操作其他三个作用域中的变量。

三、JSP常用指令

指令:描述JSP文件转换成JSP服务器所囊执行的Java代码的控制信息,用于指定整个JSP文件的相关信息,并设置JSP页面的相关属性。

1、page指令:用来定义JSP文件中的全局属性,他描述了与页面相关的一些信息,其作用域为他所在的jsp页面和其包含的文件。

<%@page
    [language = "java"]  
    [extends = "package.class"]
    [import = "{package.class|package.*},..."]
    [session = "true|false"]
    [buffer="nonw|8KB|sizeKB"]
    [autoFlush = "true|false"]
    [isThreadSafe = "true|false"]
    [info = "text"]
    [errorPage = "relativeURL"]
    [contextType = "mimeType[;charset = characterSet]"]
    [pageEncoding = "pageEncoding"]
    [isErrorPage = "true|false"]
%>

2、include指令:用于当前jsp页面中加载需要插入的文件代码,即为页面插入一个静态文件,如jsp页面,HTML页面,文本文件或是一段java程序,这些加载的代码和原有的jsp代码合并成一个新的jsp文件。

    <%@include  file="main.jsp" %>

3、taglib指令:用于指定页面中使用的标签库以及其自定义标签的前缀。

   <%@taglib uri="tagLibraryURL" prefix="tagPrefix"%>

四、jsp常见动作:

在客户请求jsp页面时,可以利用jsp动作动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面。动作元素名和属性名都是大小写敏感的

1、:用来为其他动作插入一个或者多个参数。

2、:用来把指定文件插入正在生成的页面中。

<jsp:include page="hello.jsp" flush="true">
   <jsp:param name="参数名" value="参数值" />
</jsp:include>

3、:用来加载在jsp页面中使用到的javaBean。这个功能非常实用,能够实现javaBean组件的重用。

<jsp:useBean id="time" class="java.util.Date" />
<%= time%>
    <jsp:useBean id="time" type="java.io.Serializable" beanName="java.util.Date"/>
    <%=time%>

4、:用来设置、修改已实例化Bean中的值。

    <jsp:useBean id="time" type="java.io.Serializable" beanName="java.util.Date">
       <jsp:setProperty name="time" property="hours" param="hh"/> 
       <jsp:setProperty name="time" property="minutes" param="mm"/> 
       <jsp:setProperty name="time" property="seconds" param="ss"/> 
   </jsp:useBean>

5、:获取指定的Bean属性值并转换为字符串输出。

<jsp:getProperty name="time" property="hours"/>

6、:用于转发客户端的请求到另一个页面或者另一个Servlet文件中去。

<jsp:forward page="login.jsp">
    <jsp:param name="user" value="zhangsan"/>
</jsp:forward>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值