JSTL 中有 4 个标签可以执行条件式动作指令: if、 choose、 when 和 otherwise。
JSTL标签一般操作域对象,变量无法操作,if标签可以适合返回值,返回值是boolean类型,通过var属性来设置.
没有主体内容
格式:
有主体内容
格式:
条件满足时,显示的内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
if标签
<%
int a = 1;
request.setAttribute("b", 0);
request.setAttribute("c", 1);
int d = 1;
%>
${flag }
//true
${flag1 }
//false
${flag2 }
//false
${flag3 }
//true
${flag4 }
//true
${flag5 }
//false
${flag6 }
//false
${flag7 }
//false,值得注意的
${flag8 }
//true
${flag9 }
//false
${flag10 }
//false
${b > 0 }//false
我就是简单测试一下
简单测试一下
格式:
...
注意:
1、choose标签和otherwise标签没有属性
设置属性会报错 Attribute xxx invalid for tag choose according to TLD
2、when标签必须要有test属性
attribute test is mandatory for tag when
3、choose标签中只能包含when标签和otherwise标签、when标签和otherwise标签可以包含其他标签
Illegal child tag in "c:choose" tag: "c:if" tag
4、choose标签中至少要有一个吻痕标签,可以没有otherwise标签
Illegal "choose" without child "when" tag
5、otherwise标签必须放在最后一个when标签之后
Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.
6、otherwise标签只有在所有when标签都不成立时才会执行
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
choose
<%
request.setAttribute("score", 100);
%>
分不在高,及格就好!
革命尚未完成,同志仍需努力!
哎哟不错哦!
都是腰间盘,凭什么你这么突出!
你个渣渣!这都不及格!
将主体内容重复打印多次
格式:
主体内容
迭代集合
格式:
主体内容
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
forEach迭代
${i }、主体内容
${i }、主体内容
<%
List list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
request.setAttribute("list", list);
%>
姓名
当前成员的下标
循环的次数
当前成员是否第一次被循环
当前成员是否最后一次被循环
${item }
${info.index }
${info.count }
${info.first }
${info.last }
<%
Map map = new HashMap<>();
map.put("zhangsan","张三,今年18,性别男爱好女");
map.put("lisi","李四,今年18,爱好张三");
map.put("wangeu","王五,今年20,爱好李四");
map.put("admin",list);
request.setAttribute("myMap", map);
%>
${user.key } = ${user.value }
JSTL 提供了格式化和解析数字和日期的标签,我们讨论里面有:formatNumber、 formatDate、 parseNumber 及 parseDate。
该标签用指定的格式或精度来格式化数
没有主体内容
格式:
type:被格式化的类型
number:数值型
percent:百分比类型
currency:货币类型
value:被格式化的值
可以是字面量或用表达式从域对象中取值
var:用来接收格式化后的结果的限域变量
如果没有设置该属性,格式化后的结果会直接输出;如果设置了var属性,就需要通过表达式获取域对象中的值如果格式化成百分比,默认保留两位,四舍五入
maxIntegerDigits:允许最大的整数位
maxFractionDigits:允许最大的小数位
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
formatNumber格式化数值
${num }
1000
<%
request.setAttribute("numb", 100);
%>
${numb }
格式:
value:也可以用表达式从域对象中取值
type:被格式化的类型
date:日期类型,默认值
time:时间类型
both:日期+时间类型
pattern 属性指定更精确的处理日期:
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
formatDate格式化日期
<%
Date myDate = new Date();
request.setAttribute("myDate", myDate);
%>
${myDate }
利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环 境的数字,即解析一个代表着数字,货币或百分比的字符串。
两种语法形式:
没有主体内容
使用主体内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
parseNumber
<%
request.setAttribute("num1", "100.1244");
%>
${num }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
parseDate
<%
request.setAttribute("date1", "2018/09/03");
request.setAttribute("date2", "09/03/2018");
%>
${date1 }
${date2 }
JSON(JavaScript Object Notation)是一种轻量级易与解析的数据格式,它按照 js 的对象和数组的字面量格式来书写。 现在 JSON 的光环已经逐渐超越了 XML,各大网站提供的数据接口一般都是 JSON。广泛应用于服务端与客户端的数据交互
java的user类
package com.shsxt.po;
public class User {
private Integer userId;
private String uname;
private Integer age;
private boolean sex;
public User() {
super();
}
public User(Integer userId, String uname, Integer age, boolean sex) {
super();
this.userId = userId;
this.uname = uname;
this.age = age;
this.sex = sex;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
Gson是一个Google提供的一个Java库,可用于将Java对象转换为JSON表示。它也可以被用来将 JSON 字符串转换成一个等效的 Java 对象。提供易于使用的机制如 toString()和构造函数(工厂方法)将 Java 转换为 JSON,反之亦然。 允许自定义表示对象, 支持任意复杂的对象, 生成紧凑和可读性的JSON 输出.
Gson 的 节点对象:
JsonElement : 所有的节点 都是 JsonElement 对象.
JsonPrimitive : 基本的 数据类型的 节点 对象, JsonElement 的子类.
JsonNull : 代表 空节点 对象,即 有 key, value 为空, JsonElement 的子类.
JsonObject : 对象 数据类型的 节点 对象, JsonElement 的 子类.
JsonArray : 数组 数据类型的 节点 对象, JsonElement 的 子类.
II)、 JsonElement 的取值:
JsonPrimitive : value 的 取值对应 java 的 int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigI nteger,Number
JsonObject : value 的取值对应 java 的 Object 对象.
JsonArray : value 的取值对应 java 的 List 及其子类对象.
package com.shsxt.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.reflect.TypeToken;
import com.shsxt.po.User;
public class GsonTest {
/**
* @Test注解 单元测试
* 1、不能有父类
* 2、不能是静态方法
* 3、不能有参数
* 4、返回值是void
*/
@Test
public void test() {
fail("Not yet implemented");
}
/**
* 将对象转换成JSON字符串
*/
@Test
public void testObjectToJson() {
// 得到对象
User user = new User(1, "zhangsan", 18, true);
/**
* String json = {"userId":1,"uname":"zhangsan","age":18,"sex":true};
*/
// 得到gson对象
Gson gson = new Gson();
// 将对象转换成JSON字符串
String json = gson.toJson(user);
System.out.println(json);
}
/**
* 将JSON字符串转换成对象
*/
@Test
public void testJSONToObject(){
// 定义JSON字符串
String json = "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
// 得到gson对象
Gson gson = new Gson();
// 将JSON字符串转换成对象
User user = gson.fromJson(json, User.class);
System.out.println(user.getUname());
}
/**
* 将集合转换成JSON字符串
*/
@Test
public void testListToJson() {
// 定义集合
List list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// 得到gson对象
Gson gson = new Gson();
// 将集合转换成JSON字符串
String json = gson.toJson(list);
System.out.println(json);
List userList = new ArrayList<>();
User user = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user);
userList.add(user2);
userList.add(user3);
// 将集合转换成JSON字符串
String json2 = gson.toJson(userList);
System.out.println(json2);
}
/**
* 将JSON字符串转换成集合
*/
@Test
public void testJsonToList() {
// 定义json对象
String json = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
// 得到gson对象
Gson gson = new Gson();
// 将JSON字符串转换成集合
List list = gson.fromJson(json, new TypeToken>(){}.getType());
System.out.println(list.get(0));
}
/**
* 将map转换成JSON字符串
*/
@Test
public void testMapToJSON() {
Map map = new HashMap<>();
map.put("uname", "张三");
map.put("age", 18);
map.put("sex", true);
// 得到gson对象
Gson gson = new Gson();
String json = gson.toJson(map);
System.out.println(json);
}
/**
* 将JSON字符串转换成MAP
*/
@Test
public void testJSONToMap() {
String json = "{\"uname\":\"张三\",\"sex\":true,\"age\":18}";
// 得到gson对象
Gson gson = new Gson();
Map map = gson.fromJson(json, new TypeToken
@Test
public void parse() {
String json = "{\"flag\": true,\"data\": {\"userId\":1,\"uname\": \"张三\",\"age\": 18,\"sex\":true }}";
// 节点解析
// 得到解析器
JsonParser parser = new JsonParser();
// 得到根节点
JsonElement element = parser.parse(json);
// 根据JSON字符串判断当前是什么json数据类型
JsonObject root = element.getAsJsonObject();
// 解析flag 根据文档判定是boolean类型 基本数据类型
JsonPrimitive primitive = root.getAsJsonPrimitive("flag");
// 将基本数据类型转换成具体的数据类型
boolean flag = primitive.getAsBoolean();
System.out.println(flag);
// 解析data 根据文档判定是对象类型 JSONObject
JsonObject data = root.getAsJsonObject("data");
// 将对象转换为具体的对象
User user = new Gson().fromJson(data, User.class);
System.out.println(user.getUname());
}
阿里巴巴 fastJson 是一个 Json 处理工具包,包括“序列化”和“反序列化”两部分,它 具备如下特征:速度最快,测试表明, fastjson 具有极快的性能,超越其他的 Java Json parser。包括自称最快的 JackJson;功能强大,完全支持 JavaBean、集合、 Map、 日期、 Enum,支持范型,支持自省;无依赖。
下载路径:https://github.com/alibaba/fastjson/releases/tag/1.2.13
package com.shsxt.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.shsxt.po.User;
public class FastJsonTest {
@Test
public void test() {
fail("Not yet implemented");
}
@Test
public void testToJson(){
// 得到对象
User user = new User(1, "zhangsan", 18, true);
// 将javaBean转换成JSON字符串
String json1 = JSON.toJSONString(user);
System.out.println(json1);
// 定义集合
List list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
String json2 = JSON.toJSONString(list);
System.out.println(json2);
List userList = new ArrayList<>();
User user1 = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user1);
userList.add(user2);
userList.add(user3);
String json3 = JSON.toJSONString(userList);
System.out.println(json3);
}
@Test
public void testToObject() {
// 定义JSON字符串
String json1= "{\"userId\":1,\"uname\":\"zhangsan\",\"age\":18,\"sex\":true}";
User user = JSON.parseObject(json1,User.class);
System.out.println(user.getUname());
// 定义json对象
String json2 = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
List list = JSON.parseArray(json2,String.class);
System.out.println(list.get(2));
String json3 = "[{\"age\":18,\"sex\":true,\"uname\":\"zhangsan\",\"userId\":1},{\"age\":19,\"sex\":false,\"uname\":\"lisi\",\"userId\":2},{\"age\":20,\"sex\":true,\"uname\":\"wangwu\",\"userId\":3}]";
List userList = JSON.parseArray(json3,User.class);
System.out.println(userList.get(1).getUname());
}
}
package com.shsxt.web;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.shsxt.po.User;
@WebServlet("/test")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List userList = new ArrayList<>();
User user1 = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user1);
userList.add(user2);
userList.add(user3);
String json = JSON.toJSONString(userList);
response.getWriter().write(json);
}
}