jsp EL 语言

表达式基础

1:表达式语言入门

${“”}  注意  1如果是字符串,要加上引号,不然没有结果。

 ${ }        2:如果是数字 没有必要加上。

                       3:使用 . 还是用  [ ] 访问表单数据 ?下面是原则


   EL
提供.[]两种运算符来存取数据。
  
当要存取的属性名称中包含一些特殊字符(当要访问的对象中含有非数字和字母的特殊符号时候 比如 .  - 、“?”等 .?等并非字母或数字的符号,就一定要使用 []。例如:
        ${user.My-Name}
应当改为${user["My-Name"] }
   
如果要动态取值时就可以用[]来做,而.无法做到动态取值。例如:

        ${sessionScope.user[data]}
data 是一个变量        

 

Eg

<body>

        <%

        request.setAttribute("user", "xiao zhang");

        request.setAttribute("pwd", "xiao");

        String isNull=null;

       %>

        <h1>Hello   EL!</h1>

        <p>${"这是我的第一个表达式语言-----PS输出的内容是字符串"}</p>

        <p>输出数字${49000}</p>

        <hr>

        <form method="post" action="helloEL.jsp">

            <input type="text" name="attribute1">

            <input type="text" name="attribute2">

            <input type="submit" value="提交在下面看结果">

        </form>

        <hr> 下面是 用表达式语言 冲表单中获取的数据:

        <p>表单属性1${param.attribute1}</p>

         <p>表单属性2${param.attribute2}</p>

         <hr>empty判断对象是否是空

         ${empty isNull}

</body>

 

结果:

 

 

表达式语言EL 运行原理和基本语法

EL的隐含对象
对象                      

  类 型                  说 明
1PageContext      | javax.servlet.ServletContext |表示此JSP

解说:PageContext 隐含对象,表示jsp页面的上下文信息,他提供了访问以下对象的方法:

AServletContext 对象:ServletContext上下文信息。

Bsession对象 :客户端session对象

CRequest对象:请求对象。

D:Response 对象:对客户端响应对象。


———————————————————————————–
PageScope        | java.util.Map
类型

 

————————————————————————————-
RequestScope  | java.util.Map |
取得Request范围的属性名称所对应的值


————————————————————————————-
sessionScope     | java.util.Map         |
取得Session范围的属性名称所对应的值
————————————————————————————-
applicationScope | java.util.Map         |
取得Application范围的属称所对应的值
————————————————————————————-
param           | java.util.Map |
如同ServletRequest.getParameter(String name)返回String类型的值


—————————————————————————————-
paramValues   | java.util.Map |
如同ServletRequest.getParameterValues   | (String name)。返回String []类型的值
—————————————————————————————–
header       | java.util.Map   |
如同ServletRequest.getHeader(String name) 返回String类型的值
——————————————————————————————
headerValues     |    java.util.Map |
如同ServletRequest.getHeaders(String name) 。返回String []类型的值
——————————————————————————————
cookie   |     java.util.Map         |
如同HttpServletRequest.getCookies( )
——————————————————————————————
initParam   | java.util.Map |
如同ServletContext.getInitParameter(String name)。返回String类型的值

——————————————————————————————-

cookie对象
所谓的cookie是一个小小的文本文件,它是以keyvalue的方式将Session Tracking的内容记录在这个文本文件内,
这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作,
因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。如果我们在cookie中设定一个名
称为userCountry的值,那么可以使用${cookie.userCountry}来取得它

header
headerValues(请求报头对象)
header
储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,
例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。如果要取得用户浏览器的版本,
${header["User-Agent"]}。另外在很少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues来取得这些值。
注意:因为User-Agent中包含“-”这个特殊字符,所以必须使用“[]”而不能写成${header.User-Agent}

initParam
就像其他属性一样,我们可以自行设定web应用的环境参数(Context),当我们想取得这些参数时,
可以使用initParam隐含对象去取得它,例如:当我们在web.xml中设定如下:
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
<context-param>
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
</web-app>
那么我们就可以直接使用 ${initParam.userid}来取得名称为userid,其值为mike的参数。
下面是之前的做法:String userid = (String)application.getInitParameter(”userid”);

pageContext对象
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下面列出了几个比较常用的部分。
Expression                               
说 明
${pageContext.request}                  |
取得请求对象
${pageContext.session}                  |
取得session对象
${pageContext.request.queryString}      |
取得请求的参数字符串
${pageContext.request.requestURL}       |
取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath}      |
服务的web application的名称
${pageContext.request.method}           |
取得HTTP的方法(GETPOST)
${pageContext.request.protocol}         |
取得使用的协议(HTTP/1.1
HTTP/1.0)
${pageContext.request.remoteUser}       |
取得用户名称

${pageContext.request.remoteAddr }      |
取得用户的IP地址
${pageContext.session.new}              |
判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用
${pageContext.session.id}               |
取得sessionID
${pageContext.servletContext.serverInfo}|
取得主机端的服务信息

 

eg

代码

<body>

        <h1>Hello    EL2</h1>

        <hr>pageContext的一些属性

        <p>得到pageContext.request.serverPort${pageContext.request.serverPort}</p>

        <p>pageContext.request.serverName${pageContext.request.serverName}</p>

        <p>得到pageContext.request.remotePort${pageContext.request.remotePort}</p>

        <p>得到pageContext.request.remoteHost${pageContext.request.remoteHost}</p>

        <p>得到pageContext.request.localPort${pageContext.request.localPort}</p>

        <p>得到pageContext.request.remoteAddr${pageContext.request.remoteAddr}</p>

        <p>得到pageContext.request.localName${pageContext.request.localName}</p>

        <p>得到pageContext.request.contentType${pageContext.request.contentType}</p>

        <p>得到pageContext.request.parameterNames${pageContext.request.parameterNames}</p>

        <p>得到pageContext.request.protocol${pageContext.request.protocol}</p>

        <p>得到pageContext.request.secure${pageContext.request.secure}</p>

        <p>得到pageContext.response.contentType${pageContext.response.contentType}</p>

        <p>得到pageContext.response.committed${pageContext.response.committed}</p>

        <p>得到pageContext.response.bufferSize${pageContext.response.bufferSize}</p>

        <p>得到pageContext.session.id${pageContext.session.id}</p>

        <p>得到pageContext.session.new${pageContext.session.new}</p>

        <hr>header的一些属性

        <p>得到header${header}</p>

        <hr>headerValues的一些属性

        <p>得到headerValues${headerValues}</p>

        <hr>cookie的一些属性

        <p>得到cookie["user"]${cookie["user"]}</p>

        <hr>pageScope的一些属性

        <p>得到pageScope${pageScope}</p>

        <hr>sessionScope的一些属性

        <p>得到sessionScope${sessionScope}</p>

 

 

        <p></p>

</body>

 

运行结果:

Hello EL2


pageContext的一些属性

得到pageContext.request.serverPort8080

pageContext.request.serverNamelocalhost

得到pageContext.request.remotePort53281

得到pageContext.request.remoteHost0:0:0:0:0:0:0:1

得到pageContext.request.localPort8080

得到pageContext.request.remoteAddr0:0:0:0:0:0:0:1

得到pageContext.request.localName0.0.0.0

得到pageContext.request.contentType

得到pageContext.request.parameterNamesjava.util.Hashtable$EmptyEnumerator@b51404

得到pageContext.request.protocolHTTP/1.1

得到pageContext.request.securefalse

得到pageContext.response.contentTypetext/html;charset=UTF-8

得到pageContext.response.committedfalse

得到pageContext.response.bufferSize8192

得到pageContext.session.id68104F3410536B7ABBB25F6010007B58

得到pageContext.session.newfalse


header的一些属性

得到headerorg.apache.commons.el.ImplicitObjects$7@17cf6b6


headerValues的一些属性

得到headerValuesorg.apache.commons.el.ImplicitObjects$8@1295fe8


cookie的一些属性

得到cookie["user"]


pageScope的一些属性

得到pageScopeorg.apache.commons.el.ImplicitObjects$1@157b46f


sessionScope的一些属性

得到sessionScopeorg.apache.commons.el.ImplicitObjects$3@1071c84

关于变量的作用范围

Jsp的变量范围有 pageScope   requestScope   responseScope  sessionScope   applicatiionScope

${userId}假设 各个作用范围都有一个userId属性,如何查找?系统  查找时候,会按照范围从小到大的顺序,也就是上面的从左到右的方式查找。一旦查找到就立即结束返回。

 

如果行访问大范围的一个userId 就要加上范围限定符:比如requestScop.userId

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值