顯示具有 Jant 標籤的文章。 顯示所有文章
顯示具有 Jant 標籤的文章。 顯示所有文章

2007-07-24

Jant Note : JSON encode and decode

描述:
用ajax + json 方式來當作web app 的資料傳遞的架構已經一陣子了. 但是, 一直有一個問題會產生, 那就是特殊字碼跟換行的資料輸出. 首先講到特殊字碼, 一般在http request 裡頭 ? % / 這三個會是一個很大的傳輸問題. 另一個就是, 如果傳輸的資料裡頭有換行, 從client 傳到 server 不會有問題, 但是當資料要由 server 傳回 client ,換行會導致 javascript 在 eval 成 object 有錯誤.

思考:

希望能有一個client 和 server 統一的解法不用針對每一個應用作個別加解密. client再傳送資料的時候可以針對HTTP Request 特殊字碼作編碼, server 在產生JSON String 可以作標準編碼.

解法:
HTTP Request 特殊字碼
找了一下 JavaScript 的文件, 裡頭已經有encodeURI, encodeURIComponent,escape 三種的function來做 http request encode. encodeURI 是針對要傳送的 url , 所以不能自己放string 下去encode, encodeURIComponent 放入一個String 會自己作encode. escape 沒有試過. 所以, 找到的解法就是 使用ajax 傳輸前, 把要傳送資料作encodeURLCompoent 再傳出去就可以了. server 端使用 tomcat 所以, tomcat 會自己做解譯後端程式不用作相對應處理.
JSONString
先前使用自己寫的JSONString function, 裡頭只能應付簡單的字元. 後來去找到 json.org的lib. 使用裡面的JSONObject.quote 來做資料的轉換, 就可以正確的解出資料傳送到client, 換行符號就可以備正常的解譯了.

2007-06-06

Jant Note : FTPFileReader

說明:
在做資料傳遞的系統, 需要用到 FTP 到某一個site 去抓取特定的檔案回來做處理. 爲了省去這樣的code, 寫了一個 FTPFileReader Command. 只要給予參數就可以抓到單一檔案回來local.
如果ftp 過程中發生錯誤, 不會有任何的錯誤訊息. RemoteFile 不存在的話, 會在local 存放一個空的檔案.
使用:

Model =
{
"FTPSite":"${FTPSite}", // ftp site domain name or ip
"Account":"${Account}", // ftp account
"Password":"${Password}", // acount password
"Chdir":"${Chdir}", // change dir path, refer to ftp login root
"RemoteFile":"${RemoteFile}", // ftp site file name
"LocalFile":"${LocalFile}" // local path file name
}

new FTPFileReader().execute(Model);

2007-04-11

Jant Note : PathController 說明

說明:
在一般的網頁中, url 是相對路徑所以在網頁中最原始的方式就是要能記住相關的目錄. 如果透過副檔名的方式來連結相對應的網頁, 會是在網頁內部寫作一個方便的功能.
PathController 就是透過 URL最後的副檔名來 dispatcher HTTP , 現在有用到的應用就是在網頁的URL傳送與 Ajax 的應用.

使用:
在web.xml 中做下面的設定.
參數
  • Path -> server 上面的路徑.
  • FilterExt -> URL 上最後的 副檔名.
  • ForwardExt -> server上真正的副檔名.
  • Encoding -> 針對request 做字元編碼的動作.
For webpage redirector


ViewPathController
com.jant.web.PathController

Path
/view/


FilterExt
.view


ForwardExt
.jsp


Encoding
UTF-8



ViewPathController
*.view



For ajax request redirector


ServicePathController
com.jant.web.PathController

Path
/service/


FilterExt
.service


ForwardExt
.jsp


Encoding
UTF-8



ServicePathController
*.service




在webpage 中如果同一個網頁, 可以直接使用 test.view來做網頁的更換.
Ajax 可以直接呼叫 test.service 來做資料的傳遞.

Jant Note : CharacterEncodingFilter 說明

說明:
tomcat 5.0 以後對於 request 送過來的編碼有了不同的處理方式, 爲了讓 Post method 的編碼可以正確的被編輯, 利用這一個Filter 將所有傳送過來的request 作統一的編碼動作, 不需要在程式中撰寫相關的編碼動作.

使用:
在web.xml 中 放入下面描述.


CharacterEncoding
com.jant.web.CharacterEncodingFilter

encoding
Big5



CharacterEncoding
/*


encoding 參數要放編碼的代號 : Big5, UFT-8, .....

2007-04-02

Jant Note : ResourceFileter 說明

說明 :
運用J2EE 在 Web container 可以新增Filter 的功能, 用路徑來區分不同的檔案需求. 藉由/resource/ 開頭的request 來省略網頁上相對路徑的維護.

使用:
在web.xml 中 放入下面的description


ResourceFilter
com.jant.web.ResourceFilter


ResourceFilter
/resource/*


在 web page 中呼叫相關的檔案

<link href='resource/jant.css' rel='stylesheet' type='text/css' />
<script src="resource/com.jant.Test.js" language="JavaScript" type="text/javascript"></script>

com.jant.Test.js 是放在 WEB-INF/classes/com/jant/Test.js

改版計劃:
目前的ResourceFilter並沒有辦法正確的傳回二位元檔案如圖檔, 下一版的計畫將讀取檔案的方式改為可讀二進位檔.