博客
关于我
强烈建议你试试无所不能的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%
    你可能感兴趣的文章
    eureka-client.properties文件配置
    查看>>
    MODULE_DEVICE_TABLE的理解
    查看>>
    platform_device与platform_driver
    查看>>
    platform_driver平台驱动注册和注销过程(下)
    查看>>
    .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
    查看>>
    c# 如何调用win8自带的屏幕键盘(非osk.exe)
    查看>>
    build/envsetup.sh 简介
    查看>>
    Android framework中修改或者添加资源无变化或编译不通过问题详解
    查看>>
    linux怎么切换到root里面?
    查看>>
    linux串口操作及设置详解
    查看>>
    安装alien,DEB与RPM互换
    查看>>
    编译Android4.0源码时常见错误及解决办法
    查看>>
    Android 源码编译make的错误处理
    查看>>
    linux环境下C语言中sleep的问题
    查看>>
    ubuntu 12.04 安装 GMA3650驱动
    查看>>
    新版本的linux如何生成xorg.conf
    查看>>
    xorg.conf的编写
    查看>>
    启用SELinux时遇到的问题
    查看>>
    virbr0 虚拟网卡卸载方法
    查看>>
    No devices detected. Fatal server error: no screens found
    查看>>