CloudFoundry的使用心得——kFeedback云反馈开发之旅

响应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并访问,得到了如下信息:
我在云端;

我的环境变量信息: 

{"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
@红薯 我这可不是拉票啊,别误会:)




你可能感兴趣的:(kFeedback,foundry,Clound)