熬之滴水穿石:JSP--HTML中的JAVA代码(6)

                                                                   39--JSTL

在JSP编码中需考虑的一种方法,因为这种方法可以让你避免脚本,因为在JSP的标准标记库里有许多已经定制的标记。在JSP2.0的规范中,要使用JSTL,需要将一个jstl.jar文件copy到相应的web目录(WEB-INF/LIB)。对于JSP作为view的功能,所以它本身就能完成太多的业务逻辑。在JSTL中我们会看到很多<C:...>这样以C开头的前缀,这是一个约定,其简称就是单词core的首写字符。
像在JSP中处理像循环之类的功能,一般会用到像<c:forEach>,这种方法很适合迭代处理数组和集合。特别能用于for循环,对于集合中的每一个元素,都会一个不落的执行一次标记的体,将每个元素赋给一个变量。当然我们可以用更深的办法,那就是嵌套<c:forEach>,也就是我们常说的嵌套循环。
<c:if>该标记可以完成对于条件判断所做的动作,当然我的理解是这样的if似乎没有if...else 这样好用。如果真那么好用的话,就不会有<c:choose>了。当然<c:choose>内是一个组合标记方式,一般由<c:when>和<c:otherwise>,这样的组合保证了当条件发生时执行相应时间,当不成立时则执行相应的动作。
强大的<c:set>标记,可以设置Map中的值,可以在Map中建立一个新项,也可以创建一个新的请求作用域属性。set有两种方法,一种是针对属性变量的 eg:<c:set var>,一种是针对bean和Map的设置。<c:set>设置中有一些小技巧,在该设置中只能设置其中,不能两个属性都设计。scope是的,如果没有使用这个属性,则默认为page的作用域。如果var指定的属性不存在便会创建一个新的属性,而target是需要放一个能解析为实际对象表达式的,用来指定具体的属性对象。<c:remove>则是针对一个set标记来删除一个变量。
<c:import>的方法相当于上一个章节说起的include,是一种包含的方法,它是在请求时将URL属性值指定的内容增加在当前页面,和<jsp:include>很相似,但是<c:import>标记的属性是使用的url。它强大的地方在于可以应用到Web应用之外去,前面说的include和<jsp:include>都只能包含在当前的页面,但<c:import>则可以容器之外的东东搞过来,也就是如果是负载均衡集群配置中<c:import>很有用武之地。像很多网站,图片都存储在图片服务器上的,类似于这种情况<c:import>大有作为。
最后讲讲一个也是比较实用的功能<c:url>,这个功能我们需要提到在Servlet单元中说过的当浏览器不支持cookie时,需要对url重写加上一个sessionId的尾巴,是的,<c:url>就可以搞这个!

继续!我们在JSP页面里调用一个风险的标记,当出现异常时可以恢复,实现像try..catch的一样。是的,在JSTL中确实有这样的标记<c:catch>来完成的。在JSP处理异常,也有一些套路和方法的。例如:我们根据http响应的结果设定跳转的界面,而这个时候我们可以在部署文件中用<error-page>和<error-code>、<location>,当响应相关的代码时就调用该错误界面。在try..catch中,我们知道catch的就是异常对象。但对于Web界面处理的话,需要把异常设置为一个属性。而使用该属性就是用var,那该值来取名。假设设定var="bException",那么用EL表达式就可以用bException.message来调用了。当我们使用该标签处理异常时通常会遇到两种情况,一种是:如果我们使用var属性,会把异常对象赋予这个var的变量,然后流程直接跳转catch中。

在JSTL中,我们能用的通常有以C:开头的核心库。我们之前说的都是与之相关的核心库。其实还有以fmt开头的格式化库,还有SQL的数据访问库。还有以XML开头的XML核心库。

                                                                                                                                                                               (未完待续.........) 
posted @ 2013-06-21 14:53  jlins  阅读(190)  评论(0编辑  收藏  举报