Board logo

标题: JSTL 入门 探讨 core(5)URL 操作 [打印本页]

作者: look_w    时间: 2018-7-15 08:45     标题: JSTL 入门 探讨 core(5)URL 操作

URL 操作JSTL         core 库中的其余标记主要是关于 URL。这些标记中的第一个被适当地命名为         <c:url> 标记,用于生成 URL。尤其是,         <c:url> 提供了三个功能元素,它们在为 J2EE Web 应用程序构造 URL 时特别有用:      
清单 12 显示了         <c:url> 标记的语法。         value 属性用来指定基本 URL,然后在必要时标记对其进行转换。如果这个基本 URL 以一个斜杠开始,那么会在它前面加上 servlet 的上下文名称。可以使用         context 属性提供显式的上下文名称。如果省略该属性,那么就使用当前 servlet 上下文的名称。这一点特别有用,因为 servlet 上下文名称是在部署期间而不是开发期间决定的。(如果这个基本 URL 不是以斜杠开始的,那么就认为它是一个相对 URL,这时就不必添加上下文名称。)      
清单 12. <c:url> 操作的语法
1
2
3
4
5
6
7
8
9
10
11
<c:url value="
        expression" context="
        expression"
    var="
        name" scope="
        scope">
  <c:param name="
        expression" value="
        expression"/>
  ...
</c:url>




URL 重写是由         <c:url> 操作自动执行的。如果 JSP 容器检测到一个存储用户当前会话标识的 cookie,那么就不必进行重写。但是,如果不存在这样的 cookie,那么         <c:url> 生成的所有 URL 都会被重写以编码会话标识。注:如果在随后的请求中存在适当的 cookie,那么         <c:url> 将停止重写 URL 以包含该标识。      
如果为         var 属性提供了一个值(还可以同时为         scope 属性提供一个相应的值,这是可选的),那么将生成的 URL 赋值给这个限定了作用域的指定变量。否则,将使用当前的         JspWriter 输出生成的 URL。这种直接输出其结果的能力允许         <c:url> 标记作为值出现,例如,作为 HTML         <a> 标记的         href 属性的值,如清单 13 中所示。      
清单 13. 生成 URL 作为 HTML 标记的属性值
1
<a href="<c:url value='/content/sitemap.jsp'/>">View sitemap</a>




最后,如果通过嵌套         <c:param> 标记指定了任何请求参数,那么将会使用 HTTP GET 请求的标准表示法将它们的名称和值添加到生成的 URL 后面。此外,还进行 URL 编码:为了生成有效的 URL,将对这些参数的名称或值中出现的任何字符适当地进行转换。清单 14 演示了         <c:url> 的这种行为。      
清单 14. 生成带请求参数的 URL
1
2
3
4
<c:url value="/content/search.jsp">
  <c:param name="keyword" value="${searchTerm}"/>
  <c:param name="month" value="02/2003"/>
</c:url>




清单 14 中的 JSP 代码被部署到一个名为         blog 的 servlet 上下文,限定了作用域的变量         searchTerm 的值被设置为         "core library" 。如果检测到了会话 cookie,那么清单 14 生成的 URL 将类似于清单 15 中的 URL。注:在前面添加上下文名称,而在后面附加请求参数。此外,         keyword 参数值中的空格和         month 参数值中的斜杠都被按照 HTTP GET 参数的需要进行了编码(确切地说,空格被转换成了         + ,而斜杠被转换成了         %2F 序列)。      
清单 15. 有会话 cookie 时生成的 URL
1
/blog/content/search.jsp?keyword=foo+bar&month=02%2F2003




当没有会话 cookie 时,生成的结果如清单 16 中所示。同样,servlet 上下文被添加到了前面,而 URL 编码的请求参数被附加到了后面。不过,除此以外还重写了基本 URL 以包含指定的会话标识。当浏览器发送用这种方式重写的 URL 请求时,JSP 容器自动抽取会话标识,并将请求与相应的会话进行关联。这样,需要会话管理的 J2EE 应用程序就无需依赖由应用程序用户启用的 cookie 了。
清单 16. 没有会话 cookie 时生成的 URL
1
2
/blog/content/search.jsp;jsessionid=233379C7CD2D0ED2E9F3963906DB4290
  ?keyword=foo+bar&month=02%2F2003






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0