Jsp---JSTL 叁歲伎倆 2022-06-07 04:42 152阅读 0赞 一.简介: > JSTL(Java Standard Tag Library) –Java标准标签库。 > > SUN公司制定的一套标准标签库的规范。 > > JSTL标签库,是由一些Java类组成的。 > 二.JSTL组成: > JSTL –Core 核心标签库。 - 这是本部分的重点 > > JSTL – I18N - 国际化标签库。Internationalization- I18N > > JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。 > > JSTL -Functions – 函数库。 > > lJSTL- XML ,对XML的操作(同SQL标签)。 > 三、JSTL核心标签库:c标签 > l 使用 JSTL 核心标签: > > • 如果你的 Web 项目是基于 JavaEE2.5 或以上的。可以在你项目的任意页面上通过 <%@ taglib 指令使用 JSTL 的核心标签库。 > > • <%@ taglib uri = "http://java.sun.com/ jsp / jstl /core" prefix= "c" %> > > • uri 是引用标签库的资源定位符,并不代表一个实际的地址。 > > • Prefix 是自定义的前缀。 > > • 如果你的项目是 JavaEE2.5 以下的项目,必须在在你项目中的 lib 目录下,存在以下两个 jar 文件为: > > • Jstl.jar 、 standard.jar > > • 在上面的包中,存在着 jstl 的 tld 文件,用于描述 jstl 标签的属性、名称、资源等信息。程序就是通过这个 tld 文件找到相关 java 类以供运行的。 > > • 然后再在任意的 JSP 页面通过指令导入 jstl . > <table> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:red"><</span><span style="color:red">c:out</span><span style="color:red">> </span>${name}</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 输出标签</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <c:set> pageContext.setAttirbute(key,value,scope);</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 声明标签</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> C:remove</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 删除某个范畴内的数据</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:red"><c:if></span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 判断c:else,c:elsfif</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <c:choose><c:when><c:otherwise></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 判断分枝c:if,c:else if c:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:red"><c:forEach></span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 遍历</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <c:forTokens></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 分隔</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:red"><c:import></span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 导入其他资源,相当于动态包含共享同一个request</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:red"><c:url> </span>-</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 重写url</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <c:redirect></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 重定向 response.sendRedirect(‘’..)</p> </td> </tr> </tbody> </table> 1.JSTL标签-out: > <c:out value=…/>用于在页面上输出结果。 > < c:out value=“$\{requestScope. name \}”/> - 将 request 中的 name 值输出 > > < c:out value=“$\{ param .username \}”/> - 用于将参数输出到页面上。 > > < c:out value=“$\{name\}” default=“hello”/> 从 page 到 application 开始查找,如果没有找到,就显示默认值 hello. > > 另一种设置默认值的方式: > > • < c:out value=“$\{name\}”> > > • Default-value- 默认值。 > > • </ c:out > > > • 只有当要求的信息为 null 或不存在 时才会输出默认值。 > > excapeXml 属性:默认值为 true , 用于将 html 等标签转换成 & lt ; 等转换元素,示例: > > <% > > String name="<font color='red'>Red</font>"; > > pageContext.setAttribute (" name",name ); > > %> > > < c:out value=“$\{name\}” escapeXml = “ false ” ></ c:out > 不对 xml 或 html 进行转换,直接输出,这样就会在页面上看到红色的 Red 字符,因为浏览器会解析 html 数据。 2. < c:set />- 声明一个变量 > > > > l < c:set /> 标签的作用如下: > > • 为 String 类型的命名变量设置值。 > > • < c:set var =“ 变量名” value=“ 变量的值” scope=“ page|request|session|application ”/> > > • < c:set var =“name”value=“$\{param.name\}”/> 直接从参数中取出数据给 name 赋值。 > > • 如果变量为 JavaBean 则为这个 JavaBean 的属性设置值。 > > • < c:set target=“JavaBean 的变量名” property=“ 设置的属性” value=“ 值” /> > > • 示例: > > • < jsp:useBean id= "person" class= " cn.itcast.Person " ></ jsp:useBean > > > • < c:set target= " $\{ pageScope.person \}" property= "name" value= "Jack" /> > > • < c:set target= " $\{ pageScope.person \} " property= "age" value= "99" /> > > • 如果变量为 Map 则,给 Map 中的 key 设置值。 > > • < c:set target=“ 代表 Map 的变量” property=“key”value=“value”/>, 示例: > > • < jsp:useBean id= "map" class= " java.util.HashMap " scope= "request" ></ jsp:useBean > > > • < c:set target="$\{ requestScope.map \}"property= "name" value= "Jack" /> > > • < c:out value="$\{requestScope.map.name\}"/> > 3.JSTL if 标签 > < c:if /> 用于实现 Java 语言中的 if 语句。它的语法如下: > > < c:if test=“ 逻辑表达式” var =“ 代表逻辑表达式值的命名变量” scope=../> > > 示例: > > < c:if test=“$\{name !=‘ Jack’\}”> > > 当 name 的值为 Jack 时输出此行信息l </ c:if > > > 上面的判断等价于下面的代码片段: > > if( pageContext.getAttribute (“name”)!=null &&!..equals(“Jack”))\{ > > • out.println (“…..”); > > \} > > 此标签经常使用,要掌握。 4. choose,when,otherwise : > > > > 这几个标签共同使用可以实现 Java 中的 if…else 语句的功能。 > > < c:choose > > > < c:when test="$\{ empty param.name\}"> > > 用户没有输入 name 参数 > > </ c:when > > > < c:when test="$\{param.name=='Admin'\}"> > > $\{param.name\} 是管理员 > > </ c:when > > > < c:otherwise > > > 用户是: $\{param.name\} > > </ c:otherwise > > > </ c:choose > > > 使用 c:when 必须遵循以下语法规则: > > < c:when /> 和 < c:otherwise /> 不能单独使用,它必须位于 < c:choose 内。 > > < c:otherwise /> 必须位于 c:when 之后。 > 5. forEach : > forEach 用于遍历集合中的对像。 > > 基本语法: > > < c:forEach var =“ 迭代变量” item=“$\{ 集合名称 \}” varStatus =“ 迭代下标变量” > > > 迭代部分 > > </ c:forEach > > > forEach 的 begin( 开始索引 ) 、 end( 结束索引 ) 、 step( 步长 ) 属性: > > < c:forEach begin=0 end=10 step=“2”>…</ c:forEach > 将输出 0,2,4,6,810 > > > > varStatus 属性,用于设置一个 javax.servlet.jsp.jstl.core.LoopTagStatus 类型的命名变量: > > 它包含以下信息: > > count– 当前元素在集合中的序号,从 1 开始。 > > index - 记录当前元素的下标,从 0 开始。 > > first - 判断是否是第一个元素。 > > Last -判断是否是最后一个元素。 > 6. forTokens 遍历一个字符串: > < c:forTokens var = "v" items= " a,b,c,d,e,f " delims = "," > > > < c:out value="$\{v\}"></ c:out >< br /> > > </ c:forTokens > > > 按 ,( 逗号 ) 对字符串 ” a,b,c,d,e,f ” 进行分隔。 > 7. URL 相关的标签: > < c:import /> 包含其他 web 资源,功能类似与 < jsp:include /> (动态包含)。 > > < c:import url =“web 资源 ”/> > > < c:url /> 按特定的方式重写 URL 。 > > < c:url value=“ / aaa.jsp ”/> 总是以 / 开头,如果只使用 value 属性为直接使用或输出。 > > < c:url value=“/…” var =“ someVar ”scope=“…”/> 也可以通过这样的方式将重写的 url 放到某个范围中,然后再取出来使用。 > > < c:redirect /> 负责重定向。 > > < c:redirect url =“ 重定向到的资源 ”/> > > 在使用 < c:redirect 时可以带更多的参数: > > < c:redirect url =“/…”> > > < c:param name=“ someName ” value=“ someValue ”/> > > </ c:redirect > > > > > > <table> > <tbody> > <tr> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 属性</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 类型</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 说明</p> </td> > </tr> > <tr> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> value</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> Striing</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 资源地址信息</p> </td> > </tr> > <tr> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> var</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> String</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 变量名</p> </td> > </tr> > <tr> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> context</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> String</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 可以指定上下文根,默认为本项目的上下方根,也可以指定为其他项目的项目名。</p> </td> > </tr> > <tr> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> scope</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 同上</p> </td> > <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> …</p> </td> > </tr> > <tr> > <td colspan="3"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 使用c:url时,如果只使用value属性,则是直接将信息输出。如果声明了var属性,将不会输出结果而是将url地址信息的结果保存到此变量中。</p> </td> > </tr> > </tbody> > </table> > > > 下面通过jsp页面来演示JSTL核心标签库 **\[html\]** [view plain][] [copy][view plain] 1. **<****span** style="font-size:12px;"**>****<**%@page import="cn.hncu.elWeb.domain.User"%**>** 2. **<**%@ page language="java" import="java.util.\*" pageEncoding="UTF-8"%**>** 3. **<**%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%**>** 4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"**>** 5. **<****html****>** 6. **<****head****>** 7. 8. 9. **<****title****>**演示JSTL技术**</****title****>** 10. **</****head****>** 11. 12. **<****body****>** 13. **<****h1****>**JSTL技术演示**</****h1****>** 14. **<**% 15. request.setAttribute("aa", "goggo"); 16. List**<****Object****>** list=new ArrayList**<****Object****>**(); 17. list.add(new User("wja",20)); 18. list.add("aaaaaaa"); 19. list.add(2000); 20. list.add(-300.9); 21. request.setAttribute("list", list); 22. %**>** 23. $\{list\} 24. **<****table** border="1px""**>** 25. **<****c:forEach** items="$\{list\}" var="la"**>** 26. **<****tr****>****<****td****>**$\{la\}**</****td****>****</****tr****>** 27. **</****c:forEach****>** 28. **</****table****>** 29. **<****br****/>** 30. <!-- c:out --> 31. **<**% 32. pageContext.setAttribute("name", "Jack"); 33. pageContext.setAttribute("name2", "**<****font** color='red'**>**JACK**</****font****>**"); 34. %**>** 35. $\{name \}**<****br****/>** 36. **<****c:out** value="$\{name\}" **>****</****c:out****>** **<****br****/>** 37. $\{name2\}**<****br****/>** 38. **<****c:out** value="$\{name2\}" escapeXml="false" **>****</****c:out****>**<!-- escapeXml参数是看是否解析c:out --> 39. **<****br****/>** 40. <!-- c:if --> 41. **<****c:if** test="$\{list\[0\].age>20\}" var="boo" scope="session"**>** 42. **<****table** border="1px"**>** 43. **<****c:forEach** items="$\{list \}" var="l"**>** 44. **<****tr****/>****<****td****/>**$\{l \} 45. **</****c:forEach****>** 46. **</****table****>** 47. **</****c:if****>** 48. 49. **<****c:if** test="$\{!boo\}"**>** 50. **<****h2****>**输出表格错误**</****h2****>** 51. **</****c:if****>** 52. 相当于$\{list\[0\].age**>**20?"yes":"no" \}**<****br****/>** 53. <!-- forEach --> 54. <!-- forEach的遍历功能 --> 55. **<**% 56. HashMap**<****String**,Object**>** map=new HashMap**<****String**,Object**>**(); 57. map.put("name", "Rose"); 58. map.put("age",55); 59. map.put("tel", "13566668888"); 60. pageContext.setAttribute("m", map); 61. String str\[\]=\{"aaa","bbb","cccc","dddddddd"\}; 62. pageContext.setAttribute("str", str); 63. %**>** 64. 65. **<****c:forEach** items="$\{m \}" var="im"**>** 66. $\{im.key\}=$\{im.value \} 67. **</****c:forEach****>****<****br****/>** 68. 69. **<****c:forEach** items="$\{str\}" var="s"**>** 70. $\{s\} 71. **</****c:forEach****>****<****br****/>** 72. **<****h3****>**看看ForEach标签中的varStatus属性---idx.index是元素的下标(从0开始),idx.count是元素的序号(从1开始计数)**</****h3****>** 73. **<****c:forEach** items="$\{str \}" var="s" varStatus="index"**>** 74. $\{s \}\------index=$\{index.index\} count=$\{index.count \}**<****br****/>** 75. **</****c:forEach****>** 76. <!-- forEach的普通循环功能 --> 77. **<****c:forEach** begin="20" end="40" step="2" varStatus="idx" var="x" **>**<!-- 只能是递增,而且step不能为负数 --> 78. $\{x \} index=$\{idx.index\} --$\{idx.count\} **<****br****/>** 79. 80. **</****c:forEach****>** 81. $\{str\[0\]\}**<****br****/>** 82. 83. <!-- c:set 设置属性,默认作用域:pageScope--> 84. **<****c:set** var="aa" value="abc123"**>****</****c:set****>** 85. **<****c:set** var="aa" value="bbbbbbb23123" scope="session"**>** **</****c:set****>** 86. **<**%-- **<****c:set** var="$\{requestScope.aa \}" value="bbbbbbb23123" scope="request"**>** **</****c:set****>**var的值不能用EL表达式**<****br****/>** --%**>** 87. $\{aa \},,,$\{sessionScope.aa \}**<****br****/>** 88. 89. <!-- c:remove 删除属性,默认作用域:pageScope,request等4个容器中的都会被删除--> 90. <!-- 下面这一句,若没有scope属性,则前面的所有"aa"都会被清除。写了下面的scope,则只清除指定的request中的那个"aa"属性 --> 91. **<**%-- **<****c:remove** var="aa" scope="request"**/>** --%**>** 92. $\{aa \},,$\{requestScope.aa \},,$\{sessionScope.aa \}**<****br****/>** 93. 94. **<****br****/>** 95. <!-- c:choose,c:when,c:otherwise 类似Java中的switch-case-default且每项自动带break --> 96. **<****c:set** var="score" value="8"**>****</****c:set****>** 97. **<****c:choose** **>** 98. **<****c:when** test="$\{score>90\}"**>**优秀**</****c:when****>** 99. **<****c:when** test="$\{score>80\}"**>**良好**</****c:when****>** 100. **<****c:when** test="$\{score>60\}"**>**及格**</****c:when****>** 101. **<****c:otherwise****>**不及格**</****c:otherwise****>** 102. **</****c:choose****>** 103. 104. **<****br****/>** 105. <!-- c:forTokens 用分隔符去拆分字符串--> 106. **<****c:forTokens** items="aa,vv,sdasd,sfasfafggd,eeeee" delims="," var="str"**>** 107. $\{str\} 108. **</****c:forTokens****>****<****hr****/>** 109. $\{str\[0\]\}**<****br****/>**<!-- >被覆盖了,读不出去 --> 110. <!-- c:import 导入资源,相当于动态包含,共享同一个request--> 111. **<****c:import** url="/jsps/aa.jsp"**>****</****c:import****>** 112. <!-- c:redirect 重定向,相当于response.sendRedirect(...) --> 113. **<**%-- 114. **<****c:redirect** url="/jsps/aa.jsp"**>****</****c:redirect****>** 115. --%**>** 116. <!-- c:redirect 重定向,相当于response.sendRedirect(...) --> 117. **<****h2****>**以下演示JSTL中的国际化--I18N **</****h2****>** 118. **<****a** href="<c:url value='/jsps/i18n.jsp'/>"**>**I18N演示**</****a****>** 119. **</****body****>** 120. 121. 122. **</****html****>** 123. **</****span****>** ### 四、I18N标签: ### * 简介: > l 18N 是 Internationalization 的简称,因为 I 到 N 之间有 18 个字符所以叫 i18n 。 > > 在 java 的核心库当中,提供了对 i18n 的支持, java.util.Locale 类是最重要的 i18n 相关类。 > > 首先介绍一下 Locale 类: > > 获取 Locale 类的实例,有以下几种方式: > > Locale ch = new Locale(“ zh ”,”CN”); > > Locale ch = Locale.CHINA ; > > 或获取默认值: > > Locale zh = Locale.getDefault (); > > 然后可以通过以下方法输出语言和国家: > > getLanguage > > getCountry * I18N-ResourceBundle类: > Java.util.ResourceBundle 类,用于管理和 Locale 相关的资源的功能。 > > ResourceBundle 类提供了两个方法,用于创建 ResourceBundle 对像的静态工厂方法: > > getBundle (String baseName )— 通过此方法获取资源文件的名称 > > getBundle (String baseName,Locale locale); > > 参数中的 baseName 是资源文件的名称,资源文件通常以 properties 为扩展名。 > > 资源文件的命名规则如下: > > 默认资源文件: resources.properties > > 英文资源文件: resources\_ en\_US .properties > > 中文资源文件: resources\_ zh\_CN .properties > * ResourceBundle示例: > 步骤如下: > > 1 、在 classpath 目录下建立一个资源文件为 message.properties 。 > > 2 、内容如下: name=Jack > > 3 、书写一个 main 方法的类,并输入以下代码: > > 4 、 ResourceBundle b = ResourceBundle. getBundle ("message"); > > Stringname = b.getString ("name"); > > System. err .println (name); > > 此时你看到的输出是 Jack. > > 5 、在 classpath 目录下,再建立一个文件 message\_zh\_CN.properties > > 并输入以下内容: name= 杰克(注意转码) > > 6 、重新执行第 4 步的代码 , 你将会看到输出的结果变成了:杰克。 > > 7 、这是因为它使用本地语言查找相关的资源文件,如果找不到就使用默认的,如果找到就使用本地的资源文件。 在网页上的使用(要导入<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>标签) **\[html\]** [view plain][] [copy][view plain] 1. **<**%@page import="cn.hncu.elWeb.domain.User"%**>** 2. **<**%@ page language="java" import="java.util.\*" pageEncoding="UTF-8"%**>** 3. **<**%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%**>** 4. **<**%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%**>** 5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"**>** 6. **<****html****>** 7. **<****head****>** 8. **<****fmt:setLocale** value="zh\_CN"**/>** 9. **<****fmt:setBundle** basename="msg"**/>** 10. <!-- 真正搞国际,应该要把设置Locale和Bundle的代码放在head标签中,页面只负责显示。 --> 11. **</****head****>** 12. 13. **<****body****>** 14. 张三,**<****fmt:message** key="welcome"**/>****<****br****/>** 15. **<****fmt:message** key="time"**/>**fddfdfdfdfdfdf 16. 17. 18. **<****hr****/>** 19. <!-- 相比上一版本,把国家语种用参数进行传递 --> 20. **<****a** href="?loc=en\_US"**>**English**</****a****>** 21. **<****a** href="?loc=zh\_CN"**>**中文**</****a****>** 22. **<****fmt:setLocale** value="$\{param.loc\}"**/>** 23. **<****fmt:setBundle** basename="msg"**/>** 24. 张三,**<****fmt:message** key="welcome"**/>****<****br****/>** 25. **<****fmt:message** key="time"**/>**fddfdfdfdfdfdf 26. 27. 28. **<****hr****/>** 29. <!-- 再演示一下多个资源的情况,第二个资源及以后都必须取别名(变量名)。前面(第一个)没取变量名的那个叫默认资源 --> 30. **<****fmt:setBundle** basename="a" var="aaa" scope="session"**/>** 31. <!-- 如果多个页面都要使用,那么得把作用域设成session --> 32. 33. 张三,**<****fmt:message** key="welcome"**/>****<****br****/>** 34. **<****fmt:message** key="time"**/>**fd8888dfdf 35. **<****br****/>** 36. <!-- 如果是从非默认资源中读取,那么得指定资源名称即aaa。如果没有指定名称,那么就是从默认的读取 --> 37. **<****fmt:message** key="address" bundle="$\{aaa\}"**>****</****fmt:message****>** 38. **<****br****/>** 39. **<****a** href="<c:url value='/jsps/c.jsp'/>"**>**到网站的其它页面去看看**</****a****>** 40. **</****body****>** 41. 42. 43. **</****html****>** [view plain]: http://blog.csdn.net/wangjian_an/article/details/52079324#
还没有评论,来说两句吧...