博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
测试JSTL表达式
阅读量:4049 次
发布时间:2019-05-25

本文共 11493 字,大约阅读时间需要 38 分钟。

JSTL一般要配合EL表达式一起使用,通过提供大多数 Web 应用程序常用功能的标准实现,JSTL 有助于加速开发周期。

一、JSTL和El表达式的关系

EL与四个 JSTL 定制标记库提供的操作结合起来允许页面作者不使用脚本元素即可实现表示层逻辑(不需要对表示层程序编写java代码),这极大地简化了 JSP 应用程序的维护。

 

二、使用方法:

1、如果只是使用EL表达式不需要引入任何jar包,只要jsp/servlet容器实现了J2EE1.4/Servlet2.4、JSP2.0规范就可以

2、JSTL标签的配置和使用:

(1) 将jstl.jar和standard.jar拷贝到WEB-INF/lib下
(2)在jsp页面使用:
  采用taglib指令引入标签库(使用哪个引入哪个即可)
  <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix="c"%>   
  <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
  <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
 
(3)使用自定义函数:
 * 定义类MyFunctions,方法必须为静态全局的
 * 提供tld描述文件(仿照其他标准tld文件写即可),将tld放到WEB-INF或WEB-INF下的任意目录中
 * 在jsp中采用taglib进行引入
 * 在EL表达式中采用前缀+冒号+函数名的方式进行调用    
   

三、测试示例:

项目概览

 

1、EL表达式

Servlet

package com.jialin.jstl;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 测试El表达式Servlet * @author jialin * */public class ElServlet extends HttpServlet {	protected void doGet(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		// TODO Auto-generated method stub		doPost(req, resp);	}	protected void doPost(HttpServletRequest request,			HttpServletResponse response) throws ServletException, IOException {		Group group = new Group();		group.setGroupName("第一组");        		//普通对象		User user = new User();		user.setGroup(group);		user.setName("张三");		user.setAge(17);		//map		Map map = new HashMap();		map.put("k1", "k1value");		map.put("k2", "k2value");		//字符串数组		String[] strArr = new String[] { "a", "b", "c", "d" };		// 对象数组\		User[] arrUser = new User[10];		for (int i = 0; i < arrUser.length; i++) {			arrUser[i] = new User();			arrUser[i].setName("张三" + i);		}		// List		List listUser = new ArrayList();		for (int i = 0; i <= 10; i++) {			User usr = new User();			usr.setName("战三" + i);			listUser.add(usr);		}		//放入request		request.setAttribute("arrUser", arrUser);		request.setAttribute("listUser", listUser);		request.setAttribute("arr", strArr);		request.setAttribute("map", map);		request.setAttribute("user", user);		request.setAttribute("v1", "");		request.setAttribute("v2", new ArrayList());		request.setAttribute("v3", null);		request.setAttribute("v4", "434");		request.setAttribute("hello", "Hello World");				//转发		request.getRequestDispatcher("/ElTest.jsp").forward(request, response);	}}

jsp

<%@ page language="java" contentType="text/html; charset=GB18030"	pageEncoding="GB18030"%>			
Insert title here

测试EL表达式

  • 普通字符串
  • Jsp脚本:<%=request.getAttribute("hello")%>
    EL表达式:${hello}
    RequestScope:${requestScope.hello}
  • 结构
  • 用户名:${user.name}
    用户年龄:${user.age }
    用户所属组:${user.group.groupName }
  • Map
  • map.k1:${map.k1}
    map.k2:${map.k2 }
  • 数组
  • arr[1]:${arr[1]};
  • 对象数组
  • user数组:${arrUser[4].name }
  • List
  • userList:${listUser[5].name}
  • 运算符
  • 1+1=${1+1}
    1*2=${1*2}
    21/7=${21/7}
    21 div 7=${21 div 7}
    21 mode 7=${21 mod 7}
    21 % 7=${21 % 7}
  • 测试Empty
  • v1:${empty v1 }
    v2:${empty v2 }
    v3:${empty v3 }
    v4:${empty v4 }
    v5:${empty v5 }

     

    结果:

    2、测试jstl

    servlet

    package com.jialin.jstl;import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 测试JSTLServlet * @author jialin * */public class JstlServlet extends HttpServlet {	protected void doGet(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		// TODO Auto-generated method stub		doPost(req, resp);	}	protected void doPost(HttpServletRequest request,			HttpServletResponse response) throws ServletException, IOException {        //字符串		request.setAttribute("str", "fdfsdfsd432");		request.setAttribute("strs", "fd#fs#dfsd#432");         		//日期和数字		request.setAttribute("today", new Date());		request.setAttribute("num", new Double(1234567.123456789));		request.setAttribute("pnum", new Double(0.1233456));		//List		List listUser = new ArrayList();		for (int i = 0; i <= 10; i++) {			User usr = new User();			usr.setName("战三" + i);			usr.setAge(10);			Group group = new Group();			group.setGroupName("战三group" + i);			usr.setGroup(group);			listUser.add(usr);		}        		//map		Map map = new HashMap();		map.put("k1", "k1value");		map.put("k2", "k2value");		map.put("k3", "k3value");		map.put("k4", "k4value");		map.put("k5", "k5value");		map.put("k6", "k6value");				//加入request		request.setAttribute("map", map);		request.setAttribute("listUser", listUser);		request.setAttribute("strTokens", "1@2@3@4@5@6@7");		request.setAttribute("v1", "10");		request.setAttribute("v2", "11");		request.setAttribute("hello", "hello world");		request.setAttribute("list", new ArrayList());		request.setAttribute("hello1","hello world");				//转发		request.getRequestDispatcher("/JstlTest.jsp").forward(request, response);	}}

    jsp

    <%@ page language="java" contentType="text/html; charset=GB18030"	pageEncoding="GB18030"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@ taglib uri="http://blog.csdn.net/shan9liang/myfunctions" prefix="my"%>			
    Insert title here

    测试 JSTL

  • 测试c:out标签
  • hello(使用标签):
    hello(使用标签):
    hello(使用标签):
    hello(使用EL表达式):${hello}
    hello(default):${hello123}
    hello(使用缺省值):
    hello(使用标签):
    hi
    hello world(使用EL表达式):${hello1}
    hello world(使用escapeXML):
    hi
    hello world(使用escapeXML):
    hi
  • 测试c:set 标签
  • hi:${hi}
    hi:${hoho}
  • 测试 c:if 标签
  • “v1 < v2”
  • 测试 c:choose c:when c:otherwise
  • "v1>v2"
    "v1 < v2"
    无数据
    有数据
  • 测试 c:forEach
  • 姓名 年龄 组别
    没有数据
    ${user.name} ${user.age } ${user.group.groupName}
  • 测试c:forEach varStatus
  • 姓名 年龄 组别
    没有数据
    ${user.name} ${user.age } ${user.group.groupName}
    ${user.name} ${user.age } ${user.group.groupName}
  • 测试forEach begin end
  • 姓名 年龄 组别
    没有数据
    ${user.name} ${user.age } ${user.group.groupName}
  • 测试forEach 取出map中的值
  • ${entry.key},${entry.value}
  • 测试forTokens
  • ${t}
  • 测试c:catch
  • <% Integer.parseInt("rewrw"); %>
    ${msg}
  • 测试 c:import
  • 测试 c:url param
  • ${uri}
  • 测试 fn
  • str.length(函数必须放在EL表达式中,用法:前缀+冒号+函数名称):${fn:length(str)}
    ${v1 }
    ${my:Hello("张三")}
  • 测试 fmt
  • today(default)
    today(type="date")
    today(type="time")
    today(type="both")
    today(dateStyle="short")
    today(dateStyle="medium")
    today(dateStyle="long")
    today(dateStyle="full")
    today(pattern="yyyy/MM/dd hh:mm:ss")
    ${nowDate }
  • 测试格式化数字
  • number(default)
    number(pattern="###,###,###.####")
    number(pattern="###,###,###.000")
    number(groupingUsed="false")
    number(minIntegerDigits="10" maxIntegerDigits="10")
    number(minFractionDigits="4" maxFractionDigits="5")
    number(type="currency")
    number(type="currency" currencySymbol="$")
    number(type="percent" maxFractionDigits="5" minFractionDigits="3")

     

    结果:

    测试 JSTL

    • 测试c:out标签 hello(使用标签): 123
      hello(使用标签): hello world
      hello(使用标签): hello
      hello(使用EL表达式):hello world
      hello(default):
      hello(使用缺省值): hi
      hello(使用标签): hi
      hello world(使用EL表达式):hello world
      hello world(使用escapeXML): <font color="red">hello world</font> hi
      hello world(使用escapeXML): hello world hi
    • 测试c:set 标签
      hi:hello world!
      hi:
    • 测试 c:if 标签
      “v1 < v2”
    • 测试 c:choose c:when c:otherwise
      "v1 < v2"
      无数据
    • 测试 c:forEach
      姓名 年龄 组别
      战三0 10 战三group0
      战三1 10 战三group1
      战三2 10 战三group2
      战三3 10 战三group3
      战三4 10 战三group4
      战三5 10 战三group5
      战三6 10 战三group6
      战三7 10 战三group7
      战三8 10 战三group8
      战三9 10 战三group9
      战三10 10 战三group10
    • 测试c:forEach varStatus
      姓名 年龄 组别
      战三0 10 战三group0
      战三1 10 战三group1
      战三2 10 战三group2
      战三3 10 战三group3
      战三4 10 战三group4
      战三5 10 战三group5
      战三6 10 战三group6
      战三7 10 战三group7
      战三8 10 战三group8
      战三9 10 战三group9
      战三10 10 战三group10
    • 测试forEach begin end
      姓名 年龄 组别
      战三2 10 战三group2
      战三3 10 战三group3
      战三4 10 战三group4
      战三5 10 战三group5
      战三6 10 战三group6
      战三7 10 战三group7
    • 测试forEach 取出map中的值 k3,k3value
      k4,k4value
      k5,k5value
      k6,k6value
      k1,k1value
      k2,k2value
    • 测试forTokens 1
      2
      3
      4
      5
      6
      7
    • 测试c:catch java.lang.NumberFormatException: For input string: "rewrw"
    • 测试 c:url param
      http://www.baidu.com?id1=321&id2=876
    • 测试 fn
      str.length(函数必须放在EL表达式中,用法:前缀+冒号+函数名称):11
      fd
      fs
      dfsd
      432
      Hello! 张三
    • 测试 fmt
      today(default) 2013-3-11
      today(type="date") 2013-3-11
      today(type="time") 15:46:20
      today(type="both") 2013-3-11 15:46:20
      today(dateStyle="short") 13-3-11
      today(dateStyle="medium") 2013-3-11
      today(dateStyle="long") 2013年3月11日
      today(dateStyle="full") 2013年3月11日 星期一
      today(pattern="yyyy/MM/dd hh:mm:ss") 2013/03/11 15:46:20
      2013/03/11 15:46:20
    • 测试格式化数字
      number(default) 1,234,567.123
      number(pattern="###,###,###.####") 1,234,567.1235
      number(pattern="###,###,###.000") 1,234,567.123
      number(groupingUsed="false") 1234567.123
      number(minIntegerDigits="10" maxIntegerDigits="10") 0,001,234,567.123
      number(minFractionDigits="4" maxFractionDigits="5") 1,234,567.12346
      number(type="currency") ¥1,234,567.12
      number(type="currency" currencySymbol="$") $1,234,567.12
      number(type="percent" maxFractionDigits="5" minFractionDigits="3") 12.33456%
    你可能感兴趣的文章
    长文干货:如何轻松应对工作中最棘手的13种场景?
    查看>>
    如何用好碎片化时间,让思维更有效率?
    查看>>
    No.174 - LeetCode1305 - 合并两个搜索树
    查看>>
    No.175 - LeetCode1306
    查看>>
    No.176 - LeetCode1309
    查看>>
    No.182 - LeetCode1325 - C指针的魅力
    查看>>
    mysql:sql alter database修改数据库字符集
    查看>>
    mysql:sql truncate (清除表数据)
    查看>>
    yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
    查看>>
    yuv420 format
    查看>>
    yuv420 还原为RGB图像
    查看>>
    LED恒流驱动芯片
    查看>>
    驱动TFT要SDRAM做为显示缓存
    查看>>
    使用file查看可执行文件的平台性,x86 or arm ?
    查看>>
    qt5 everywhere 编译summary
    查看>>
    qt 创建异形窗体
    查看>>
    简单Linux C线程池
    查看>>
    内存池
    查看>>
    输入设备节点自动生成
    查看>>
    GNU hello代码分析
    查看>>