Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库(1)

简介: Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库(1)

前面为JSTL中的常用EL函数,后面的为具体演示实例!

JSTL简介:

JSTL(Java Standard Tag Library) –Java标准标签库。

SUN公司制定的一套标准标签库的规范。

JSTL标签库,是由一些Java类组成的。

JSTL组成:

JSTL –Core 核心标签库。 重点

JSTL – I18N - 国际化标签库。Internationalization- I18N

JSTL – SQL – 数据库操作标签(有悖于MVC设计模式),现在都不用这个。

JSTL - Functions – 函数库。

JSTL - XML ,对XML的操作(同SQL标签-有悖于MVC设计模式),现在都不用这个。

JSTL核心标签库:

使用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.

JSTL-Core一共包含以下几个子标签:

<c:out> ${name}    输出标签
<c:set>         pageContext.setAttirbute(key,value,scope);  声明标签
C:remove        删除某个范畴内的数据
<c:if>          判断c:else,c:elsfif
<c:choose><c:when><c:otherwise> 判断分枝c:if,c:else if c:
<c:forEach>     遍历
<c:forTokens>   分隔
<c:import>      导入其他资源,相当于动态包含共享同一个request
<c:url>  -      重写url
<c:redirect>    重定向  response.sendRedirect(‘’..)

JSTL标签-out:

属性名         可选值                          说明
value   EL表达式、java表达式、或直接字符串    需要输出的内容
escapeXml    true | false     是否将html转成&lt;&gt;&quat;等输出。
default        默认值          如果value内容不存在时则输出默认值
<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数据。

JSTL-Core的演示:(通常命名为c命名空间)

—–jstl.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
      <h1>JSTL技术演示</h1>
      <!-- c:out -->
      <%
        pageContext.setAttribute("name", "Tom");
        pageContext.setAttribute("name2", "<font color='red'>Tom</font>");
      %>
      <c:out value="${name}"></c:out><br/>
      ${name}<br/>
      <c:out value="${name2}" escapeXml="true" /><br/>
      ${name2}<br/>
      <!-- c:if -->
      <c:if test="${20>10}" var="boo" scope="session">
        OKOK<br/>
      </c:if>
      <!-- 想要用if-else 就这样再用一句 -->
      <c:if test="${!boo}">
        NONO<br/>
      </c:if>
      <br/><!-- 用El中的问号表达式能输出简单的if-else -->
      ${ 20>10?"yes":"no" }<br/>
      <hr/>
      <!-- forEach -->
      <%
        List list = new ArrayList();
        list.add("aaaaa111");
        list.add("bbbbb222");
        list.add(200);
        list.add(100);
        request.setAttribute("list", list);
      %>
      <table border="1px">
        <c:forEach items="${list}" var="li">
            <tr> <td>:: ${li}</td>  </tr>
        </c:forEach>
      </table>
      <%
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name", "Pose");
        map.put("age", 55);
        map.put("tel", "12345678911");
        pageContext.setAttribute("map", map);     
      %>
      <br/>
      <c:forEach items="${map}" var="m">
        ${m.key} = ${m.value}<br/>
      </c:forEach>
      <%
        String strs[] = {"aaa","bbb","ccc","ddd"};
        pageContext.setAttribute("strs", strs);
      %>
      <br/>
      <c:forEach items="${strs}" var="str">
        ${str},      
      </c:forEach>
      <br/>
      <h3>看看forEach标签中的varStatus属性---idx.index是输出元素的下标(从begin开始的),idx.count是元素的计数(从1开始)</h3>
      <c:forEach items="${strs}" var="str" varStatus="idx">
        ${str}---index = ${idx.index} --- count=${idx.count}<br/>       
      </c:forEach>
      <!-- forEach的普通循环功能 -->
      <c:forEach begin="20" end="40" var="i" step="2" varStatus="idx">
        ${i} -- ${idx.index} -- ${idx.count}<br/>
      </c:forEach>
      <br/>
      <!-- c:set设置属性,默认作用域:pageScope -->
      <c:set var="aa" value="abc123" />
      <c:set var="aa" value="cccc222" scope="request"/>
      ${aa},${requestScope.aa}<br/>
      <br/>
      <!-- c:remove 删除属性,默认作用域:pageScope,request等4个容器! -->
      <!-- 也就是,如果不设置作用域(scope属性),则那4个容器中的属性都会被清除,如果写了,则只清除指定作用域的属性 -->
      <c:remove var="aa" scope="request"/>
      ${aa},${requestScope.aa}<br/>
      <!-- c:choose,c:when,c:otherwise  -->
      <!-- 类似Java中的switch-case-default而且每项自动带break -->
      <c:set var="score" value="98"></c:set>
      <c:choose>
        <c:when test="${score>=90}">
            优秀
        </c:when>
        <c:when test="${score>=80}">
            良好
        </c:when>
        <c:when test="${score>=70}">
            中等
        </c:when>
        <c:otherwise>
            不合格         
        </c:otherwise>
      </c:choose>
      <br/>
      <!-- c:forTokens 用分隔符去拆分字符串 -->
      <c:forTokens items="aa,ds,sdf,df,dddd,sss" delims="," var="str">
        ${str}&nbsp;
      </c:forTokens>
      <br/>
      <!-- c:import 导入资源,相当于动态包含,共享同一个request,但是在不同的类 -->
      <c:import url="/jsps/b.jsp"></c:import>
      <br/>
      <!-- c:redirect 重定向,相当于response.sendRedirect(...) -->
      <%-- 
      <c:redirect url="/jsps/a.jsp"></c:redirect>
      --%>
      <br/><br/><br/><br/>
  </body>
</html>

—–b.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    <h3>这是被动态导入的页面内容...b.jsp...</h3>
  </body>
</html>

a.jsp就不写出来了,那个只是为了演示一些JSTL的重定向。a.jsp的源码没意义。

—–演示结果:



image.png

目录
相关文章
|
3月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
32 1
|
4月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
36 1
java基础(11)函数重载以及函数递归求和
|
3月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
32 3
|
4月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
4月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
117 3
|
4月前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
37 1
|
4月前
|
移动开发 JavaScript 数据可视化
|
5月前
|
开发者 自然语言处理 存储
语言不再是壁垒:掌握 JSF 国际化技巧,轻松构建多语言支持的 Web 应用
【8月更文挑战第31天】JavaServer Faces (JSF) 框架提供了强大的国际化 (I18N) 和本地化 (L10N) 支持,使开发者能轻松添加多语言功能。本文通过具体案例展示如何在 JSF 应用中实现多语言支持,包括创建项目、配置语言资源文件 (`messages_xx.properties`)、设置 `web.xml`、编写 Managed Bean (`LanguageBean`) 处理语言选择,以及使用 Facelets 页面 (`index.xhtml`) 显示多语言消息。通过这些步骤,你将学会如何配置 JSF 环境、编写语言资源文件,并实现动态语言切换。
51 1
|
5月前
|
XML 自然语言处理 搜索推荐
Web2py 的多语言支持也太厉害了吧!国际化与本地化策略,让你的应用走向全球!
【8月更文挑战第31天】在全球化背景下,软件需支持多语言以满足不同用户需求。Web2py作为强大Web应用框架,提供了丰富的多语言支持功能,使开发者能轻松实现国际化与本地化。通过创建语言文件夹并利用`T`函数获取翻译文本,可实现界面及动态内容的多语言展示,并支持日期、时间及数字的本地化显示。此外,表单验证错误消息也可进行翻译,从而提供更佳的用户体验。无论大小项目,Web2py均能满足多语言需求。
57 1
|
5月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
89 1