起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6518|回复: 5

X5 手机App 和服务端交互原理

  [复制链接]

31

主题

1824

帖子

2991

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2991
发表于 2015-1-21 18:04:00 | 显示全部楼层 |阅读模式
拿X5自带的外卖来说举例,他有3部分组成
1. UI2/takeout       这个是页面,由页面文件.w和js以及css等构成,js中有$.ajax的请求
2. Native/X5-外卖  这个是本地app的工程,用来打包app
3. tomcat的webapps/x5bass 这个是服务端,提供步骤1中的$.ajax访问

开发工具Studio中启动Tomat,这个将启动两个服务,一个是tomcat的webapps下的x5bass服务,另外一个是用于解析运行UI2资源的UIServer(在runtime\UIServer)。为描述方便,这里假设本机ip地址是192.168.1.1, tomcat的端口是8080

浏览器:
输入http://192.168.1.1:8080/x5/UI2/takeout/index.w
这样就可以访问外面功能,这个在电脑浏览器或者手机浏览器都可以(推荐使用chrome浏览器)
解释一下这个地址,8080后面的x5是UIServer的名字,在tomcat的server.xml中定义,具体请参考tomat的相关说明,表示访问UIServer
UI2/takeout/index.w 这个会请求到UIServer后,有UIServer做编译,生成html和js共前端使用

App
首先要生成App,先看看默认的App定义,在 Native/X5-外卖 上点右键选择“编辑本地App”,向导中有三个重要的参数服务地址:这里应该写 http://192.168.1.1:8080, 因为x5bass在这个服务上
首页: 就是默认打开的页面 写 /x5/UI2/takeout/index.w,这里 x5那个可以写成任意的,和前面介绍的UIServer的那个x5名字没任何关系
需要打包的资源:默认选择了takeout,这里如果选择了,那UI2/takeout下的资源会被打包到App里面,也就是说tomat中没有UISever那个服务运行也是正常的,如果不选择,则首页那个就必须写成/x5/UI2/takeout/index.w,因为默认的UIServer的名字叫x5,App启动时是通过UIServer来获取页面,和浏览器访问完全相同


补脑:
如果takeout资源打包了,服务地址写 http://localhost 可否?
还真不行,因为资源中有$.ajax 的请求会发到 192.168.1.1:8080/x5bass 上,如果写localhost,那页面打开没问题,但ajax请求会遇到传说中的跨域问题,导致失败,所以这里服务地址要写x5bass服务的地址,换句话说,对于资源打到App的情况,服务地址更多是告诉ajax请求当前域是谁,从而避免跨域问题(所有请求都是http://192.168.1.1:8080/xxx,但app内部做了处理,会优先找打入app的资源,没有的在请求服务端,对于webview来说,是读取本地资源还是服务端请求没任何区别,从而解决跨域问题)。当然,如果没有任何ajax请求或者用插件方式发http来访问,实际上可以写 http://localhost。而如果要访问多个地址,那实际上也只能写成 http://localhost,在配合http的插件发请求,就不能使用jquery的了


3

主题

20

帖子

44

积分

新手上路

Rank: 1

积分
44
QQ
发表于 2015-3-27 11:15:53 | 显示全部楼层
感谢,希望多看到这种入门普及帖
匿名  发表于 2015-7-15 06:35:57
补脑:
如果takeout资源打包了,服务地址写 http://localhost 可否?
还真不行,因为资源中有$.ajax 的请求会发到 192.168.1.1:8080/x5bass 上,如果写localhost,那页面打开没问题,但ajax请求会遇到传说中的跨域问题,导致失败,所以这里服务地址要写x5bass服务的地址,换句话说,对于资源打到App的情况,服务地址更多是告诉ajax请求当前域是谁,从而避免跨域问题(所有请求都是http://192.168.1.1:8080/xxx,但app内部做了处理,会优先找打入app的资源,没有的在请求服务端,对于webview来说,是读取本地资源还是服务端请求没任何区别,从而解决跨域问题)。当然,如果没有任何ajax请求或者用插件方式发http来访问,实际上可以写 http://localhost。而如果要访问多个地址,那实际上也只能写成 http://localhost,在配合http的插件发请求,就不能使用jquery的了


确定这是跨域问题吗????是管理员啊。有点误人子弟吧。。。。
匿名  发表于 2015-7-15 06:38:37
实际的情况是:http://localhost:8080/。。。那么应用只会访问 手机的本地资源,而不会访问PC这个服务器。因为应用部署到手机上以后,localhost就是指手机, 而不是电脑服务器了。。。而不是什么狗P跨域问题。
匿名  发表于 2017-5-23 17:55:57
能提供3.3或3.6版本这样的说明吗

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
QQ
发表于 2018-12-11 20:01:56 | 显示全部楼层
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2019-2-19 08:43 , Processed in 0.125646 second(s), 29 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表