JSTL学习笔记

闲来无事,打开O'Reilly那本Servlets and JSP来看看。因进来对JSTL有点疑问,所以直接去到第九章:Custom tags are powerful: using JSTL。但是,这里记录的是我认为自己比较需要记住或注意的点,所以会比较散一点。

1.用c:out的default属性设置默认值:<b>Hello <c:out value='${user}' default='guest' />.<b>,这里当value里的user为null时,就会输出【Hello guest】.
还有另一种做法就是:<b>Hello <c:out value=’${user}’>guest</c:out></b>

2.包含指令如<%@ include file=”Header.html” %>,在JSP转换为Servlet时就将包含的页面内容添加进当前页面;而标准动作(standard action)里的<jsp:include>,是在用户请求当前页面时,才将被包含页面的内容添加进来;<c:import>这个JSTL标签,与<jsp:include>一样,都是用户请求当前页面时,才将被包含的页面内容添加,但是该标签更powerful和flexiable一点,例如你可用这个标签添加【不在当前应用的】其他应用的页面内容,

3.自定义被包含页面的部分内容
有这么个应用场景:有个页面被多个页面包含,例如你应用里的header.jsp,但header.jsp里有些内容你想不同包含页面由不同的展示,那你可以这么干(例子来自上述书本):
包含 '<jsp:include>'的页面:

<html>
<body>
<jsp:include page="Header.jsp">
<jsp:param name="subTitle" value="We take the sting out of SOAP." />
</jsp:include>
<br>
<em>Welcome to our Web Services Support Group.</em> <br><br>
Contact us at: ${initParam.mainEmail}
</body>
</html>


被包含的文件("Header.jsp"):

<img src="images/Web-Services.jpg" > <br>
<em><strong>${param.subTitle}</strong></em>
<br>


4.怎样在JSP实现回话追踪(URL Rewriting)呢?
假设你的JSP页面含有<a>标签,怎样实现回话追踪呢?当用户没有disable浏览器cookie的时候,这其实是自动发生的,也就是会话追踪是由服务器实现了。但,如果用户disable了cookie呢,这时候我们自然想到url rewriting,即URL重写,把jsessionid添加到a标签的url后面,这时候,我们需要使用【<c:url>】标签,像这样:

<a href="<c:url value='/inputComments.jsp' />">Click here</a>


对比:在servlet里面,我们使用HttpServletResponse.encodeURL(String url)来实现URL重写。

5.如何在JSP实现URL Encoding呢?
假设JSP里有个URL是Http GET 请求,且URL里含有query string,即请求参数,像这样:

<c:set var="last" value="Hidden Cursor" />
<c:set var="first” value="Crouching Pixels"/>
<c:url value="/inputComments.jsp?first=${first}&last=${last}" var="inputURL" />


可以看到query string里含有空格这样的unsafe字符,这样的GET请求会工作得不正常。我们知道,URL经常需要【被转码/编码(encoded)】,术语:URL encoding,即用其他字符替换unsafe/reserved的字符,然后GET请求到达服务器时,这些参数会被decoded,即解码。例如空格会被转换为"+"。

这时,用一个标签来实现url encoding:<c:param>,像这样:

<c:url value="/inputComments.jsp" var="inputURL" >
<c:param name="firstName” value=”${first}" />
<c:param name="lastName" value="${last}" />
</c:url>

即,将URL后面接的参数用c:param标签添加,即可实现url encoding。

6.开发自定义tag时,要做的事:
(1)编写tld,即标签描述文件;该文件可以并仅可以放置在你web应用的【WEB-INF】下的4个位置:1)就直接放在WEB-INF下;2)新建一个名为'tlds'文件夹,将所有tld放在这里;3)如果你开发的标签是单独作为一个jar,即单独一个模块,那你得将你的tld放在jar的META-INF里;4)在上述3的情况下,在META-INF里新建一个名为'moreTLDSs'的文件夹,然后放在这里面。
(2)编写一个Tag Handler,该handler继承自SimpleTagSupport(来自javax.servlet.jsp.tagext);
(3)在JSP2.0之前,你得在DD里做类似这样的配置:

<jsp-config>
<taglib>
<taglib-uri>randomThings</taglib-uri>
<taglib-location>/WEB-INF/myFunctions.tld</taglib-location>
</taglib>
</jsp-config>


这样来告诉Servlet Container去map a taglib uri to a tld file,当你在你的JSP页面引用<%@ taglib prefix=”mine” uri=”randomThings”%>。
但是,在JSP2.0之后,服务器会帮你自动做这样的mapping,即你不再需要配置<taglib>在DD里了。

值得注意的是:[color=red]这里的uri只是一个name,不是一个location[/color]。

好了,暂时先写到这里,后续继续更新,作为学习笔记,还可作为资料来查。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值