1. 程式人生 > >Strust2+JSON的配置詳解

Strust2+JSON的配置詳解

一、JSON是什麼?

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易於人閱讀和編寫,同時也易於機器解

析和生成。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C, C , C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。

二 、struts2對於JSON有什麼支援?

struts2提供了一個struts2-json-plugin.jar 用於支援JSON的使用。當我們在struts2中使用JSON的時候

必須匯入struts2-json-plugin.jar。

          在 struts2-json-plugin.jar 中有一個 struts-plugin.xml 定義了 json-default 繼承自 struts-default 。

<struts>
    <package name="json-default" extends="struts-default">

        <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>

        <interceptors>
            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
            <interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>

            <!-- Sample JSON validation stack -->
            <interceptor-stack name="jsonValidationWorkflowStack">
                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel</param>
                </interceptor-ref>
                <interceptor-ref name="jsonValidation"/>
                <interceptor-ref name="workflow"/>
            </interceptor-stack>

        </interceptors>

    </package>
</struts>

注意: 我們自己定義的 package 需要繼承 json-default  才能使用。

<package name="jsonPackage" extends="json-default">
<span style="font-size:10px;"><action name="VERSION" class="com.cairenhui.sec.action.AppAction" method="getAppVersion">
	<result name="success" type="json">
	<span style="white-space:pre">	</span><param name="root">resMap</param>  
	</result>
</action>
		
<action name="ajaxVerify!*" class="com.cairenhui.sec.action.VerifyAction" method="{1}">
	<result name="success" type="json">
		<param name="includeProperties">resMap.*</param>
	</result>
</action>  </span>

三、關於JSON在struts.xml中的一些屬性的功能。

<action name="*"  class="*">  
          
   <result name="success" type="json">  
   
   <param name=""></param>//關於對JSON的一些定義  <span style="color:#ff0000;">這裡可能會用到一些正則的表達方式</span>
  
   /*
   excludeProperties   //代表排除Action中的哪些屬性,排除多個屬性時,使用逗號進行分隔(即不需要序列化的屬性) 
   例:<param name="excludeProperties">age</param>  排除getAge()這個方法 為什麼是排除這個方法下面詳解 
                     
   includeProperties   //代表包含Action中的哪些屬性,包含多個屬性是,使用逗號進行分隔(即需要序列化的屬性) 
   例:<param name="includeProperties">address</param>包含getAddress()這個方法 為什麼是包含這個方法下面詳解 
                     
   excludeNullProperties //代表排除Action中屬性值為空的欄位 
   例:<param name="excludeNullProperties">true</param> 使用true/false 預設為false(即包含屬性值為null的欄位) 
                     
   root  //代表從哪裡開始序列化 
   例:<param name="root">person</param> person對應的可以是一個屬性,也可以是一個物件,也可以是一個集合 
     //當在這裡定義後,只會將person進行序列化,如果person是一個物件,則會將person物件中所有的getter方法都進行序列化 
                     
    注意:如果相同屬性同時定義了excludeProperties和includeProperties 
        那麼excludeProperties的優先順序要高,因此不對 
    該屬性進行序列化 
    */  
    </result>  
</action>  


四、關於JSON在Action物件中註解的使用。

name:指定序列化的時候對應的名稱
		

	 	    例:@JSON(name = "myname") 則在客戶端接收到的JSON中UserName屬性對應的地方為 :
                     {myname:"張三"} 以前的則是{username:"張三"}
		     public String getUsername() {
				return username;
		     }
				*/
			serialize:對該方法進行序列化  true/false
				/*
			例:@JSON(serialize=true) 對該方法序列化,如果為false則不進行序列化
				public String getUsername() {
							return username;
						}
				*/
			deserialize:不對該方法進行序列化  true/false
				/*
			例:@JSON(deserialize=true) 不對該方法序列化,如果為false則進行序列化
				public String getUsername() {
							return username;
						}
				*/
			format:設定JSON對該方法的轉換方式,一般用於對時間進行轉換 
				/*
			例:@JSON(format="yyyy-MM-dd")  則客戶端接收的JSON中date對應的值為:
                                              {date:"2011-10-2"}
						public Date getDate() {
						return date;
						}
				*/


五、具體的例項:

 Action

    package org.viancent.action;  
  
    import java.util.Date;  
    import org.apache.struts2.json.annotations.JSON;  
    import com.opensymphony.xwork2.ActionSupport;  
    public class GetJsonAction extends ActionSupport {  
          
        private String username;  
        private String password;  
        private int age;  
        private Date date;  
  
        @JSON(serialize = false)  
        public String getUsername() {  
            return username;  
        }  
  
        public void setUsername(String username) {  
            this.username = username;  
            }  
          
        @JSON(name="mypassword")  
        public String getPassword() {  
            return password;  
        }  
  
        public void setPassword(String password) {  
            this.password = password;  
        }  
  
        public int getAge() {  
            return age;  
        }  
  
        public void setAge(int age) {  
            this.age = age;  
        }  
          
        @JSON(format="yyyy-MM-dd")  
        public Date getDate() {  
            return date;  
        }  
  
        public void setDate(Date date) {  
            this.date = date;  
        }  
  
        @Override  
        public String execute() throws Exception {  
            this.setDate(new Date());  
            this.setAge(10);  
            this.setPassword("world");  
            this.setUsername("hello");  
            return SUCCESS;  
        }  
    }  

  struts.xml

<struts>  
    <package name="struts2"  extends="json-default">  
    //這裡一定要繼承json-default  
        <action name="getjsons" class="org.viancent.action.GetJsonAction">  
            <result name="success"  type="json">  
            //這裡一定要定義type屬性為json  
                <param name="excludeProperties">age</param>       
            //排除getAge()方法            
            </result>  
        </action>  
  
    </package>  
</struts>   


  JSP:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>   //使用jquery一定要匯入js  
          
                <script type="text/javascript"> //使用jquery實現非同步提交  
                    function getJson() {  
                        $.post(  
                            "/struts2/getjsons.action",{},function(returnedData,status)  
                            {  
                                if("success"==status)  
                                {  
                                    alert(returnedData);  
                                }  
                            }  
                        )  
                    }  
                </script>  
    </head>  
    <body id="theBody">  
        <input type="button" value="GetJson" onclick="getJson();">  
  
    </body>  
</html>  


 得到的結果為:{"date":"2011-03-21","mypassword":"world"} 

//使用瀏覽器的bug工具檢視 alert(returnedData);彈出來的只是 [object,Object] //這裡我們可以看見password的名稱已經改為mypassword了 而設定那麼的data屬性,名稱則沒有變

相關推薦

package.json配置

預設的package.json檔案直接使用命令:npm init --yes生成 { "name": "pingdingshan", "version": "1.0.0", "description": "", "main": "index.js

Strust2+JSON配置

一、JSON是什麼? JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易於人閱讀和編寫,同時也易於機器解 析和生成。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1

Webpack配置(package.json/webpack.config.js詳細配置

Webpack配置詳解(package.json/webpack.config.js詳細配置 ) webpack安裝 package.json配置以及模組安裝 webpack.config.js配置 開啟webpack-dev-server服務 熱替換外掛的安裝以及配置 開啟自動開啟瀏覽器外

setting.xml 配置

校驗 找不到 順序 裁剪 全局 -- mls leg 觸發 文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用戶配置: ${user.home}/.m2/settings.xml note:用戶配置優先於全局配置。${user.home}

【Spring】Spring MVC原理及配置

進行 return sub sca scrip uil 線程安全 松耦合 必須 1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡

kafka參數配置

kafka 參數 broker.idbroker的唯一標識符,如果不配置則自動生成,建議配置且一定要保證集群中必須唯一,默認-1log.dir日誌數據存放的目錄,默認/tmp/kafka-logslog.dirs日誌數據存放的目錄,如果沒有配置則使用log.dir,建議此項配置。zookeeper.c

Lnux系統網卡綁定配置

ole osd 接口 當前 onf prim multi pac lin 一、CentOS 配置網卡綁定(bonding) 1、bonding概述 (1)作用:就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可

Nginx配置

set 文件結構 時也 解決方案 ces 反向代理服務器 use 力量 第三方模塊 最近在搞nginx和tomcat 以及apache的集群。下面是參考的一片很不錯的關於nginx配置的詳細講解: http://www.cnblogs.com/knowledgesea/p/

Apache配置

搜索 相對 第一個 form 執行權限 php 時有 多個 direct Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。 主站點的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/softwa

緩存varnish的管理及配置

啟動 一個 hint 單位 quad spec int rom try 一 工作原理 在當前主流的Web服務架構體系中,Cache擔任著越來越重要的作用。常見的基於瀏覽器的C/S架構,Web Cache更是節約服務器資源的關鍵。而最近幾年由FreeBSD創始人之一Kamp開

日誌配置

lin XML html表格 記錄 文件中 對齊方式 oca read val #①配置根Logger,其語法為: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日誌記錄的優先級,分為

phpmyadmin配置

php phpmyadmin配置文件中的一個,路徑為libraries/config.default.php,可以修改若幹配置,其中,only_db可以配置在web端顯示的數據庫本文出自 “12968673” 博客,請務必保留此出處http://12978673.blog.51cto.com/1296867

DNS配置 bind實現正向解析和反向解析

cell 8.4 -s intern 資源記錄 ted borde linux系統 ans DNS是域名服務(Domain Name Service),負責把域名解析成IP地址(正向解析)或者把IP地址解析為域名(反向解析)。 DNS查詢過程: 假設我們要訪問www.a

MySQL5.6 數據庫主從(Master/Slave)同步安裝與配置

inux bind 主從配置 希望 master 強調 數據庫主從 ria 配置文件 目錄(?)[+] 安裝環境 操作系統 :CentOS 6.5 數據庫版本:MySQL 5.6.27 主機A:192.168.1.1 (Master) 主機B:192.168.

web緩存服務器varnish-4.1.6的部署及配置

是否 次數 tool 至少 hits 檢查 rep nat list web緩存服務器varnish-4.1.6的部署及配置詳解 1.安裝varnish4.1.6安裝依賴 yum install -y autoconf automake jemalloc-devel li

web.xml配置

知識 其他 location 參數 pin systems doctype doc clu web.xml配置詳解 引文: 對於一個J2EE領域的程序員而言,基本上每天都會和web應用打交道。 什麽是web應用?最簡單的web應用什麽樣?給你一個web應用你該從何入手

mybatis一對一映射配置

技術分享 iat rom cti 加載 文件中 src 裏的 new 聽說mybatis一對一有三種寫法,今天我試了一下。 數據庫表準備 為了偷懶,我直接就拿用戶權限菜單裏的菜單表和菜單與權限的中間表做實現,他們原來是多對多的關系,這邊我假設這兩張表是一對一。 表 g

CentOS Apache配置

先來 page over oca 基於ip chmod 程序 ror 接收 要想在linux上實現網頁服務器(www)需要Apache這個服務器軟件,不過Apache僅能提供最基本的靜態網站數據而已,想要實現動態網站的話,最好還是要PHP與MySQL的支持,所以下面我們將會

Nginx配置文件(nginx.conf)配置

最好 緩沖區 網絡io dev mp3 forward val eight 超時 Nginx的配置文件nginx.conf配置詳解如下: user nginx nginx ; Nginx用戶及組:用戶 組。window下不指定 worker_process

PLSQL連接Oracle 數據庫配置

evel 目錄 win32 asi ges network con 配置詳解 soft 1. 下載instantclient-basic-win32-11.2.0.1.0 (oracle官網下載地址:http://www.oracle.com/technetwork/t