JSTLとJSON

21064 ワード

一.JSTLの概況
1.Java Server Pages Standard Tag Libray(JSTL)はJSP標準ラベルライブラリである.
2.コアラベルライブラリ:http://java.sun.com/jsp/jstl/core ウェブアプリケーションの一般的な動作を含みます.例えば、サイクル、表現の割り当て、基本入出力などです.
3.ラベルライブラリのフォーマット:http://java.sun.com/jsp/jstl/fmt データを表示する作業の書式を設定します.
4.JSPページでJSTLライブラリを使用するためには、taglibコマンドは下記のフォーマットで使用しなければなりません.
  例えば、プレフィクス(prefix)は任意のコンテンツであってもよく、ルールに従って、チーム内の異なる人によって作成されたコードをより類似させることができる.したがって、事前に設計されたプレフィックスを使用することを提案する.この時は二つのjarパッケージを導入する必要があります.は直接Tomcatのlibディレクトリに入ればいいです.
二.JSTLの使用
1.条件動作ラベル
JSTLには4つのラベルがあります.条件式の動作命令を実行できます.if、chose、when、otherswise.
a.ifラベル
JSTLラベルは一般的にフィールドオブジェクトを操作していますが、変数が操作できません.ifタグは戻り値に適合しています.戻り値はブックタイプで、var属性で設定します.
主体がない                       書式:                          test=「条件」var=「ドメイン制限変数の名称」scope=「ドメインオブジェクトの範囲」            主体的な内容がある                       書式:                                                    条件が満たされた場合に表示される内容                     






if  


	 
	 
	   ${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

b.chouse、whenとotherswiseラベル 
 書式:                                                          ...                                                   注意:                1、choseタグとotherswiseタグには属性がありません.                    属性を設定するとエラーが発生します. Attribute xxx invalid for(chose according to TLD)                2、whenラベルはtest属性が必要です.                    atribute test is mandtory for(when)                3、choseラベルにはwhenタグとotherswiseタグ、whenタグとotherswiseタグしか含まれていません.他のラベルが含まれています.                    Illagal child(in)「c:chose」                4、choseラベルの中に少なくともキスマークが必要で、otherswiseタグがなくてもいいです.                    IL「chose」without child「when」                5、otherswiseラベルは最後のwhenラベルの後に置かなければなりません.                     Illagal"c:when"after"c:otherwise"                6、otherwiseタグはすべてのwhenタグが成立しない時のみ実行されます.






choose


	
	
	
	
		
			

, !

, !

, !

! !

2.反復ラベル:forEach
              本体の内容を複数回印刷します.                 書式:                                                     主な内容                                   反復集合                書式:                                                 主な内容                    
a.forEach属性の意味は以下の通りです.
            JSTL与JSON_第1张图片
c.varStatus属性の使用:
            JSTL与JSON_第2张图片
 










forEach  


		 
	 
	 	

${i }、


${i }、


list = new ArrayList<>(); list.add(" "); list.add(" "); list.add(" "); request.setAttribute("list", list); %>
${item } ${info.index } ${info.count } ${info.first } ${info.last }

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 }
3.動作指令の書式設定
JSTLはフォーマットと解析数字と日付のラベルを提供しています.私達の討論の中にはformatNumber、formatDate、parseNumberとparseDateがあります.
a.formatNumberラベル
            このラベルは指定された書式または精度で数を書式設定します.                 主体がない                   書式:                                type:書式設定されたタイプ                                number:数値型                                percent:パーセンテージタイプ                                currency:通貨の種類                       value:フォーマットされた値                               文字列の量や表式でフィールドオブジェクトから値を取ることができます.                       var:フォーマットされた結果を受信するためのドメイン制限変数                               この属性が設定されていない場合、フォーマットされた結果はそのまま出力されます.var属性を設定するには、ドメインオブジェクトの値を表式で取得する必要があります.パーセンテージに書式設定すると、デフォルトでは2ビットを保持します.四捨五入します.                      maxIntegerDigits:最大整数ビットを許可します.                      maxFraction Digits:最大の小数位を許可します.






formatNumber     


	
	  
${num }



1000
${numb }
b.フォーマット日付
 書式:            value:フィールドオブジェクトから表式で値を取ることもできます.            type:フォーマットされたタイプ                date:日付タイプ、標準値                タイムタイプ                both:日付+時間の種類
ラベルには次のような属性があります.
            JSTL与JSON_第3张图片
pattern属性はより正確な処理日を指定します.
            JSTL与JSON_第4张图片







formatDate     



	
	
	${myDate } 















c.パースNumberラベル
           パーrseNumberタグを使用して、数字、通貨またはパーセンテージの文字列表現を言語環境を指定する数値に解析できます.すなわち、数値、通貨、パーセンテージを表す文字列を解析します.                 二つの文法形式:                          主体がない                          使用主体の内容






parseNumber


		 
	 
	 
	 
${num }


d.parseDate:指定されたフォーマットの文字列を日付の種類に変換します.






parseDate


	
	 

${date1 }
${date2 }
三.JSONの初対面
JSON(JavaScript Object Notation)は、jsのオブジェクトと配列の字面量のフォーマットに従って書きます.JSONの光環はXMLを超えています.大網駅が提供するデータインターフェースは、一般的にJSONです.サービスとクライアントのデータインタラクションに広く使われています.
1.JSONフォーマット
jquery 1.4以降はjsonフォーマットに対して厳しくなりました.つまり、必ずこのようなフォーマットが必要なのです.{キー”:“値”、“キー”:“値”、“値”、“値”のように、すべてが誤っています.標準に合わないので、jquerryがerrorに戻ります.を選択します.ブーメランタイプというなら、引用符を付けずに他のキー/値に引用符を付けます.
  •  Jsonはkey-valueとしてデータを格納する
  • .
  •  Keyの値はStringタイプです.
  •  Valueの取得値はString、bollan、Number、配列、Object、nullです.
  •  Json串は{スタートして}で終わる.
  •  Jsonの配列は「開始」で終わる.
  •  Json串の中でObjectは{始まります}で結びます.
  • 2.解析方式(重点)
    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;
    	}
    		
    }
    
    a.gsonを使って処理する(対応するパッケージを導入する)
    GsonはGoogleが提供するJavaライブラリであり、JavaオブジェクトをJSON表現に変換するために使用できます.JSON文字列を同等のJavaオブジェクトに変換するためにも使用できます.tostring()や構造関数(工場法)などの使いやすい仕組みを提供します.JavaをJSONに変換することは、逆もまた然りであり、任意の複雑なオブジェクトをカスタマイズして、コンパクトで読み取り可能なJSON出力を生成することができます.
    JSONの串と対象の転化を重点的に把握する(Jsonはjavaオブジェクトに解析する-->JsonはListに解析する-->Jsonはmapに解析する)
               Gsonのノードオブジェクト:                   Jsone Element:すべてのノードはJsone Element対象です.                   JsonPrimitive:基本的なデータタイプのノードオブジェクト、JsonElementのサブクラス.                   Jsonull:空のノードの対象を代表して、keyがあって、valueは空で、JsonElementのサブクラス.                  JsonObject:対象データタイプのノードオブジェクト、JsonElementのサブクラス.                 JsonAray:配列データタイプのノードオブジェクト、JsonElementのサブクラス.         II)、Jsone Elementの評価:        Json Primitive:valueの取得値はjavaの int、double、float、long、shot、bootlean、char、byte、String、BigDecimal、BigIセンター、Number                JsonObject:valueの取得値はjavaのObjectオブジェクトに対応します.               JsonAray: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>(){}.getType());
    		System.out.println(map.get("uname"));
    	}
    	
    
    }
    
    b.Jsonノード解析
    解析ステップ:解像度を得る-->ルートノード要素を得る——>文書に基づいてルートノードがどのタイプのGsonノードオブジェクトに属するかを判断する-->ノードの下のあるノードのvalueを取得する. 
    @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());
    		
    	}
    3.fastjsonを使って処理する(該当パッケージを導入する)
    アリババfastJsonはJson処理ツールのカバンで、「序列化」と「反序列化」の二つの部分を含んでいます.速度が一番速いという特徴があります.テストによって、fastjsonは極めて速い性能を持っています.他のJava Json parserを超えています.自称最速のJackJsonを含む.機能が強く、JavaBean、集合、Map、日付、Enumを完全にサポートし、自分をサポートします.依存なし                 ダウンロードパス:https://github.com/alibaba/fastjson/releases/tag/1.2.13
    a.json文字列に変換
    b.オブジェクトに解析する
    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());
    	
    	}
    
    }
    
    データを対応させるには、まずJSONオブジェクトをシリアルに変換します.
    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);
    	}
    
    }