JSP内置对象和EL内置对象

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
首先说一下JSP内置对象 : 

       JSP内置对象类型映射表  

对象名                     类型                          作用域 

request         javax.servlet.ServletRequest            RequestScope 

response        javax.servlet.ServletResponse           PageScope 

pageContext     javax.servlet.jsp.PageContext           PageScope 

session         javax.servlet.http.HttpSession          SessionScope 

application     javax.servlet.ServletContext            ApplicationScope 

out             javax.servlet.jsp.JspWriter             PageScope 

config          javax.servlet.ServletConfig             PageScope 

page            java.lang.Object                        PageScope 

exception       javax.lang.Throwable                    PageScope 

  至于九大内置对象(也叫隐式对象)如何应用,我想我在此无须多说,这方面文章一搜一大片。我想提一下pageContext这个对象。 
  pageContext这个对象比较特殊,由它的类型可知它是jsp特有的,servlet中没有此对象。pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的session,也可以取本页面所在的 application的某一属性值,他相当于页面中所有功能的集大成者。 
   再说一下EL内置对象:  
  EL为了方便输出一些表达式的值,自己也定义了一些内置对象,应用这些内置对象方便的获取想要输出的值 
JSP EL的内置对象和JSP的内置对象是两回事,不能互用,即JSP EL内置对象只能在EL中表达式中使用, 
JSP的内置对象也只能在JSP中使用而不能在EL中直接用 
但是两种有个对应关系,即EL的内置对象可以调用JSP对应内置对象的保存数据,从而方便的显示 

JSP EL的内置对象: 
pageContext 
pageScope 
requestScope 
sessionScope 
applicationScope 
param 
paramValues 
header 
headerValues 
cookie 
initParam 
可以分为以下三类: 
1.与范围有关的隐含对象  
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope; 
它们基本上就和JSP的pageContext、request、session和application一样; 
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。 
例如:我们要取得session中储存一个属性username的值,可以利用下列方法: 
    session.getAttribute("username") 取得username的值, 
在EL中则使用下列方法 
    ${sessionScope.username} 
2.与输入有关的隐含对象  
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。 
例如我们要取得用户的请求参数时,可以利用下列方法: 
    request.getParameter(String name) 
    request.getParameterValues(String name) 
在EL中则可以使用param和paramValues两者来取得数据。 
    ${param.name} 
    ${paramValues.name} 
3.其他隐含对象  
cookie 
JSTL并没有提供设定cookie的动作, 
例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。 
header和headerValues 
header 储存用户浏览器和服务端用来沟通的数据 
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。 
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。 
initParam 
initParam取得设定web站点的环境参数(Context) 
例:一般的方法String userid = (String)application.getInitParameter("userid"); 
    可以使用 ${initParam.userid}来取得名称为userid 
pageContext 
pageContext取得其他有关用户要求或页面的详细信息。 
    ${pageContext.request.queryString}         取得请求的参数字符串 
    ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串 
    ${pageContext.request.contextPath}         服务的web application 的名称 
    ${pageContext.request.method}           取得HTTP 的方法(GET、POST) 
    ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0) 
    ${pageContext.request.remoteUser}         取得用户名称 
    ${pageContext.request.remoteAddr }         取得用户的IP 地址 
    ${pageContext.session.new}             判断session 是否为新的 
    ${pageContext.session.id}               取得session 的ID 
    ${pageContext.servletContext.serverInfo}   取得主机端的服务信息 

怎么样,看了之后恍然大悟了没(*^__^*) 嘻嘻……  我想至少也会让你对内置对象清晰了很多吧~ 这可是俺平生处子博文哦 ~~鼓励一下吧(*^__^*) 嘻嘻…… 
================================================================================= 
补充一下EL表达式: 
一、EL简介 
   1).语法结构 
     ${expression} 
   2).[]与.存取器 
     EL 提供.和[]两种存取器来存取数据。 
     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如: 
         ${user.My-Name}应当改为${user["My-Name"] } 
     如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如: 
         ${sessionScope.user[data]}中data 是一个变量 
   3).变量 
     EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。 
     因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。 
     假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。 
     属性范围在EL中的名称 
         Page          PageScope 
         Request          RequestScope 
         Session          SessionScope 
         Application      ApplicationScope 
4).运算符 
1.算术运算符有五个:+、-、*或$、/或div、%或mod 
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge 
3.逻辑运算符有三个:&&或and、||或or、!或not 
4.其它运算符有三个:Empty运算符、条件运算符、()运算符 
例:${empty param.name}、${A?B:C}、${A*(B+C)} 
5) EL函数(functions) 
语法:ns:function( arg1, arg2, arg3 …. argN) 
其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置 
二、EL注意点: 
1. ${logininfo.username}  
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引 
用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]} 
与${logininfo.username}达到了同样的效果。 
“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”, 
此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免 
这一现象的出现)。 
与之等同的JSP Script大致如下: 
LoginInfo logininfo = 
(LoginInfo)session.getAttribute(“logininfo”); 
String username = logininfo.getUsername();
 
可以看到,EL大大节省了编码量。 
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于 
${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是 
否定义了变量logininfo,如果没有找到则依次到Request、Session、 
Application 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的 
变量,则返回null. 
可以看出: 在EL中得到变量直接用变量名即可,它会自动调用get()方法  
如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围: 
${pageScope.logininfo.username} 
${requestScope.logininfo.username} 
${sessionScope.logininfo.username} 
${applicationScope.logininfo.username} 
2. <%@ page isELIgnored="true"%>  
表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁 

止.JSP2.0中默认的启用EL语言.

下面我们分别对每个作用域对象进行讲解。

表 13.1. el中的作用域

el中的作用域对应关系
pageContext(1)当前页的pageContext对象
pageScope把page作用域中的数据映射为一个map对象
requestScope(2)把request作用域中的数据映射为一个map对象
sessionScope把session作用域中的数据映射为一个map对象
applicationScope把application作用域中的数据映射为一个map对象
param对应request.getParameter()
paramValues(3)对应request.getParameterValues()
header(4)对应request.getHeader()
headerValues对应request.getHeaderValues()
cookie(5)对应request.getCookies()
initParam(6)对应ServletContext.getInitParamter()

(1)

例子中的${pageContext.request.contextPath}返回的是request.getContextPath()的值,在此例中就是/13-04,我们经常使用这个来拼接jsp中的绝对路径。

这里的${pageContext.request.contextPath}是一种特殊用法,不能使用${request.contextPath}的形式替代。

(2)

pageScope, requestScope, sessionScope, appliationScope都可以看作是Map型变量,调用其中的数据可以使用${pageScope.name}或${pageScope["name"]}的形式,这两种写法是等价的。

在某些情况下只能使用${pageScope["content-type"]},这里不能写成${pageScope.content-type},jsp无法解析连字符(-)会出现错误。

(3)

需要注意的是${paramValues.name}得到的是一个字符串数组,如果需要获得其中某个值,还需要使用${paramValues.name[0]}指定数组中的索引。

这与下面的${headerValues.name}是相似的。

(4)

${header.name}会取得http请求中的header参数,现实工作中很少用到这里的数据。

例子中使用Host是指请求访问的主机地址,包括ip和端口号。而Referer比较有趣,如果用户通过超链接跳转过来的,Referer会保存上次访问页面的地址,我们就可以通过它来统计哪些用户是从哪里转来的了。

(5)

${cookie.name}将获得对应cookie的对象,比如我们用jsp将一段cookie发送给客户端。

Cookie cookie = new Cookie("username", "Username in cookie");
response.addCookie(cookie);
                

创建一个名称为username,值为"Username in cookie"的Cookie对象,然后发送给客户端。

然后我们就可以使用${cookie.username}获得这个cookie了,${cookie.username.name}获得cookie名称,${cookie.username.value}获得cookie值。

(6)

ServletContext.getInitParamter()指的应用的初始变量,这些变量都是定义在web.xml中的。

<context-param>
    <param-name>username</param-name>
    <param-value>username with context param</param-value>
</context-param>
                

${initParam.username}就会得到这里的变量值。

以上都是死记硬背的东西,建议实际用到的时候翻看一下就好了,演示代码都放在13-04下,为了获得param和cookie还要点击一下最下边的连接才可以。

运算符

el表达式中支持java中所有的操作符,并且还有一些扩展,下面我们简要做一下对照。

表 13.2. 加减乘除四则运算

符号说明
+
-
*
/或div
%或mod求余

表 13.3. 比较运算

符号说明
==或eq相等(equals)
!=或ne不相等(not equals)
<或lt小于(less than)
>或gt大于(greater than)
<=或le小于等于(less than or equals)
>=或ge大于等于(greater than or equals)

表 13.4. 逻辑运算

符号说明
&&或and逻辑和
||或or逻辑或
!或not取反

表 13.5. 特殊运算

符号说明
empty是否为null或空字符串
? :三元运算符

下面上所有运算符的显示结果,顺便说一下如果想在jsp中显示${name}而不让jsp把它当作el计算出来,可以写成/${name},这样最后显示的结果就是${name}了。


JSP原理、JSP脚本、JSP内置对象JSP指令、EL表达式的概念语法、EL表达式使用、JSTL、SpringMVC中使用ELJSTL JSP(Java Server Pages):java服务器端页面 可以理解为:一个特殊的页面,其中既可以定义html标签,又可以定义java代码定义java代码:<%java代码%> 一、JSP原理 1、查看当前tomcat配置目录 Using CATALINA_BASE: "C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_30_javaweb_2" ... 阅读详情

相关推荐

ELJSP相关内置对象

EL内置对象: pageContext pageScope requestScope sessionScope applicationScope param paramValues header headerValues cookie initParam

EL11个内置对象

EL11个内置对象一、概述El一共11个内置对象,无需创建即可使用。这11个内置对象中有10个是Map类型,最后一个是pageContext对象l  pageScopel  requestScopel  sessionScopel  applicationScopel  param;l  paramValues;l  header;l  headerValues;l  initParam;l  c...

职业炮灰的博客 2395

EL内置对象

EL的11个内置对象 pageContext   pageScope requestScope sessoinScope appliationScope   param paramValues   header headerValues   cookie initParam   通过EL内置对象获得数据 1)pageContext:该对象既是El内置对象也是JS...

热爱不止,前行不息 810

EL表达式的内置对象及其作用域

EL 表达式的主要功能是进行内容显示。为了显示方便,在表达式语言中,提供了许多内置对象,通过不同的内置对象的设置,表达式语言可以输出不同的内容

unber的博客 1035

EL表达式语法、作用域对象内置对象简介

本文主要介绍了EL表达式是什么,与作用域别名,运算表达式,内置对象的内容

青灯文案的博客 1738

【整理】 - jsp九大内置对象整理总结EL表达式内置对象整理

jsp九大内置对象整理总结EL表达式内置对象整理 一、什么是内置对象 1、我的理解是: jsp内置对象,不需要new来创建的对象。 无论你使不使用,它都存在于jsp页面,不离不弃。 男生们都希望有这样的对象,一下子还有九个---- 咳咳,继续搬砖! 二、jsp内置对象整理 1、如下表格 序号 对象名称 对象类型 作用简述 1 request javax.servlet.Servl...

LawssssCat的博客 512

jsp内置对象el内置对象一样吗?

尽管JSP内置对象EL内置对象都用于在JSP页面中访问数据,但它们在用法范围上略有不同。JSP内置对象主要用于处理请求响应,以及与会话应用程序相关的操作,而EL内置对象主要用于简化数据访问操作,包括请求参数、作用域属性等。EL是一种表达式语言,用于在JSP页面中访问操作数据。JSP提供了一组预定义的对象,通常称为隐式对象内置对象,在JSP页面中可以直接使用,无需显式声明或初始化。JSP内置对象EL(表达式语言)内置对象并不相同,尽管它们在JSP应用程序中具有类似的用途。

weixin_44943389的博客 106

jspEL内置对象的区别

首先谈下jsp内置对象: 内置对象有9个:out, config, page, pageContext, request, response, application, session, exception.其中pageContext能获取其他个内置对象(一个顶8个), 是一个很独特的对象.

qq_28337005的博客 499

JSPEl内置对象解析

JSP中的九大内置对象: 1、out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据; 2、config(ServletConfig):对应“真身”中的ServletConfig; 3、page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象; 4、pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象; 5、exception(Throwable):只有在错误页面中可以使用这个对象; 6、request(

xiaotiancaililuo的博客 249

JSP 9个内置 EL的 11个内置对象

#JSP的 9个内置对象 所谓内置对象,就是我们可以直接在jsp页面中使用这些对象,不用创建 四大作用域对象: pageContext -> 作用域仅限于当前的页面 [PageContext]     ->还可以获取到其他八个内置对象 request -> 作用域仅限于一次请求,只要服务器对该请求做出了响应,这个域中存的值就没有了 [Htt...

syl2850246的博客 273

JSP内置对象EL内置对象及区别解析

JSP共有九大内置对象: (1) HttpSession类的session对象 作用:主要用于来分别保存每个用户信息,与请求关联的会话;          会话状态维持是Web应用开发者必须面对的问题。 (2) HttpServletRequest类的request对象 作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。 (3) HttpSer

aizhuyanwei的博客 693

jsp内置对象el表达式语言常见api

jsp的九大内置对象el表达式语言常见api

Demon_and_Angle_的博客 671

jsp九大内置对象整理总结EL表达式内置对象整理

jsp九大内置对象整理总结EL表达式内置对象整理一、什么是内置对象1、我的理解是: jsp内置对象,不需要new来创建的对象。 无论你使不使用,它都存在于jsp页面,不离不弃。 男生们都希望有这样的对象,一下子还有九个---- 咳咳,继续搬砖!二、jsp内置对象整理1、如下表格序号对象名称对象类型作用简述1requestjavax.servlet.ServletRequest接收客户端请求2re...

HaHa_Sir的博客 1168

Num.04- jsp九大内置对象EL表达式

jsp的九大内置对象 文章目录jsp的九大内置对象pageContext pageContext 作用范围:只能在同一个界面得到,在不同界面无法得到 在同一页面获取值 index页面代码: &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;%@ page contentType=&amp;amp;amp;amp;amp;amp;amp;amp;quot;text/html;charset=UTF-8&amp;amp;amp;amp;amp;amp;amp

JAVA & HTML 314

javaweb-jsp内置对象动作标签+el

javaweb-jsp内置对象动作标签+el Jsp内置对象(这一部分的概念性东西比较多,就不贴代码了,随便敲两下就能看到效果) (本文需要的Jar包:commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar) 1.不要在jsp页面中创建,可以直接使用的对象 ...

weixin_30613727的博客 155

Jsp的九大内置对象EL的11内置对象

虽然现在基本上使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的。像request、response、session这些对象,即便使用其他框架也是会经常用到的。因此十分有了解的必要。 这些对象可以在JSP页面中调用,而不需要事先定义,这使得JSP编程更加的方便快捷。其实这些内置对象都对应着某个Servlet类,在JSP被翻译成Ser

菜鸟腾飞 8809
上一篇: java关键字transient
下一篇: Servlet生命周期
morningsun1990
博客等级 码龄15年 9粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值