EL 变量.
EL 存取变量数据的方法很单,例如Q?{username}。它的意思是取出某一范围中名UCؓusername的变量。因为我们ƈ没有指定哪一个范围的 usernameQ所以它的默认g先从Page 范围找,假如找不刎ͼ再依序到Request、Session、Application范围。假如途中扑ֈusernameQ就直接回传Q不再l找?去,但是假如全部的范围都没有扑ֈӞ回传null?/p>
属性范_jstl名称QEL中的名称
Page ------ pageScope;
Request ------ requestScope
Session ------ sessionScope
Application ------ applicationScope
我们也可以指定要取出哪一个范围的变量Q?br />
范例 说明
${pageScope.username} : 取出Page范围的username变量
${requestScope.username} : 取出Request范围的username变量
${applicationScope.username} : 取出Application范围的username变量
${sessionScope.username} : 取出Session范围的username变量
其中QpageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如Q?{sessionScope.username}是取出Session范围?username 变量。这U写法是不是比之前JSP 的写?
String username = (String) session.getAttribute("username");Ҏ、简z许?
自动转变cd
EL 除了提供方便存取变量的语法之外,它另外一个方便的功能是Q自动{变类型,我们来看下面q个范例Q?br />
${param.count + 20}
假若H体传来count的gؓ10Ӟ那么上面的结果ؓ30。之前没接触qJSP 的读者可能会认ؓ上面的例子是理所当然的,但是在JSP 1.2 之中不能q样做,原因是从H体所传来的|它们的类型一律是StringQ所以当你接收之后,必须再将它{为其他类型,如:int、float {等Q然后才能执行一些数学运,下面是之前的做法Q?br />
String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
4 "$ |, n5 [( K0 g8 jcount = count + 20;
EL 隐含对象
JSP?个隐含对象,而EL也有自己的隐含对象。EL隐含对象d?1 ?/p>
隐含对象 cd 说明
PageContext ---> javax.servlet.ServletContext : 表示此JSP的PageContext
PageScope ---> java.util.Map : 取得Page范围的属性名U所对应的?
sessionScope ---> java.util.Map : 取得Session范围的属性名U所对应的?br />
RequestScope ---> java.util.Map : 取得Request范围的属性名U所对应的?br />
applicationScope ---> java.util.Map : 取得Application范围的属性名U所对应的?br />
param ---> java.util.Map : 如同ServletRequest.getParameter(String name)。回传Stringcd的?br />
paramValues ---> java.util.Map : 如同ServletRequest.getParameterValues(String name)。回传String[]cd的?br />
header2 ---> java.util.Map : 如同ServletRequest.getHeader(String name)。回传Stringcd的?br />
headerValues ---> java.util.Map : 如同ServletRequest.getHeaders(String name)。回传String[]cd的?
cookie ---> java.util.Map : 如同HttpServletRequest.getCookies()
initParam ---> java.util.Map : 如同ServletContext.getInitParameter(String name)。回传Stringcd的?/p>
不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要叫双引号Q不然的话EL会默认吧你认为的帔R当做一个变量来处理Q这时如果这个变??个声明范围不存在的话会输出空Q如果存在则输出该变量的倹{?/p>
属?Attribute) ?范围(Scope)
与范围有关的EL 隐含对象包含以下四个QpageScope、requestScope、sessionScope 和applicationScope
它们基本上就和JSP的pageContext、request、session和application一栗不q必L意的是,q四个隐含对象只能用来取得范围属性|即JSP中的getAttribute(String name)Q却不能取得其他相关信息Q例如:JSP中的request对象除可以存取属性之外,q可以取得用Lh参数或表头信息等{?br /> 但是在EL中,它就只能单纯用来取得对应范围的属性|例如Q我们要在session 中储存一个属性,它的名称为usernameQ在JSP 中用session.getAttribute("username") 来取得username 的| 但是在EL中,则是使用${sessionScope.username}来取得其值的?/p>
cookie
所谓的cookie是一个小的文本文gQ它是以key、value的方式将Session Tracking的内容记录在q个文本文g内,q个文本文g通常存在于浏览器的暂存区内。JSTLq没有提供设定cookie的动作,因ؓq个动作通常?是后端开发者必d做的事情Q而不是交l前端的开发者。假若我们在cookie 中设定一个名UCؓuserCountry的|那么可以使用${cookie.userCountry}来取得它?/p>
header 和headerValues
header 储存用户览器和服务端用来沟通的数据Q当用户要求服务端的|页Ӟ会送出一个记载要求信息的标头文gQ例如:用户览器的版本、用戯机所讑֮的区域等其他相关数据。假若要取得用户览器的版本Q即${header["User-Agent"]}。另外在鲜少Z下,有可能同一标头名称拥有不同的|此时必须改ؓ使用headerValues 来取得这些倹{?/p>
注意:因ؓUser-Agent 中包?#8220;-”q个Ҏ字符Q所以必M?#8220;[]”Q而不能写?br /> $(header.User-Agent)
initParam <context-param> 那么我们可以直接?${initParam.userid}来取得名UCؓuseridQ其gؓmike 的参数。下面是之前的做法:String userid = (String)application.getInitParameter("userid"); pageContext q些对象可有效地改善代码的硬~码问题Q如面中有一A标签链接讉K一个SERVLETQ如果写M该SERVLET的HTTP地址那么如果当该 SERVLET的SERVLET-MAPPING改变的时候必要修改源代码,q样l护性会大打折扣?/p>
像其他属性一P我们可以自行讑֮web 站台的环境参?Context)Q当我们惛_得这些参数initParam像其他属性一P我们可以自行讑֮web 站台的环境参?Context)Q当我们惛_得这些参?br />
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
</web-app>
我们可以使用 ${pageContext}来取得其他有关用戯求或面的详l信息。下表列Z几个比较常用的部?br />
表达?说明
${pageContext.request.queryString} : 取得h的参数字W串
${pageContext.request.requestURL} : 取得h的URLQ但不包括请求之参数字符?即servlet的HTTP地址?br />
${pageContext.request.contextPath} : 服务的webapplication的名U?br />
${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是否为新的,所谓新的sessionQ表C刚由server产生而client未使用.
${pageContext.session.id} : 取得session的ID
${pageContext.servletContext.serverInfo} : 取得L端的服务信息
解决办法如下Q打开注册表编 辑器Q在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager中找到PendingFileRenameOperationsQ删除该键|q个键值是安装E序暂挂目Q只要找到对应的应用E序清除? p了)Q关闭注册表~辑器。重新安装SQL Server 2000卛_。(有改动)