伙伴云客服论坛»论坛 S区 S软件开发 查看内容

0 评论

0 收藏

分享

使用MUI框架构建App恳求http接口实例代码

简介
最近在看Dcloud的MUI框架,MUI封装了android、ios等多个平台的原生接口,到达开发一个项目,采取不同打包方式,消费多种平台的app。
无可厚非,对于从事java web开发的工程师,带来了极大的福音,再也不用去花太多时间去学习原生的android、ios语言,大大缩短了app开发的学习周期和本钱。
当然,既然是做了封装处置,肯定性能上面不如原生。但是Dcloud官方声称MUI是最接近原生App体验的前端框架,并且在一些低端机上的表现也比较理想,想必也做了不少优化处置,另一方面,随着手机市场的剧烈竞争,手机配置及价格都越来越让人满意,性能问题就愈发的可以忽略不计,毕竟项目周期和本钱也相当的重要!之前也理解过PhoneGap框架(仅仅是理解),据说,MUI的性能要比PhoneGap好。当然,仅仅是代表鄙人的观点,暂时也没有在重型或者大数据量项目上做过验证,只好大家各自体验了。
看得出来Dcloud还是做了不少事情的,再加上国产,这个还是要支持的!
MUI官方地址:http://www.dcloud.io/mui.html
好了,废话不多说,下面进入正题。
要用app恳求http接口当然要分别有http接口和app应用。
1.创建http接口
我这里是做了一个很简单的java servlet的项目。
新建java web项目,项目名myhttp。web.xml中配置一个名为login的servlet恳求:
  1. <servlet>
  2. <servlet-name>login</servlet-name>
  3. <servlet-class>demo.webservice.LoginServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>login</servlet-name>
  7. <url-pattern>/login.do</url-pattern>
  8. </servlet-mapping>
复制代码
demo.webservice目录下的LoginServlet.java代码:
  1. package demo.webservice;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. @SuppressWarnings("serial")
  9. public class LoginServlet extends HttpServlet{
  10. @Override
  11. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  12.   throws ServletException, IOException {
  13.   this.doPost(req, resp);
  14. }
  15. @Override
  16. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  17.   throws ServletException, IOException {
  18.   System.out.println("进入post方法!");
  19.   req.setCharacterEncoding("utf-8");
  20.   resp.setCharacterEncoding("utf-8");
  21.   resp.setContentType("text/html;charset=utf-8");
  22.   PrintWriter out = resp.getWriter();
  23.   String name = req.getParameter("name");
  24.   String pwd = req.getParameter("password");
  25.   if("admin".equals(name) && "123".equals(pwd)){
  26.   //验证通过
  27.   out.write("Login Success!");
  28.   }else{
  29.   out.write("Login Fail!");
  30.   }
  31.   out.flush();
  32.   out.close();
  33. }
  34. }
复制代码
这里做了一个很简单的验证示例,若输入用户名和密码分别为“admin”、“123”,即验证通过,返回“Login Success”,否则返回“Login Fail”。因为仅仅是个示例,就不去连数据库啦!
OK,web端的http接口就开发完成了,通过地址“http://[ip地址]:[端口]/myhttp/login?name=admin&password=123“即可访问该servlet恳求,得到返回结果。
我这里装逼格了一下,把web应用发布到了自己的效劳器上,模仿实际场景嘛!当然大家在本地也是可以的,可以通过阅读器访问本地项目地址访问。HBuilder工具是支持本地阅读器调试的。
2.使用HBuilder创建基于MUI框架的App
既然是基于MUI框架的App,当然要用Dcloud推出的HBuilder这款IDE开发啦,另外说明下,这款IDE开发前台确实超级棒,可以大幅度提升开发效率,HBuilder是基于Eclipse改造的,同时添加了很多便利的提示和快捷键功能,同时还支持EMMET规则。用官方的话就是:飞速编码的极客工具,手指爽,眼睛爽——让手爽,飞一般的编码(这里不是打广告哈,自己亲身体验过,确实很方便)。
在HBuilder中新建项目——挪动App,输入应用名称(我这里应用名为MUIDemo1),选择“mui项目”。
使用MUI框架构建App恳求http接口实例代码-1.jpg

点击完成,便生成了一个已包含mui的js、css、字体资源的项目模板。如图所示:
使用MUI框架构建App恳求http接口实例代码-2.jpg

OK,一个根底的App应用的框架就搭建好了。
3.页面编写,详细调用接口实现。
下面开端编写详细页面和实现接口的调用。
我这里为了方便,直接从”HelloMUI”项目模板中examples目录下copy了一个ajax.html示例页面置于MUIDemo1项目的根目录下。大家可以在新建挪动App项目时选择“Hello mui”模板即可生成。
翻开ajax.html页面,里面的一些css、js引入途径需要改一下,因为我直接把ajax.html页面放到了我新建项目中的根目录(原来是在examples目录下)。
使用MUI框架构建App恳求http接口实例代码-3.jpg

这里说明下,MUI是采用ajax方式发送恳求的,平时习惯,一些我们在后台的代码处置MUI都是在js中编写的(如今的js不只仅涉及前端的技术了,比如node.js)。
因为ajax.html中已经包含了一个完好的ajax恳求示例,所以,只需要在这根底上做下修改即可。修改后的页面代码如下:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <meta charset="utf-8">
  5.   <title>Ajax Login</title>
  6.   <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
  7.   <meta name="apple-mobile-web-app-capable" content="yes">
  8.   <meta name="apple-mobile-web-app-status-bar-style" content="black">
  9.   <!--规范mui.css-->
  10.   <link rel="stylesheet" href="./css/mui.min.css" rel="external nofollow" >
  11.   <!--App自定义的css-->
  12.   <link rel="stylesheet" type="text/css" href="./css/login.css" rel="external nofollow" />
  13.   <style>
  14.    .mui-content-padded {
  15.     padding: 5px;
  16.    }
  17.    body,body .mui-content {
  18.     background-color: #fff !important;
  19.    }
  20.    code {
  21.     word-wrap: break-word;
  22.     word-break: normal;
  23.     font-size: 90%;
  24.     color: #c7254e;
  25.     background-color: #f9f2f4;
  26.     border-radius: 4px;
  27.    }
  28.   </style>
  29. </head>
  30. <body>
  31.   <header class="mui-bar mui-bar-nav">
  32.    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
  33.    <h1 class="mui-title">用户登陆</h1>
  34.   </header>
  35.   <div class="mui-content">
  36.    <div class="mui-content-padded" style="padding-bottom: 50px;">
  37.     <p style="text-indent: 22px;margin-bottom: 50px;">
  38.      用户登录示例:正确用户名及密码admin,123。输入正确提示胜利,否则提示失败,测试ajax恳求http接口示例。
  39.     </p>
  40.     <!--<h4 class="mui-content-padded">登陆</h4>-->
  41.     <div class="mui-input-group">
  42.      <div class="mui-input-row">
  43.       <label>用户名:</label>
  44.       <input id="name" type="text" class="mui-input-clear" placeholder="用户名/邮箱">
  45.      </div>
  46.      <div class="mui-input-row mui-password">
  47.       <label>密   码:</label>
  48.       <input id="password" type="password" class="mui-input-password" placeholder="请输入密码">
  49.      </div>
  50.      <div class="mui-input-row">
  51.       <label>类   型::</label>
  52.       <select id="dataType">
  53.        <option value="html">HTML</option>
  54.        <option value="json">JSON</option>
  55.        <option value="xml">XML</option>
  56.       </select>
  57.      </div>
  58.      <div class="mui-input-row">
  59.       <label>方   式:</label>
  60.       <select id="method">
  61.        <option value="post">POST</option>
  62.        <option value="html">GET</option>
  63.       </select>
  64.      </div>
  65.      <div class="mui-button-row">
  66.       <button type="button" id="confirm" class="mui-btn mui-btn-primary">登  陆</button>
  67.      </div>
  68.     </div>
  69.     <h4 class="mui-content-padded">返回结果:</h4>
  70.     <code id="response"></code>
  71.    </div>
  72.   </div>
  73.   <script src="./js/mui.min.js"></script>
  74.   <script>
  75.    (function($) {
  76.     $.init({
  77.      swipeBack:true //启用右滑关闭功能
  78.     });
  79.     var network = true;
  80.     if(mui.os.plus){
  81.      mui.plusReady(function () {
  82.       if(plus.networkinfo.getCurrentType()==plus.networkinfo.CONNECTION_NONE){
  83.        network = false;
  84.       }
  85.      });
  86.     }
  87.     var nameEl = document.getElementById("name");
  88.     var passwordEl = document.getElementById("password");
  89.     var respnoseEl = document.getElementById("response");
  90.     var dataTypeEl = document.getElementById("dataType");
  91.     var methodEl = document.getElementById("method");
  92.     //胜利响应的回调函数
  93.     var success = function(response) {
  94.      console.log('响应胜利!');
  95.      var dataType = dataTypeEl.value;
  96.      if (dataType === 'json') {
  97.       response = JSON.stringify(response);
  98.      } else if (dataType === 'xml') {
  99.       response = new XMLSerializer().serializeToString(response).replace(/</g, "<").replace(/>/g, ">");
  100.      }
  101.      respnoseEl.innerHTML = response;
  102.     };
  103.     //设置全局beforeSend
  104.     $.ajaxSettings.beforeSend = function(xhr, setting) {
  105.      //beforeSend演示,也可在$.ajax({beforeSend:function(){}})中设置单个Ajax的beforeSend
  106.      console.log('beforeSend:::' + JSON.stringify(setting));
  107.     };
  108.     //设置全局complete
  109.     $.ajaxSettings.complete = function(xhr, status) {
  110.      console.log('complete:::' + status);
  111.     }
  112.     var ajax = function() {
  113.      console.log('进入ajax方法...');
  114.      //利用RunJS的Echo Ajax功能测试
  115.      var url = 'http://120.24.44.11:8080/myhttp/login.do';
  116.      //恳求方式,默认为Get;
  117.      var type = methodEl.value;
  118.      //预期效劳器范围的数据类型
  119.      var dataType = dataTypeEl.value;
  120.      //发送数据
  121.      console.log('url:'+ url + ",type:" + type + ",dataType:" + dataType);
  122.      var data = {
  123.       name: nameEl.value,
  124.       password: passwordEl.value
  125.      };
  126.      /*url = url + (dataType === 'html' ? 'text' : dataType);*/
  127.      respnoseEl.innerHTML = '正在恳求中...';
  128.      if (type === 'get') {
  129.       if (dataType === 'json') {
  130.        $.getJSON(url, data, success);
  131.       } else {
  132.        $.get(url, data, success, dataType);
  133.       }
  134.      } else if (type === 'post') {
  135.       $.post(url, data, success, dataType);
  136.      }
  137.     };
  138.     //发送恳求按钮的点击事件
  139.     document.getElementById("confirm").addEventListener('tap', function() {
  140.      if(network){
  141.       console.log('网络正常,正在发送恳求...');
  142.       ajax();
  143.      }else{
  144.       mui.toast("当前网络不给力,请稍后再试...");
  145.      }
  146.     });
  147.     //点击描绘中链接时,翻开对应网页介绍;
  148.     $('body').on('tap', 'a', function(e) {
  149.      var href = this.getAttribute('href');
  150.      if (href) {
  151.       if (window.plus) {
  152.        plus.runtime.openURL(href);
  153.       } else {
  154.        location.href = href;
  155.       }
  156.      }
  157.     });
  158.    })(mui);
  159.   </script>
  160. </body>
  161. </html>
复制代码
大家注意把url改成自己对应的恳求地址。详细代码就不需要讲解了,都比较简单。
页面编写好后,可以用USB把手机插上电脑,直接在手机上运行查看效果,也可以采用阅读器调试都非常方便。效果如下:
Chrome
使用MUI框架构建App恳求http接口实例代码-4.jpg

iphone(或android机)
使用MUI框架构建App恳求http接口实例代码-5.jpg

一切就绪,准备测试下效果。首先双击“manifest.json”文件,更改页面入口为“ajax.html”,保管。
选择在我的iphone上运行,这时候看手机发现已经装置好了应用,控制面板提示装置胜利,点击图标翻开应用,显示上图页面。输入用户名“admin”,密码“123”,点击“登录”(因为我的恳求类型和恳求方式分别为HTML、Post,所以不用改变,直接默认),返回结果提示:“Login Success”,修改下密码再次登录,提示“Login Fail”,如下图:
图1(返回胜利):
使用MUI框架构建App恳求http接口实例代码-6.jpg

图2(返回失败):
使用MUI框架构建App恳求http接口实例代码-7.jpg

综上所述,基于MUI停止挪动App开发更符合我们做java web“程序猿”的口味。开发过程中通过查看官方API及examples示例,有现成的一些东西可以利用,加上国产,API也没有语言障碍,所以感觉MUI是个不错的框架,自己无MUI开发经历,仅仅是浅尝甜头,需要学习的还很多,希望接下来时间MUI可以让自己在挪动方面有所弥补。
以上这篇使用MUI框架构建App恳求http接口实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持网站。

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

凉凉
注册会员
主题 23
回复 19
粉丝 0
|网站地图
快速回复 返回顶部 返回列表