JSP九大内置对象、四个作用域及EL十一大内置对象

内置对象(又叫隐含对象):不需要预先声明就可以在页面或表达式中随意使用

1、JSP九大内置对象

内置对象一(out):

    out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。其最常用的方法为print,可在页面中显示字符串信息。out的作用域为page:

<%out.print("Hello"); %>

内置对象二(request):

    request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求(也就是request作用域)。request的常用方法有getParameter(String name)根据表单组件名称获取页面提交数据,getParameterValues(String name)获取一组以相同名称命名的表单组件提交的数据,setCharacterEncoding(String charset)在调用getParameter()方法前进行设定,用于解决中文乱码,getRequestDispatcher(String path)返回一个javax.servlet.RequestDispatcher对象,该对象的forward()方法用于转发请求:

<%
    Object obj = new Object();
    request.getParameter("uname");
    request.getParameterValues("rid");
    request.setCharacterEncoding("UTF-8");
    request.getRequestDispatcher("目标页面").forward(request,response);
%>

内置对象三(response):

    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。response的常用方法有addCookie(Cookie cookie)向客户端添加cookie,serContentType(String type)设置HTTP响应的contentType类型,setCharacterEncoding(String charset)设置响应所采用的字符编码类型,sendRedirect(String location)将请求重新定位到一个新的地址上,这是地址栏上的地址会改变:

<%
    response.addCookie(cokkie);
    response.setContentType("type");
    response.setCharacterEncoding("utf-8");
    response.sendRedirect("重新定位的页面");
%>

内置对象四(session):

    session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使用对象类型。session的常用方法有setAttribute(String key,Object value)以key/value的形式将对象保存到session中,getAttribute(String key)通过key值获取session中保存的value,invalidate()强制session对象失效,getId()获取sessionid,setMaxInactiveInterval(int interval)设置session的非活动时间,getMaxInactiveInterval()获取session的有效非活动时间,removeAttribute(String key)删除session中对应key的value值:

<%
   Object obj = new Object();
   session.setAttribute("key",obj);
   session.getAttribute("key");
   session.setMaxInactiveInterval(100);
   session.getMaxInactiveInterval();
   session.getId();
   session.removeAttribute("key");
   session.invalidate();
%>

内置对象五(application):

    application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。application常用方法有setAttribute(String key,Object value)以key/value的形式将对象存储到application中,getAttribute(String key)通过key获取application中存储的对象,getRealPath(String path)返回相对路径的真实路径:

<%
   Object obj = new Object();
   application.setAttribute("key",obj);
   application.getAttribute("key");
   application.getRealPath("路径名");
%>

内置对象六(pageContext):

    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。pageContext的常用方法有getRequest()获取request对象,getResponse()获取response对象,getSession()获得session对象,getOut()获取out对象,setAttribute(String key,Object value)保存属性,getAttribute(String key)获取属性,include("url")请求指定的资源,并且将目标资源的响应结果包含在调用页面的响应中:


<%
   Object obj = new Object();
   pageContext.getRequest();
   pageContext.getResponse();
   pageContext.getSession();
   pageContext.getOut();
   pageContext.setAttribute("key",obj);
   pageContext.getAttribute("key");
   pageContext.include("资源地址");
%>

内置对象七(page):

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

内置对象八(config): 

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

内置对象九(exception):

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

    因为后三个对象很少在JSP页面中使用,所以在这里不过多介绍。

四个作用域

以便描述各大对象都分属于什么作用域,下面我们就通过一张简单的表格来看看各大作用域的信息共享范围:

    第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。

    第二个作用域是request,他在当前请求中有效,request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址。

    第三个作用域是session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话。

    第四个作用域是application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。

2、EL十一大内置对象

1)什么是EL表达式:EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

2)EL 运算符

类型

符号

算术型

+、-、*、/、div、%、mod

逻辑型

and、&&、or、||、!、not

关系型

==、eq、;!=、 ne、;>、gt、;<=、le、;>=、ge、;<、lt;

关系型

a==b?c:d;

empty

3、EL内置对象 (11个)

以下表格引用自: https://www.cnblogs.com/sharpel/p/5870114.html

序号

类别

标识符

描述

1

JSP

pageContext

PageContext 实例对应于当前页面的处理

2

作用域

pageScope

与页面作用域属性的名称和值相关联的 Map 类

3

requestScope

与请求作用域属性的名称和值相关联的 Map 类

4

sessionScope

与会话作用域属性的名称和值相关联的 Map 类

5

applicationScope

与应用程序作用域属性的名称和值相关联的 Map 类

6

请求参数

param

按名称存储请求参数的主要值的 Map 类

7

paramValues

将请求参数的所有值作为 String 数组存储的 Map 类

8

请求头

header

按名称存储请求头主要值的 Map 类

9

headerValues

将请求头的所有值作为 String 数组存储的 Map 类

10

Cookie

cookie

按名称存储请求附带的 cookie 的 Map 类

11

初始化参数

initParam

按名称存储 Web 应用程序上下文初始化参数的 Map 类

4、补充: JSP内置对象不是EL内置对象,二者不互通!!!

5、 jsp页面java脚本:

pageScope:

<%=pageContext.getAttribute("name") %> 等价于 EL表达式:${pageScope.name }或者${name }

<% pageContext.setAttribute("student", "张三"); %>
<h1>${pageScope.student}</h1>
<h1>${student}</h1>

requestScope:

<%=request.getAttribute("name") %> 等价于 EL表达式:${requestScope.name }或者${name }

<% request.setAttribute("student", "张三"); %>
<h1>${requestScope.student}</h1>
<h1>${student}</h1>

sessionScope:

<%=session.getAttribute("name") %> 等价于 EL表达式:${sessionScope.name }或者${name }

<% session.setAttribute("student", "张三"); %>
<h1>${sessionScope.student}</h1>
<h1>${student}</h1>

applicationScope:

<%=application.getAttribute("name") %> 等价于 EL表达式:${applicationScope.name }或者${name }

<% application.setAttribute("student", "张三"); %>
<h1>${applicationScope.student}</h1>
<h1>${student}</h1>

param:

<%=request.getParameter("name") %> 等价于 EL表达式:${param.name }

<h1>${param.student}</h1>

paramValues:

<%=request.getParameterValues("name") %> 等价于 EL表达式:${paramValues.name },结果是个数组

<h1>${paramValues.student}</h1>

<%=request.getParameterValues("name")[0] %> 等价于 EL表达式:${paramValues.name [0]}

<h1>${paramValues.student[0]}</h1>

header:

<h1>${header}</h1>
<h2>${header["cookie"]}</h2>
<h2>${header.cookie}</h2>

headerValues:

<h1>${headerValues}</h1>
<h2>${headerValues["cookie"]}</h2>
<h2>${headerValues.cookie}</h2>

<h1>${headerValues}</h1>
<h2>${headerValues["cookie"][0]}</h2>
<h2>${headerValues.cookie[0]}</h2>

cookie:

<h1>${cookie}</h1>
<h2>${cookie["JSESSIONID"]}</h2>
<h2>${cookie["JSESSIONID"].value}</h2>
<h2>${cookie.JSESSIONID}</h2>
<h2>${cookie.JSESSIONID.value}</h2>

initParam:

<context-param>
    <param-name>student</param-name>
    <param-value>张三</param-value>
</context-param>
${initParam.student}

pageContext:

<h1>${pageContext}</h1>
<h1>${pageContext.out}</h1>
<h1>${pageContext.request}</h1>
<h1>${pageContext.response}</h1>
<h1>${pageContext.session}</h1>
<h1>${pageContext.servletContext}</h1>
<h1>${pageContext.page}</h1>
<h1>${pageContext.servletConfig}</h1>
<h1>${pageContext.exception}</h1>

${xxxScope.name }表示指定从pageScope域里面获取name的值。

${name }表示从最小作用域开始搜索name属性的值,不管哪个作用域,找到就返回。

作用域从小到大排序:pageScope<requestScope<sessionScope<applicationScope

11个内置对象,除了pageContext是对象外,其他10个均是java的map映射,且除了cookie是cookie名称和cookie对象的映射外,其他9个均是属性和其值的映射。

JSP开发人员可以在EL表达式中使用EL隐式对象,而无须任何显式的编码活声明。隐式对象就是设计用来为 JSP 编程提供方便的,通过隐式对象,用EL编写的代码就可以直接使用JSP页面的一些最常用的地方。总共有11个隐式对象,这11个隐式对象可以分为5大类:
  *JSP隐式对象。
  *作用域访问隐式对象。
  *参数访问隐式对象。
  *首部访问隐式对象。
  *初始化参数访问隐式对象。
         JSP隐式对象类中只有一个EL隐式对象,这就是pageContext隐式对象。这与同名的JSP隐式对象实际上就是同一个对象。余下的EL隐式对象都是Java映射(map),他们只是提供了更容易的途径来访问pageContext隐式对象的某些性质。
     共有4个作用域隐式对象,分别为pageScope, requestScope, sessionScope和applicationScope. 这些隐式对象都是映射,利用他们可以很容易的访问作用域属性。例如:附加到request作用域的username属性可以通过EL表达式${ requestScope.username}来直接访问。
     有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即param和paramValues. param 是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。
    有3个首部访问隐式对象,可以用于访问HTTP首部,分别是header, headerValues和cookie。如果想以原始的方式访问HTTP首部或cookie, 这些映射就很有用。
    另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在web.xml中设置,其实就是<context-param>里面的内容。

        EL表达式在获取Map的值或Bean的属性值是,可以使用“点”的方法,也可以使用“下标”的方法。’{initParam.a}与{initParam[′a′]},它们是完成的东西相同的。但是,如果Map的键或Bean的属性名中包含下划线或横岗时,那么就必须使用“下标”方法,例如:{initParam[‘a_a’]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值