JSP的九大内置对象

一、JSP的运行原理

    每个jsp页面在第一次被访问时,web容器都会把请求交给jsp引擎,jsp引擎会把jsp翻译成_jspservlet (其实就是一个servlet),然后按照servlet的调用方法进行调用。由于第一次访问会被翻译成servlet所以会比较慢,但是被再次访问后,如果jsp引擎发现没什么变化就会直接发送给客户。

   jsp引擎在调用_jspservlet()方法时,会传递或创建9个相关的对象。开发JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

九大内置对象
名称类型作用域
requestjavax.servlet.HttpServletRequestRequest
responsejavax.servlet.HttpServletResponsePage
applicationjavax.servlet.ServletContextApplication
outjavax.servlet.jsp.JspWriterPage
pageContextjavax.servlet.PageContextPage
pagejavax.lang.ObjectPage
exceptionjavax.lang.ExceptionPage
sessionjavax.servlet.http.HttpSessionSession
configjavax.servlet.ServletConfigPage

 

四大作用域对应的常量值
PagePAGE_SCOPE
RequestREQUEST_SCOPE
SessionSESSION_SCOPE
ApplicationAPPLICATION_SCOPE

 

 

tips:需要放在<% %>中,以为本质上是Servlet也就是Java的语法

二、内置对象的使用

由于之前已经介绍了session,request,response已经介绍过,就不再这里介绍了。

 

2.1、application对象

 application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

2.2 out 对象

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

2.3 pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

2.4 config 对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

2.5 page 对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

2.6 exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

可以看出pageContext的对象的作用很大,因为他可以调用其它的对象,我们简单的介绍一下pageCntext对象的用法。

三、pageContext对象的用法


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    pageContext.setAttribute("pageContextName","pageContext设置的值");
    request.setAttribute("requestName","request设置的值");
    application.setAttribute("applicationName","application设置的值");
    session.setAttribute("sessionName","session设置的值");
    pagecontext.setAttribute("removeAtt","删除");


    pageContext.setAttribute("requestScopeName","Request作用域的值",PageContext.REQUEST_SCOPE);
%>
<%
    pageContext.removeAttribute("removeAtt");
    //findAttribute()返回的数据类型是Object的类型所以需要强制转换,查找的顺序是page-request-session-application
    String s1= (String) pageContext.findAttribute("pageContextName");
    String s2= (String) pageContext.findAttribute("requestName");
    String s3= (String) pageContext.findAttribute("applicationName");
    String s4= (String) pageContext.findAttribute("sessionName");
    String s5= (String) pageContext.findAttribute("session1Name");

    /*pageContext的获取方法*/
    String scopeName= (String) pageContext.getAttribute("requestScopeName",PageContext.REQUEST_SCOPE);
    /*对应的作用域的获取方法*/
    String scopeName1=(String) request.getAttribute("requestScopeName");
    String scopeName2=(String) session.getAttribute("requestScopeName");
%>
<hr/>
<p><%=s1 %></p>
<p><%=s2 %></p>
<p><%=s3 %></p>
<p><%=s4 %></p>
<p><%=s5 %></p>

<%--访问作用域外的内容--%>
<p><%=scopeName %></p>
<p><%=scopeName1 %></p>
<p><%=scopeName2 %></p>
<h2>EL表达式获取</h2>
<p>${pageContextName}</p>
<p>${sessionName}</p>
<p>${applicationName}</p>
<p>${requestName}</p>
<p>${session1Name}</p><%--什么都没有--%>

<p>${requestScopeName}</p>


<p>${removeAtt}</p>//已经删除了

</body>
</html>

3.1 PageContext引入和跳转到其他资源

  PageContext类中定义了一个forward方法(用来跳转页面)和两个include方法(用来引入页面)来分别简化和

RequestDispatcher.forward方法和include方法。
  方法接收的资源如果以“/”开头, “/”代表当前web应用。

四、JSP的属性范围

当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得     page
一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。 request
一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效)  session
上下文中:在整个服务器上设置的属性,所有人都可以访问  application

 

使用场景:

1、request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
2、session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
3、application(servletContext):如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值