Web app浅谈

来源:互联网 发布:怎么用手机注册淘宝 编辑:程序博客网 时间:2024/06/03 17:06

@(笔记)[MarkDown|我的博客|工作]

新加入一家创业公司,做一个社交化的在线商店,有Android和iOS客户端,后台使用java,我主要负责接口设计和实现.

目前产品已经上线,现在主要是前端的业务流程优化,后台的优化和需求更改.客户端使用Web app + Native app的形式.

刚入职没几天,主要还在熟悉业务流程.对于菜鸟级我的来说,以前的小项目都是10多张表就搞定了,现在这个项目有170多张表,想来要完全熟悉全部的业务流程需要花写功夫了.

以前都是写的Java Web项目,现在一下来写Web app项目有点不习惯,主要是测试有点麻烦.接下来,我将写写入职一周以来对项目的总体认识以及Web app开发和Java Web开发的区别(其实也没多大区别),算是做一个周总结吧.

Web app 和 Native app的区别

Native App:
1. 开发成本非常大。一般使用的开发语言为Java、C++、Objective-C。
2. 更新体验较差、同时也比较麻烦。每一次发布新的版本,都需要做版本打包,且需要用户手动更新(有些应用程序即使不需要用户手动更新,但是也需要有一个恶心的提示)。
3. 非常酷。因为Native app可以调用iOS中的UI控件以UI方法,它可以实现Web app无法实现的一些非常酷的交互效果。
4. Native app是被Apple认可的。Native app可以被Apple认可为一款可信任的独立软件,可以放在Apple Stroe出售,但是Web app却不行。

Web App:
1. 开发成本较低。使用Web开发技术就可以轻松的完成Web app的开发。
2. 升级较简单。升级不需要通知用户,在服务端更新文件即可,用户完全没有感觉。
3. 维护比较轻松。和一般的Web一样,维护比较简单,它其实就是一个站点。

Web app说白了就是一个针对iPhone、Android优化后的Web站点,它使用的技术无非就是HTML或HTML5、CSS3、JavaScript,服务端技术Java、PHP、ASP。

说到这里,我曾经想过,为什么不直接写一个Java Web项目,然后做一个Web app直接访问这个网站,只要网站是响应式的,这样就不需要做多少更改让手机和PC都能以较好的方式访问,不用针对手机特定来开发一款app.
但是查了下资料,这种方式有很多弊端:
1. 最最重要的一点,这种app其实就是一个浏览器,虽然开发速度快,但是不可能通过AppStore的审核,国内几个较大的Android市场也通过不了;
2. 做app就是做良心,给人以最好的用户体验,如果网络环境不佳的话,就是一个大白页,用户体验值为0;
3. 因为CSS和JS资源不在本地,需要远程载入,如果使用比较大的前端框架,如bootstrap之类时,加上现在4G的普及,用户使用app逛下商城,买买东西,一套房子就没用了….
4. 在网页中经常使用的jQuery框架在webview里的速度并不理想,再如果不是ajax的网页请求,每次操作都要条抓和网页渲染,想想我也是醉了.

所以说为了尽快上线而不管用户体验的老板都不是司机.我们公司的老板还行,没用使用这种方式,而是使用Hrbird app(老板声音有点像杰森·斯坦森,不知道是不是嗨歌嗨到嗓子哑了….)

Java Web 与 Web app 数据交互的区别

对于Java Web开发,客户端向服务器发出请求,给上一些参数,然后查询数据库,返回数据到前台,这个流程也同样适用于Web app,只是Web app 更多的是直接返回json格式的数据.
我们常说的 app 接口开发,对于初学者,可能一下就想到了 interface(其实我也是这么想的),但是这是不准确的.
比如现在我负责的接口开发,是要负责从Controller到Service到数据库最后返回json数据这么一整条流程的开发.当用户点击app上一个按钮或者查看详细信息时,app会调用我们写好的接口(其实说白了就是一URL),然后经过DispatcherServlet根据URL调用特定的Controller进行处理,最后返回json数据给app.

举个最简单的例子,用户登录.
一个web系统,用户通过浏览器把用户名密码传递到web服务端,也就是后台,那么这里就有个URL比如叫 XXX\user\login.action?userid=zhangsan&pwd=123
然后你后台就能获取到 userid 和pwd然后就能返回给浏览器成功与否.
同样的道理,
app调用XXX\user\login.action?userid=zhangsan&pwd=123
你后台一样能获取到userid和pwd那么你就可以给安卓APP返回信息告诉他登录成功与否.
所以这里所谓的接口,就是一个URL ,

接口返回json 或 xml 就可以了,然后你开发的当然是知道接口的url了,还有接口的传参,这样就可以让前端调用了。
告诉前端,你的url地址,需要给这个接口传什么参数,返回参数是什么(返回他们可以测试得到,不过最好还是先告诉他们),字段说明,这样就可以交互了.

说说客户端的登录

来公司的第一天就看的实现登录的代码,与Java web最大的区别就是一般web是使用session验证登录状态,而app则使用token来验证登录状态(token是自己定义的一个和用户ID相关的加密字符串,传入后台后从数据库查询用户信息)。还有如果对安全性要求较高,app传输数据时可能会对数据进行加密,而web一般没有这一步,web的加密一般是使用https。

不安全的方式

在app中保存登录数据,每次调用接口时传输
为了偷懒,程序员什么都干得出来.在用户登录之后,直接把用户名和密码保存在本地,然后每次调用后端接口时作为参数传递,但是这种方式及其不安全,随便那个嗅探器就可以把用户名密码弄到手,如果用户习惯所有的地方都使用同一用户名和密码,那么黑客通过撞库的方式能把用户的所有信息一锅端(这也是为什么不要使用公共场合的wifi).

安全的登录方式

登录时请求一次token,之后用token调用接口(公司就是这么搞的)
大体的流程:
1. 用户输入电话号码和密码
2. 在数据库中查询有无此电话号码,没有则提示错误;有则再验证密码是否正确;
3. 如果登录成功,调用api生成token(使用Base64加密,使用URLEncoder解决中文参数问题) ;
4. 将key=客户ID,value=token放入redis缓存
5. 返回客户信息

以后用户请求时,都会带上token这个参数,当token过时后将跳转到登录界面重新登录

遇到的问题

在windows下搭建redis服务器

项目中用到了redis作用缓存服务器,以前从来没有使用过,所以学习了下载windows下搭建redis服务器.
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。这里就不做过多介绍了,有兴趣可以去百度一下.

由于Redis官网不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:
https://github.com/MSOpenTech/redis

打开以后,可以直接使用浏览器下载,或者git克隆。
可以在项目主页右边找到 zip包下载
下载解压,没什么好说的,在解压后的bin目录下有以下这些文件:

redis-benchmark.exe         #基准测试  redis-check-aof.exe         # aof  redis-check-dump.exe        # dump  redis-cli.exe               # 客户端  redis-server.exe            # 服务器  redis.windows.conf          # 配置文件  

启动服务器命令:redis-server redis.windows.conf
可以写一个批处理命令,以后直接双击启动,关闭cmd窗口就关闭了服务器

我第一次启动报错了

D:\Develop\redis-2.8.12>redis-server.exe redis.windows.conf
[7736] 10 Aug 21:39:42.974 #
The Windows version of Redis allocates a large memory mapped file for sharing
the heap with the forked process used in persistence operations. This file
will be created in the current working directory or the directory specified by
the ‘dir’ directive in the .conf file. Windows is reporting that there is
insufficient disk space available for this file (Windows error 0x70).

You may fix this problem by either reducing the size of the Redis heap with
the –maxheap flag, or by starting redis from a working directory with
sufficient space available for the Redis heap.

Please see the documentation included with the binary distributions for more
details on the –maxheap flag.

Redis can not continue. Exiting.

根据提示,是 maxheap 标识有问题,打开配置文件 redis.windows.conf ,搜索 maxheap , 然后直接指定好内容即可.

.......  #    # maxheap <bytes>  maxheap 1024000000  .......

再次启动服务器
enter image description here

然后使用自带的客户端工具进行测试
enter image description here

成功了,玩儿去吧

svn版本控制问题

整个工程使用Maven,并使用svn进行版本控制,但是当导入工程时报svn错误,开始怀疑配置不正确,进入intellij的svn设置,去掉所有的复选框
enter image description here

还是报错,查询资料后发现1.8使用了命令工具(command line client tools)默认安装SVN时是未安装此客户端的。
enter image description here

重新安装乌龟,然后把命令工具选上,svn配置不变,都不勾选,然后重启IDEA就可以了.

0 0