純客戶端Web技術總結——HTML5, Javascrpit, CSS

概述:

Web 技術糅合了太多內容,  總的來說Server 和 Client 技術基本上不劃分。 因此當PHP, J2EE, Pyth 紛擾這web世界的時候,  我們還能看到JQuary, Node.js, 還能看到Sql的陰魂不散.  很多人就開始深陷技術無法自拔。 這篇文章中。 您完全不用費神費力。 這一切都跟服務端技術沒有多大關係。

1. 服務端僅僅提供接口數據。 比如通過一個POST請求,服務端把數據傳給我們。 我們這裏將採用JSON的格式【XML大娘的標籤太羅嗦】

2. 客戶端通過XMLHTTPRequest這個瀏覽器著名的實例, 和服務端交互, 然後把數據拿回來, JS能做到

3. 客戶端開始通過DOM進行展示. 展示非常靈活, 你想把文本變成紅的綠的, 都行, 同樣JS也能做到

4. 很顯然,  JS在處理請求的時候, 還處理了HTML的UI,  也就是邏輯和UI的揉合. 這裏, 要給出解決方案, 讓代碼不那麼糟糕, 因爲我們還需要讓別人看懂, 讓別人維護.

環境準備:

    1. 服務端, 一個查單詞的Server端應用. 非常簡單, 下面的紅色字體, 就是輸入單詞的部分, 其他的幾個參數, 先忽視吧!

     http://dictionary.duapp.com/q?method=queryword&word=future&type=1_00&name=test&pwd=test

    當然你可以修改爲其它任意的單詞, 這個也將是我們後面會提供的內容。

    http://dictionary.duapp.com/q?method=queryword&word=have&type=1_00&name=test&pwd=test

    如果您一直關注我的博客, 顯然, 這是【凡塵英語】部署的一個應用. 當然你無需關注,  我們這裏是關注客戶端的技術, 千萬別迷戀服務端! 否則你會離題太遠!

    另外溫馨提示一下, 千萬別拿我這個接口來做其他的事情, 因爲我一段時間之後, 我會將這個接口封閉。 你完全可以部署一個免費的服務端應用。 這裏可以幫你找到一些線索:

      百度的 java BAE, 建立一個Java Servlet爲主要技術的應用. 

    2. 客戶端. 組裝一個POST請求, 對返回的字段進行解析, 將其嵌入到我們的HTML5的各種標籤中, 以第一個鏈接請求future的查詢爲例:

    {"key":"future","pron":"ˈfju:tʃə---ˈfjutʃɚ---","meanings":[{"type":"adj.","trans":"將來的,未來的;[語法學]將來時的;"},{"type":"n.","trans":"前途;[美國俚語]未婚妻;期貨;"}],"shorts":"[for the future, in future, in the future]","usages":[{"eng":"I am on my way to future, where you are there.","cn":"我要去有你的未來","type":-1,"remark":"優美英文"},{"eng":"If my future has you in it, I'm not afraid of the rest.","cn":"如果我的未來有你在,那其他的什麼我都不怕了。","type":-1,"remark":"優美英文"},{"eng":"Every hour of lost time is a chance of future misfortune.","cn":"一寸光陰一寸金,寸金難買寸光陰。","type":-1,"remark":"優美英文"},{"eng":"We'd better struggle for the future rather than regret for the past.","cn":"後悔過去,不如奮鬥將來。","type":-1,"remark":"優美英文"}]}

目標:

1. 生成兩個頁面, 將上述JSon數據進行展示

2.  分離UI處理和邏輯處理, 採用先分層、後模塊化的方式.  保證框架代碼的容易維護

特別提醒:

1. 由於存在跨域問題, 所以, 本文的客戶端代碼和服務端代碼需要共同部署在同一個服務器上.

2.  我們Sevlet轉發的方式, 將dictionary.duapp.com的查詢, 轉遷到student.duapp.com上去. 當然, 我們建議你也這麼做. 代碼很簡單, 提供如下:

	private String getHttpContent(String rometURL, String encoding)
	{
		try {
			 URL url = new URL (rometURL);
		        URLConnection uc = url.openConnection();
		        uc.setRequestProperty  ("Authorization", "Basic " + encoding);
		        uc.setRequestProperty("User-Agent", "Mozilla/5.0");
		          
		        InputStream content = (InputStream)uc.getInputStream();
		        BufferedReader in = new BufferedReader (new InputStreamReader (content,encoding));
		        StringBuffer buffer = new StringBuffer();
		        while (in.ready()) {
					String inString = in.readLine().trim();
					if (inString.length() != 0)
					{
						buffer.append(inString);
					}
				}
		        return buffer.toString();
		} catch (Exception e) {
		}
       return null;
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
//		super.doGet(req, resp);
		String partA = "http://dictionary.duapp.com/q?method=queryword&word=";
		String partB = "&type=1_00&name=test&pwd=test";
		String content = getHttpContent(partA + "about" + partB, "utf-8");
		resp.setContentType("text/plain");
		resp.setCharacterEncoding("utf-8");
		resp.getWriter().println(content);
	}

這樣轉接代理服務完成.


接下來要做的工作, 就是顯示一個頁面: 測試鏈接如下:


Ajax測試鏈接


可以輸入任意單詞進行測試


js源碼




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章