云平台云计算大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云计算大作业
一、实验目的:
此次大作业实现了Web网页云平台的部署,数据库的写操作,以及微信公众号的建立以及关联;
2.通过实际的部署对云平台有实际深入的了解,体会云平台相对于传统平台的优势;
3.培养建立相对复杂系统的能力;
二、实验平台:
云平台使用的是新浪云,因为使用初期是免费的便于开发。
Web工程用MyEclipse 14建立,数据库采用云平台上的公共Mysql数据库,虽然安全性和稳定性*,但是免费。微信申请的公众号为订阅号。本实验网页采用jsp Web工程,微信接口采用php。
三、实验过程:
实验参考了大量的网上教程,期中一些为直接引用。
申请云平台:
/
创建新应用:
“控制台”—>“SAE”-->“创建新应用”;
依照提示创建新应用。由于本实验网页采用jsp Web工程,微信接口采用php。所以分别建立java 1.7 jvm的云平台和php应用,由于是轻应用,所以设置应如下图所示,否则免费额度一天就用光。如此配置一天要100左右。二级域名自定义,当然土豪可申请一级域名。
图3:Java 1.7 JVM的建立
图4:PHP空应用的建立
图5:控制台建立好的平台(域名显示)编辑和添加代码:
点击“管理应用”(就是网站的名字),进入管理界面,
点击左栏“应用”-->“代码管理”进入如下页面:
(之前可能要点击“创建版本”,记不清了)总之,只要看到这样的界面,就点击“编辑代码”,上传你已经编辑好的php的zip包(jvm是war包,具体导出步骤见下文)。
Eclipse导出war包:“file”→”export”→”选择一war形式导出”。
点击上传代码包,选择pHp代码上传。(java代码因为用带数据,所以开数据库之后才能知道接口修改代码,再上传。)
开启公共数据库:
点击左栏“数据库与缓存服务”,选择共享性数据库,
相关链接代码:
// 使用主库写数据使用SaeUserInfo提供的静态方法获取应用的AccessKey和SecretKey String URL="jdbc:mysql:// ";
String username=SaeUserInfo.getAccessKey();
String password=SaeUserInfo.getSecretKey();
String driver="com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
Connection con=DriverManager.getConnection(url,username,password);
// 使用从库读数据
String URL="jdbc:mysql:// ";
// 通过SaeUserInfo提供的静态方法获取应用的access_key和secret_key
String Username=SaeUserInfo.getAccessKey();
String Password=SaeUserInfo.getSecretKey();
String Driver="com.mysql.jdbc.Driver";
Class.forName(Driver).newInstance();
Connection con=DriverManager.getConnection(URL,Username,Password);
之后上传Java代码。
四、实验部分代码:
/*
罗网计划
*/
header('Content-type:text');
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
$wechatObj->responseMsg();
}else{
$wechatObj->valid();
}
class wechatCallbackapiTest
{
//验证签名
public function valid()
{
$echoStr = $_GET["echostr"];
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
echo $echoStr;
exit;
}
}
//响应消息
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$this->logger("R \r\n".$postStr);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
//消息类型分离
switch ($RX_TYPE)
{
case "event":
$result = $this->receiveEvent($postObj);
break;
case "text":
$result = $this->receiveText($postObj);
break;
case "image":
$result = $this->receiveImage($postObj);
break;
case "location":
$result = $this->receiveLocation($postObj);
break;
case "voice":
$result = $this->receiveVoice($postObj);
break;
case "video":
case "shortvideo":
$result = $this->receiveVideo($postObj);
break;
case "link":
$result = $this->receiveLink($postObj);