﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Bobo</title><link>http://www.blogjava.net/fulinbo/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 09:55:50 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 09:55:50 GMT</pubDate><ttl>60</ttl><item><title>EL表达式常用语法</title><link>http://www.blogjava.net/fulinbo/archive/2010/04/29/319658.html</link><dc:creator>fulinbo</dc:creator><author>fulinbo</author><pubDate>Thu, 29 Apr 2010 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/fulinbo/archive/2010/04/29/319658.html</guid><wfw:comment>http://www.blogjava.net/fulinbo/comments/319658.html</wfw:comment><comments>http://www.blogjava.net/fulinbo/archive/2010/04/29/319658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fulinbo/comments/commentRss/319658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fulinbo/services/trackbacks/319658.html</trackback:ping><description><![CDATA[参考地址：<a href="http://hi.baidu.com/garywan/blog/item/a00fbb954af8a16755fb9632.html">http://hi.baidu.com/garywan/blog/item/a00fbb954af8a16755fb9632.html</a><br />
<br />
EL : 全名为Expression Language。它的语法很简单，它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构：${sessionScope.user.sex}<br />
所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是：从Session的范围中，取得<br />
用户的性别。假若依照之前JSP Scriptlet的写法如下：<br />
User user = (User)session.getAttribute("user");<br />
String sex = user.getSex( );<br />
两者相比较之下，可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。<br />
.与 [ ] 运算符<br />
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的：<br />
${sessionScope.user.sex}等于${sessionScope.user["sex"]}<br />
. 和 [ ] 也可以同时混合使用，如下：<br />
${sessionScope.shoppingCart[0].price}<br />
回传结果为shoppingCart中第一项物品的价格。<br />
不过，以下两种情况，两者会有差异：<br />
(1) 当要存取的属性名称中包含一些特殊字符，如. 或 &#8211; 等并非字母或数字的符号，就一定要使用 [ ]，例如：${user.My-Name }<br />
上述是不正确的方式，应当改为：${user["My-Name"] }<br />
(2) 我们来考虑下列情况：<br />
${sessionScope.user[data]}<br />
此时，data 是一个变量，假若data的值为"sex"时，那上述的例子等于${sessionScope.user.sex}；<br />
假若data 的值为"name"时，它就等于${sessionScope.user.name}。因此，如果要动态取值时，就可以用上述的方法来做，但. 无法做到动态取值。
<p>EL 变量.<br />
EL 存取变量数据的方法很简单，例如：${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的 username，所以它的默认值会先从Page 范围找，假如找不到，再依序到Request、Session、Application范围。假如途中找到username，就直接回传，不再继续找下 去，但是假如全部的范围都没有找到时，就回传null。</p>
<p>属性范围（jstl名称）EL中的名称<br />
Page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------&nbsp;&nbsp;&nbsp; pageScope;<br />
Request&nbsp;&nbsp;&nbsp;&nbsp; ------&nbsp;&nbsp; requestScope<br />
Session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------&nbsp;&nbsp; sessionScope<br />
Application ------&nbsp;&nbsp; applicationScope</p>
<p>我们也可以指定要取出哪一个范围的变量：<br />
范例&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明<br />
${pageScope.username} : 取出Page范围的username变量<br />
${requestScope.username} : 取出Request范围的username变量<br />
${applicationScope.username} : 取出Application范围的username变量<br />
${sessionScope.username} : 取出Session范围的username变量</p>
<p>其中，pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象，由它们的名称可以很容易猜出它们所代表的意思，例如：${sessionScope.username}是取出Session范围的 username 变量。这种写法是不是比之前JSP 的写法:<br />
String username = (String) session.getAttribute("username");容易、简洁许多.</p>
<p>自动转变类型<br />
EL 除了提供方便存取变量的语法之外，它另外一个方便的功能就是：自动转变类型，我们来看下面这个范例：<br />
${param.count + 20}</p>
<p>假若窗体传来count的值为10时，那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的，但是在JSP 1.2 之中不能这样做，原因是从窗体所传来的值，它们的类型一律是String，所以当你接收之后，必须再将它转为其他类型，如：int、float 等等，然后才能执行一些数学运算，下面是之前的做法：<br />
String str_count = request.getParameter("count");<br />
int count = Integer.parseInt(str_count);</p>
<p>4 "$ |, n5 [( K0 g8 jcount = count + 20;</p>
<p>EL 隐含对象<br />
JSP有9个隐含对象，而EL也有自己的隐含对象。EL隐含对象总共有11 个</p>
<p>隐含对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明<br />
PageContext ---&gt; javax.servlet.ServletContext : 表示此JSP的PageContext<br />
PageScope ---&gt; java.util.Map : 取得Page范围的属性名称所对应的值.<br />
sessionScope ---&gt; java.util.Map : 取得Session范围的属性名称所对应的值<br />
RequestScope ---&gt; java.util.Map : 取得Request范围的属性名称所对应的值<br />
applicationScope ---&gt; java.util.Map : 取得Application范围的属性名称所对应的值<br />
param ---&gt; java.util.Map : 如同ServletRequest.getParameter(String name)。回传String类型的值<br />
paramValues ---&gt; java.util.Map : 如同ServletRequest.getParameterValues(String name)。回传String[]类型的值<br />
header2 ---&gt; java.util.Map : 如同ServletRequest.getHeader(String name)。回传String类型的值<br />
headerValues ---&gt; java.util.Map : 如同ServletRequest.getHeaders(String name)。回传String[]类型的值.<br />
cookie ---&gt; java.util.Map : 如同HttpServletRequest.getCookies()<br />
initParam ---&gt; java.util.Map : 如同ServletContext.getInitParameter(String name)。回传String类型的值</p>
<p>不过有一点要注意的是如果你要用EL输出一个常量的话，字符串要叫双引号，不然的话EL会默认吧你认为的常量当做一个变量来处理，这时如果这个变量 在4个声明范围不存在的话会输出空，如果存在则输出该变量的值。</p>
<p>属性(Attribute) 与 范围(Scope)<br />
与范围有关的EL 隐含对象包含以下四个：pageScope、requestScope、sessionScope 和applicationScope</p>
<p>它们基本上就和JSP的pageContext、request、session和application一样。不过必须注意的是，这四个隐含对象只能用来取得范围属性值，即JSP中的getAttribute(String name)，却不能取得其他相关信息，例如：JSP中的request对象除可以存取属性之外，还可以取得用户的请求参数或表头信息等等。<br />
但是在EL中，它就只能单纯用来取得对应范围的属性值，例如：我们要在session 中储存一个属性，它的名称为username，在JSP 中使用session.getAttribute("username") 来取得username 的值， 但是在EL中，则是使用${sessionScope.username}来取得其值的。</p>
<p>cookie<br />
所谓的cookie是一个小小的文本文件，它是以key、value的方式将Session Tracking的内容记录在这个文本文件内，这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作，因为这个动作通常都 是后端开发者必须去做的事情，而不是交给前端的开发者。假若我们在cookie 中设定一个名称为userCountry的值，那么可以使用${cookie.userCountry}来取得它。</p>
<p>header 和headerValues<br />
header 储存用户浏览器和服务端用来沟通的数据，当用户要求服务端的网页时，会送出一个记载要求信息的标头文件，例如：用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本，即${header["User-Agent"]}。另外在鲜少机会下，有可能同一标头名称拥有不同的值，此时必须改为使用headerValues 来取得这些值。</p>
<p>注意:因为User-Agent 中包含&#8220;-&#8221;这个特殊字符，所以必须使用&#8220;[]&#8221;，而不能写成<br />
$(header.User-Agent)</p>
<p>initParam<br />
就像其他属性一样，我们可以自行设定web 站台的环境参数(Context)，当我们想取得这些参数initParam就像其他属性一样，我们可以自行设定web 站台的环境参数(Context)，当我们想取得这些参数<br />
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />
xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>" version="2.4"&gt;：</p>
<p>&lt;context-param&gt;<br />
&lt;param-name&gt;userid&lt;/param-name&gt;<br />
&lt;param-value&gt;mike&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;/web-app&gt;</p>
<p>那么我们就可以直接使用 ${initParam.userid}来取得名称为userid，其值为mike 的参数。下面是之前的做法：String userid = (String)application.getInitParameter("userid");</p>
<p>pageContext<br />
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分<br />
表达式 说明<br />
${pageContext.request.queryString} : 取得请求的参数字符串<br />
${pageContext.request.requestURL} : 取得请求的URL，但不包括请求之参数字符串,即servlet的HTTP地址。<br />
${pageContext.request.contextPath} : 服务的webapplication的名称<br />
${pageContext.request.method} : 取得HTTP的方法(GET、POST)<br />
${pageContext.request.protocol} : 取得使用的协议(HTTP/1.1、HTTP/1.0)<br />
${pageContext.request.remoteUser} : 取得用户名称<br />
${pageContext.request.remoteAddr} : 取得用户的IP地址<br />
${pageContext.session.new} : 判断session是否为新的，所谓新的session，表示刚由server产生而client尚未使用. <br />
${pageContext.session.id} : 取得session的ID<br />
${pageContext.servletContext.serverInfo} : 取得主机端的服务信息</p>
<p>这些对象可有效地改善代码的硬编码问题，如页面中有一A标签链接访问一个SERVLET，如果写死了该SERVLET的HTTP地址那么如果当该 SERVLET的SERVLET-MAPPING改变的时候必须要修改源代码，这样维护性会大打折扣。</p>
<img src ="http://www.blogjava.net/fulinbo/aggbug/319658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fulinbo/" target="_blank">fulinbo</a> 2010-04-29 10:02 <a href="http://www.blogjava.net/fulinbo/archive/2010/04/29/319658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLServer常见问题（一）</title><link>http://www.blogjava.net/fulinbo/archive/2010/03/25/316495.html</link><dc:creator>fulinbo</dc:creator><author>fulinbo</author><pubDate>Thu, 25 Mar 2010 00:56:00 GMT</pubDate><guid>http://www.blogjava.net/fulinbo/archive/2010/03/25/316495.html</guid><wfw:comment>http://www.blogjava.net/fulinbo/comments/316495.html</wfw:comment><comments>http://www.blogjava.net/fulinbo/archive/2010/03/25/316495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fulinbo/comments/commentRss/316495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fulinbo/services/trackbacks/316495.html</trackback:ping><description><![CDATA[<p style="text-align: left;" mce_style="text-align: left;">今天在安装
sqlservser2000时，弹出一个窗口提示：一些文件被以前装的某个程序给挂起了，需要重启电脑。重启了电脑还是不行，打开注册表一看，还真有文
件被挂起了。</p>
<p style="text-align: left;" mce_style="text-align: left;">解决办法如下：打开注册表编
辑器，在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session
Manager中找到PendingFileRenameOperations，删除该键值（这个键值是安装程序暂挂项目，只要找到对应的应用程序清除掉
就行了），关闭注册表编辑器。重新安装SQL Server 2000即可。（有改动）</p>
<img src ="http://www.blogjava.net/fulinbo/aggbug/316495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fulinbo/" target="_blank">fulinbo</a> 2010-03-25 08:56 <a href="http://www.blogjava.net/fulinbo/archive/2010/03/25/316495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始</title><link>http://www.blogjava.net/fulinbo/archive/2010/03/24/316397.html</link><dc:creator>fulinbo</dc:creator><author>fulinbo</author><pubDate>Wed, 24 Mar 2010 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/fulinbo/archive/2010/03/24/316397.html</guid><wfw:comment>http://www.blogjava.net/fulinbo/comments/316397.html</wfw:comment><comments>http://www.blogjava.net/fulinbo/archive/2010/03/24/316397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fulinbo/comments/commentRss/316397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fulinbo/services/trackbacks/316397.html</trackback:ping><description><![CDATA[<div align="center"><strong><span style="font-size: 36pt"><span style="font-size: 18pt"><span style="font-size: 12pt">祝自己一路更好！</span></span></span></strong><br />
</div>
<img src ="http://www.blogjava.net/fulinbo/aggbug/316397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fulinbo/" target="_blank">fulinbo</a> 2010-03-24 09:42 <a href="http://www.blogjava.net/fulinbo/archive/2010/03/24/316397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>