響應osc號召,參加了Cloud Foundry應用開發大賽;
個人做品在這:
http://my.oschina.net/kzhou/blog/98855
kFeedback - 雲反饋;
參與這個大賽主要有一下目的:
1,學習Cloud Foundry開發、部署流程,由於本人喜歡開發一些小玩意兒造福百姓;正好有地方託管了。
2,學習Bootstrap,本人一直爲UI這個軟肋所苦惱,幸虧有了它;
3,將kFeedback真正的用起來;由於一款產品的成功,離不開用戶的反饋;
接下來,我要總結一下爲期7天的Cloud Foundry開發之旅;
第一天:
熟悉、掌握Cloud Foundry開發、部署流程;第一步確定是先要註冊帳號;
首先拜讀了這篇文章http://www.oschina.net/question/28_82288;註冊過程很是順利;
而後進入其官方網站,開始閱讀文檔;
地址:http://docs.cloudfoundry.com/getting-started.html
因爲本人的應用採用java web進行開發,並使用mysql做爲數據庫,因此有針對性的閱讀了相關文檔。
eclipse(sts)開發環境搭建:http://docs.cloudfoundry.com/tools/STS/sts-eclipse.html
mysql服務相關:http://docs.cloudfoundry.com/services/mysql/mysql-overview.html
文檔基本上是step by step,因此很快就搭建完成並部署了第一個hello world;
文檔也熟悉個差很少了,才發現有中文文檔,我勒個去。
地址:http://cn.cloudfoundry.com/
接下來的幾天,主要是開發kFeedback,開發過程省略(此處省略1000個字兒);
第一次部署kFeedback:
按照文檔進行操做,一切看上去是那麼的順利,但是在啓動服務的時候卻提示不成功——第一次部署失敗;
經過分析發現,數據源配置信息有誤,經過文檔瞭解,CF是能夠自動配置的(http://cndocs.cloudfoundry.com/frameworks/java/spring/spring.html)
個人怎麼不行,後來繼續查閱文檔,找到了成功的辦法:
數據源的鏈接信息可經過VCAP_SERVICES 環境變量得到;
因而,我啓動了CF服務,作了一個jsp來獲取VCAP_SERVICES 環境變量信息;
jsp內容以下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
我在雲端;<br>
個人環境變量信息:
<%
String srvInfo = System.getenv("VCAP_SERVICES");
out.println(srvInfo);
%>
</body>
</html>
部署這個jsp並訪問,獲得了以下信息:
我在雲端;
個人環境變量信息: javascript
{"mysql-5.1":[{"name":"kFeedbackDB","label":"mysql-5.1","plan":"free","tags":["relational","mysql-5.1","mysql"],"credentials":{"name":"d94ed893c100b4d25b91b133ef598e4f2","hostname":"172.30.48.28","host":"172.30.48.28","port":3306,"user":"u42KG0fAjMPx3","username":"u42KG0fAjMPx3","password":"p1ofdZYSG7oKH"}}]}
有用的信息主要是credentials裏邊的內容:
name爲數據庫名;
hostname和host爲數據庫鏈接串的ip;
port沒啥說的了,端口;
name和username是鏈接數據庫的用戶名;
password是鏈接數據庫的密碼;
瞭解JDBC的已經明白了,這些信息已經足夠了;
配置數據源信息,從新部署,一切ok;
繼續點擊進行操做,哎?怎麼都是亂碼,我使用的全是UTF8啊,不可能出現亂碼啊;
而後部署在本機測試,一切ok,我當時很納悶,又開始翻文檔,沒啥可借鑑的信息;
因而採用了調試跟蹤大法,步步進行輸出,看看是哪一個環節出現了編碼轉換錯誤;
首先是在jsp中alert信息,ok,中文沒問題;
而後再servlet中out信息,亂碼,原來在這裏,我此時想的是爲何本地好使,放在雲上就很差使了呢;
個人servlet關於編碼的代碼片斷:
in doPost:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/javascript");
Service service = (Service)ctx.getBean("service");
String callback = request.getParameter("callback");
我全部的請求進來,都走doPost,進入doPost的第一件事情,就是編碼(之前都是用filter);
最終根據經驗判斷,估計是對信息作了兩次UTF8轉換,致使亂碼出現;會不會CF已經對全部請求和響應都作了UTF8編碼?
我這樣豈不是又作了一遍,因此果斷註釋掉,從新部署,ok,亂碼消失;
kFeedback開發、部署過程當中主要碰到了以上兩個問題,應該是屬於初級問題,
但相信也會有很多朋友會遇到,因此把這個過程寫出來與你們分享,讓你們少走彎路;
文章的結尾贊一下cloudfoundry,部署、管理很是方便,工具及文檔支持都很給力,但願能爲開發者免費下去。
最後祝cloudfoundry愈來愈好,osc應用開發大賽圓滿成功;
最近整理一下代碼,將kFeedback開源,爲初學者提供一個完整的例子;
關於kFeedback的更多信息,請詳見這裏:http://my.oschina.net/kzhou/blog/98855
@紅薯 我這可不是拉票啊,別誤會:)