EL和JSP中的细节

[size=large][align=center][b][color=blue]EL中的细节[/color] [/b][/align]
:evil: 1、 EL的隐式对象
作用域属性的Map: pageScope,requestScope,sessionScope,applicationScope
请求参数的Map: param,paramValues
请求首部的Map: header,headerValues
上下文初始化参数(不是Servlet初始化参数!)的Map:initParam
cookie的Map:cookie
pageContext:唯一一个不是Map的隐式对象,它是pageContext对象的一个实际引用。

:evil: 2、 requestScope不是请求对象
隐式的requestScope只是请求作用域属性的一个Map,而不是request对象本身!
例如:得到HTTP请求方法
Method is: ${request. method} 错啦,没有request隐式对象
Method is: ${requestScope. method} 错啦,确实有一个隐式对象requestScope,但是它不是请求对象本身。
Method is: ${reqeustContext. method} 对啦!可以通过pageContext来得到其他的一切~~

:evil: 3、 禁用EL
在DD中放置<el-ignored>元素
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el -ignored >
true
</el -ignored >
</jsp-property-group>
</jsp-config>

使用isELIgnored page指令属性
<%@ page isELIgnored=”true” %>
注:page指令优先于DD设置,如果在DD中的<el-ignored>设置与isELIgnored page指令属性有冲突,总是听指令的。

:evil: 4、 initParam只能得到上下文初始化参数
servlet初始化参数是用<init-param>配置的,而上下文参数使用<context-param>配置,initParam不能得到servlet中的初始化参数。

:evil: 5、 使用点号(.)操作符访问性质和映射值
:roll: 1第一个变量(点号左边的变量)可以是一个隐式对象,也可以是一个属性,点号右边可以是一个映射键(如果第一个变量是映射),也可以是一个bean性质(如果第一个变量是一个JavaBean属性。
:roll: 2如果表达式中变量后面有一个点号,点号左边的变量必须是一个Map或一个bean
:roll: 3点号右边必须是一个Map键或一个bean性质。
:roll: 4pageContext隐式对象是一个bean,所有其他隐式对象都是Map。

:evil: 6、[]比点号更强大
:roll: 1如果表达式中变量后有一个[],左边的变量则有更多选择,可以是Map、bean、List或是数组。
:roll: 2如果[]里是一个String直接量(即用引号引起的串),这可以是一个Map键,或是一个bean性质,还可以是List或数组中的索引。数组和List中的String索引会强制转换为int。
例如:
Servlet中:
String[] pauling={“hello”,”you”,”no”,”cat”};
request.setAttribute(“pauling”,pauling);
JSP中:
First num is: ${pauling[0]}
First num is: ${pauling[“0”]}
两种表达都是输出一样的结果。

:roll: 3在[]中,可以使用嵌套表达式,EL中都是表达式,可以任意嵌套,深度不限。

:roll: 4
Servlet中:
java.util.Map pauling=new java.util.HashMap();
pauling.put{“pig”,”big”};
pauling.put{“cat”,”fly”};”
request.setAttribute(“pauling”,pauling);

JSP中:
you will see: ${pauling[“pig”]}
----you will see: big

如果你写成:
you will see: ${pauling[pig]} 就不对啦!!!
注:如果[]里的内容没有加引号,容器就会计算[]中的内容,搜索与改名字绑定的属性,并替换为这个属性的值(如果有一个同名的隐式对象,那么总是使用隐式对象)


[align=center][color=blue][b]JSP中的细节[/b][/color][/align]
:evil: 1、 JSP中的隐式对象 API
out------------------------JspWriter
request------------------------HttpServletRequest
response------------------------HttpServletResponse
session------------------------HttpSession
application------------------------ServletContext
config------------------------ServletConfig
exception------------------------Throwable
pageContext------------------------PageContext
page------------------------Object

:evil: 2、 JSP的生命周期
JSP文件---servlet类源文件(.java)---编译成Java servlet类(.claa)--
加载这个servlet类,实例化并初始化,为每个请求建立一个单独的线程,并调用servlet的service()方法。

:evil: 3、 禁用JSP中的脚本元素(scriptlet、java表达式或声明)
在DD中放一个<scripting-invalid>标记:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>
true
</scripting-invalid>
</jsp-property-group>
</jsp-config>


:arrow: :arrow: :arrow:
[b][align=center][color=blue]小测试[/color][/align][/b]
:wink: 1、jspInit()方法可以使用哪些类型的对象?
A、 ServletConfig
B、 ServletContext
C、 JspServletConfig
D、 JspServletContext
E、 HttpServletRequest
F、 HttpServletResponse
答案:AB

:wink: 2、<%@ page isELIgnored=”true”%>
它有什么作用?
A、 什么作用都没有,没有定义这个page指令
B、 如果有这个指令,JSP容器不会计算Web应用中所有JSP中的表达式语言代码
C、 JSP容器会把包含这个指令的JSP看作是良构的XML文件
D、 如果JSP中包含这个指令,JSP容器不应计算这个JSP中的表达式语言代码
E、 只有当DD中声明了一个<el-ignored>true</el-ignored>元素,而且其URL模式包含当前JSP时,这个page指令才会禁用
答案:D

:wink: 3、哪些是合法的JSP隐式变量?
A、steam
B、context
C、exception
D、listener
E、application
答案:CE

:wink: 4、 给定以下DD元素:
<jsp-property-group>
<url-patten>*.jsp</url-patten>
<el-ignored>true</el-ignored>
</jsp-property-group>
这个元素有什么作用?
A、 有指定扩展名映射的所有文件在JSP容器看来都是良构的的XML文件
B、 有指定扩展名映射的所有文件应该包含由JSP容器计算的表达式语言代码
C、 默认的,有指定扩展名映射的所有文件不应该包含由JSP容器计算的表达式语言代码
D、 没有任何作用,容器不理解这个标记
E、 尽管这个标记合法,但它是冗余的,因为这是容器的默认行为
答案:C

:wink: 5、 下面表达哪些是合法的?
A、<%=(Math.random()+5)*2; %>
B、<%=String s=”foo” %>
C、<%=new String[3] %>
D、<%=new Count() %>
E、<%=5>3 %>
答案CDE

待补充…… :) :) :)
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值