后台开发 - CSDN
  • 带领大家借助当下比较流行的springboot框架快速开发属于自己的java后台。即便你是编程小白,没有任何编程基础也可以学习本课程。 知识点 1,Java 2,springboot 3,freemarker 4,bootstrap4.3 5...
  • 本课程开发一个主要开发一个朋友公司的一个微信小程序,从注册微信小程序,搭建与设置服务器域名,用户登录页面,用户注册,后端使用PHP与mysql数据库存储数据,前端展示订单信息,自动获取用户信息,地址,接单,...
  • 想了解后台开发的app移动端开发人员 想了解后台开发的web前端同学 在校大学生 创业人员 这套课程全部是用大白话讲解,即便你是一个编程小白,没有任何开发经验,只要跟着视频,一步步来,你...
  • 您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 ... 互联网发展到今天,规模变得越来越大,也...针对该问题,本次公开课将分享在后台开发过程中,不同业务场景下这类问题的解决思路和方案。
  • 说到后台开发,首选就有一个问题:什么是后台开发。就我理解,就是做服务器端开发。在服务器端运行着不同功能的服务,有直接与客户端连接的,有实现某一特定业务的比如用户注册登录,有数据存储的如基于mysql,...

    

    说到后台开发,首选就有一个问题:什么是后台开发。就我理解,就是做服务器端开发。在服务器端运行着不同功能的服务,有直接与客户端连接的,有实现某一特定业务的比如用户注册登录,有数据存储的如基于mysql,memcached,redis等做的存储系统,除此之外还有一些满足运维监控系统,运营统计系统等。

    那么后台开发需要哪些技术呢?回答这个问题之前先来看看一般的后台系统架构,如下图所示:

     

    后台系统一般分为接入层,业务逻辑层和数据存储层,它们各自有不同的职责:

    接入层主要负责客户端接入把用户请求分发到业务逻辑层,客户端不论是什么是浏览器还是APP类型的首先都要连接到接入层,任何请求都是通过接入层转发,客户端不用户关心功能具体有哪个服务实现的。接入层主要解决跟用户的连接问题。

    业务逻辑层负责实现具体的业务功能,满足业务需求。比如在微信中你输入手机号码和登陆密码进入微信,跟好友聊天发消息都是业务层中不同的业务模块完成的。从产品的角度看它是整个后台的核心,不论是接入层还是数据存储层都是为它做支撑的。

    数据存储层负责保存业务所需的数据,提供业务数据的读写支撑。

    后台系统的三层架构需要根据具体情况动态调整,而不是一成不变的。具体需要怎样调整需要看具体的业务场景。首先要分析出系统的瓶颈在哪里,重点投入提高供瓶颈,其他地方则可以做的粗糙一些,样可以避免过度设计,提高效率。

    比如开发一个新的产品时,这个产品是没什么用户的,可能就有几百个种子用户。功能上也不知道用户喜欢什么功能。这个时候基本没什么瓶颈的,这个时候就要遵循简单原则,架构上尽可能精简,只做最核心的一些功能,目的是要尽快上线验证。这个时候接入层和业务逻辑层可以合并,直连数据库就行了。

    随着用户量增加,产品功能越来越复杂,就会遇到第一个瓶颈,不同的业务场景瓶颈也不同。比如视频的瓶颈一般在网卡I/O上,实时语音瓶颈一般在接入层上,电商类网站瓶颈一般在图片存储上即磁盘I/O,需要加密压缩的瓶颈一般在CPU上。

    分析瓶颈并优化是后台开发的核心能力,它需要以下几个方面的技术支撑:

     基础:

    1.服务器硬件硬件的性能,网卡性能,磁盘I/O性能,CUP性能。

    2.常用系统调用和库函数的性能,如read,write, memcpy,gettimeofday。

    3.常用户数据结构和算法的性能,如数组,队列,二叉树,hash表。

    4.了解操作系统内存操作机制,熟悉内存分配算法,可以根据需要自己设计内存分配算法变体。

    网络:

    1. 精通Socket网络编程,对TCP/IP协议要非常熟悉。
    2. 熟悉常用的应层协议如http, ftp, smpt, pop3。
    3. 能够根据需要设计专用应用层协议。
    4. 能够根据业务场景调整操作系统或开源工具的的网络参数。
    5. 能够根据产品运行的局域网和广域网环境优化接入机制。

    并发:

    1. 熟练应用操作系统提供的进程间通信机制。
    2. 清楚地知道多线程与多进程成各自的优缺点以及它们的应用场景。
    3. 数据并发访问机制。
    4. 无锁编程技术。
    5. 并发设计模式。
    6. 同步异步程序设计,了解他们的优缺点,根据具体场景灵活使用。

    分布式:

    1. 数据同步的算法。
    2. 数据/服务分片算法。
    3. 负载均衡的设计方案。
    4. 客户端接入设计。
    5. 可用性设计。
    6. 扩展性设计。

    数据存储:

    1. mysql数据库运行机制,清楚各种存储引擎的特点
    2. 了解mysql的索引设计机制,知道基本的优化方法。
    3. 能够使用各种nosql数据库。
    4. 数据主备方案设计
    5. 数据cache设计

    安全:

    1. 对称加密算法,非对称加密算法,摘要算法。
    2. SQL注入,跨站攻击,内存溢出防范方法。
    3. 了解https原理,能够根据情况设计安全方案。
    4. 容错设计。
    5. 容灾设计。

    故障定位:

    静态代码分析工具

    运行时故障定位工具top,free,iostat,mpstat,

    展开全文
  • 笔者接触过不少在校的同学,这些同学对于数据结构、算法、网络编程这些基础课程掌握得都很好,但有不少人到了实际的项目开发时就蒙蔽,不知道整个软件系统的体系和流程,笔者认为首先对整个过程有个大致的理解,再...

    很多同学对于数据结构、算法、网络编程这些基础课程掌握得都很好,但有不少人到了实际的项目开发时就蒙蔽,不知道整个软件系统的体系和流程,个人认为首先对整个过程有个大致的理解,再逐一对这些技术去进行深入的学习是很有利的。首先自我介绍下,笔者从事JAVA开发,也只是个小白,有很多技术同样也没有很深入地去学习,有些理解不当的地方欢迎指正,一起学习。另外,最近会一直更博分享自己各项技术的学习心得,欢迎大家一起交流。


    一、前端技术

    笔者认为后台开发人员掌握一定的前端技术是必要的,作为JAVA开发最起码的JSP、JQuery、BootStrap这些你得有起码的了解。除此之外,前后端的交互技术,AJAX、JSON、JSONP也是必须了解和掌握的。

    二、通信协议
    通信协议就跟上面说的网络编程这门课程有很大的关系,通信协议通俗一点说就是:客户端和服务器通信的格式,大家都知道报文是二进制的,而协议的作用就是规定了某一位或某几位二进制串的作用,规定了报文应该按照怎么样的格式来编码。如果违反了这个协议,那么报文是不可能被客户端或服务器正确解码的。

    大家最熟悉的协议大概就是HTTP,HTTP协议具体的报文格式也不需要再过多的介绍了。在这里,大家可以思考一个问题,如果一个公司或者实验室内部调用的接口,是不是也需要HTTP协议来通信呢?笔者认为这是一个最差的方案,因为HTTP的报文头部比较长,内部的接口调用是不需要那么复杂的头部的,所以一般采用的是RPC协议。

    RPC全称远程过程调用,通过它可是实现一台服务器去调用另外一台服务器上的方法,是基于TCP/IP协议上的一个协议。举个栗子,B服务器上有b1()和b2()两个方法,首先需要向服务注册与发现设备进行注册,A服务器想要调用b1()时,向服务注册与发现设备查询b1()方法所属服务器的IP和端口,得到后,将A服务器的请求路由到该IP的制定端口上。那么通信协议在这个流程中的作用是什么呢?A服务器想要请求b1()方法,他的请求发送到服务注册与发现设备之后,该设备需要通过规定的通信协议来识别该请求报文具体请求的服务名,由此来查询该服务的IP及端口,这个过程叫做路由。HTTP协议中,是通过URL来进行路由的。在RPC过程中,我们一般使用自己定义的协议来减少报文的长度,最简单的方法是通过一个唯一的整形来进行路由,具体的路由方案有很多,这里不再过多赘述。所以我们来总结一下,通信协议规定了通信的格式,他可以规定某几位为路由数,某几位为请求报文的body,一个很简单的通信协议头部有路由字段就可以满足了,相比于HTTP的头部而已,轻量了很多。body里面存的就是请求的具体参数和响应结果了,该区域一般也是有数据传输协议来进行数据的编码的,json是一种选择,而另一种更好的选择就是谷歌的protocol buffer,相比于json而言,它是二进制的,更轻量,具体的特性和使用方法会在后面的文章中进行介绍。笔者最经常用的一个RPC框架是Thrift,也会在后面的文章中将会给大家介绍。

    三、负载均衡
    负载均衡这个词,相信大家接触得都很多。负载均衡就是用多台应用服务器来完成一个业务,通过负载均衡中间件对这些服务器的负载情况进行一个管理及动态的调整,以尽量消除或减少各服务器负载不均衡的现象。还是上一节当中的那个栗子,当B服务器的请求量很大时,一台服务器是无法支撑起整个业务的,于是我们对该服务器做一个扩展,变成三台服务器B1、B2、B3共同来提供服务,他们三台服务器的IP和端口首先都需要向服务注册与发现设备来进行注册,同时这三台服务器的负载量由负载均衡服务器进行管理,这是A服务器对于b1()方法的一个请求到达负载均衡服务器,负载均衡服务器需要去请求服务注册于发现设备该方法的路由地址列表,拿到该列表后从中选择负载量最优的那一台服务器,将A服务器的请求路由至那台服务器上。
    在公司里面,负载均衡层一般都由运维负责,笔者还接触不到这些,只能大略地介绍一些,如果大家想要深入地学习,可以先学习下使用nginx来搭建负载均衡服务器。
    四、反向代理

    反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。通俗点讲,ABC三个人,A想向C问个问题,但是得通过B来进行。A先告诉B,B再去问C,最后B将C的回答转述给A。可能大家会觉得为什么需要这么麻烦的过程呢,A直接问C不就好了。大家这个时候可以打开一个网页,按一下F12,选择network选项卡,然后F5刷新一下网页,在这个选项卡里,会刷出一个列表,这个列表就是你刷新一次网页浏览器需要向服务器发送的请求列表。我们知道,一个HTTP请求是只能请求一个对象的,一个网页里有10个图片就需要请求10次,实际上你刷新一个网页时,大部分的请求都是静态元素,即图片、js或css等文件,如果这些大部分的请求都需要通过应用服务器来完成的话,会给应用服务器带来很大的负担,所以反向代理的作用,就是缓存这些静态文件,当浏览器发送一个请求时,反向代理服务器判断请求内容是否是它缓存内容,如果是,就可以直接将结果返回;如果不是,反向代理再将该请求转发至应用服务器上处理。这样,就减少了应用服务器的负担。常用的反向代理——nginx。

    有人可能会说,nginx好厉害啊,项目部署用一台nginx就可以完成负载均衡和反向代理了。实际上是需要两台nginx来架构的,一台放再lvs中负责负载,另一台部署在tomcat前,负责反向代理。

    五、业务编程

    通过上面四点的介绍,一个请求已经能从客户端发送至应用服务器tomcat上了。接下来就是根据服务器编程完成相应的业务流程。后台常用的开发框架笔者都有接触并且用过不短时间,Stuts2、Spring MVC、Spring、Hibernate、MyBatis这些。一般两套常用的体系是Struts2+Spring+Hibernate和Spring MVC+Spring+MyBatis,很明显Spring的作用不言而喻。这两套体系都是MVC设计思想的体现。对比下这两套体系,Struts2和Spring MVC都是Controller层的框架,后者对初学者更友好一些,而且前者经常出现一些神奇的BUG,公司里面也是很不喜欢使用的,所以强烈推荐的是Spring MVC。Hibernate和MyBatis都是两个比较重用的持久层框架,Hibernate会比Mybatis好入门一些,但是MyBatis会比Hibernate轻量,使用广泛程度也差不多。

    六、数据库

    数据库需要掌握的:sql语句、索引、explain性能分析等

    七、缓存

    缓存分本地缓存和缓存服务器。本地缓存指的是将数据缓存下本地的内存中,一般对一些读业务的数据采用本地缓存,推荐大家学习下google的guava cache。缓存服务器的话推荐redis,一个键值对的缓存,比较适合入门


    除了上面的这些,还有maven svn git这些工具也是需要掌握的

    由于时间和篇幅原因,这篇博文知识大致地进行了名词介绍,后面会为大家详细介绍



    展开全文
  • App后台开发

    2020-07-17 17:53:07
    App后台开发运维和架构实践,有助于你了解App后台开发运维和架构实践
  • Java后台开发入门

    2019-03-27 14:06:58
    1,什么是Web应用程序   Web应用程序是可以通过Web进行访问的应用程序,最大的好处是访问非常容易。...  软件开发领域的三大方向:桌面应用程序(C/S架构 比如说QQ.exe等),Web应用程序(B/S架构 比如说淘...
      

    转载自: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/71152003

    1,什么是Web应用程序

      Web应用程序是可以通过Web进行访问的应用程序,最大的好处是访问非常容易。比如淘宝、新浪、网易等门户网站
      软件开发领域的三大方向:桌面应用程序(C/S架构 比如说QQ.exe等),Web应用程序(B/S架构 比如说淘宝,新浪,网易等门户网站),嵌入式应用程序(C/S架构 比如说android开发,ios开发等)
      C/S架构是客户端/服务器架构,B/S架构是浏览器/服务器架构,一般来说,前者的数据流量会比后者要小,但维护比较麻烦。举个例子:以买火车票为例,用12306客户端买火车票就为前者,直接上网页买就是后者。
      静态网页所需技术:Html和css。表现形式:内容固定,不会更新
      动态网页所需技术:Html、css、JavaScript、以及数据库,最少一门高级语言(Java,C#,Php以及Python),动态网页脚本技术(Jsp,asp.net或者Php)。表现形式:内容通过程序动态显示,自动更新

    2,Java Web环境搭建

      JDK,Tomcat服务器以及MyEclipse 集成开发环境,安装出现的问题参考此博客:http://blog.csdn.net/zxc514257857/article/details/69939090
      Tomcat打开方式:在Tomcat安装包的bin目录下找startup.bat,双击打开则开始运行Tomcat,关闭Tomcat可以在bin目录下找shutdown.bat,双击打开也可以关闭Tomcat。同时也可以通过关闭运行startup.bat打开控制台页面也可以关闭Tomcat,但不推荐
      Tomcat的目录结构: /bin 用于Tomcat的命令文件,比如startup.bat和shutdown.bat;/conf 用于存放Tomcat服务器的配置文件; /lib 用于存放Tomcat服务器所需的Jar文件; /logs 用于存放Tomcat的日志文件; /temp 用于存放Tomcat运行时的临时文件;/webapps 当发布Web应用时,默认会将Web应用的文件发布到此目录;/work Tomcat把由Jsp生成的Servlet放于此目录下

    3,手动创建第一个Java Web项目

      在tomcat—>webapps目录下新建一个文件夹,以项目名称命名(比如MyFirstJavaWebProject),在此文件夹中新建一个index.jsp文件,同时新建一个WEB-INF文件夹,WEB-INF文件夹中新建一个lib文件夹,一个classes文件夹和一个web.xml(可将其他正常项目的web.xml文件拷贝过来使用,但注释需删除干净)
      index.jsp是默认的服务端展示页面
      WEB-INF 是Java Web的安全目录,客户端无法访问,只有服务端可以访问
      web.xml 是项目部署文件。index.jsp相当于项目的欢迎页,默认如果域名未完整输入也会跳入index.jsp页面,但如果没有index.jsp页面或者不想将index.jsp页面设为项目的欢迎页,则可以在web.xml文件中修改项目的欢迎页。方法是,在web.xml文件中做如下改动:
    这里写图片描述
      lib目录用于存放项目所需要的jar包
      classes目录用于存放编译生成的.class字节码文件

    4,通过MyEclipse创建Java Web项目

      在MyEclipse中新建一个Java Web项目,在项目的WebRoot目录下找到index.jsp,修改页面内容,完成后将页面推到服务器中(实际就是在tomcat—>webapps目录下生成相关文件),然后通过localhost:8080/项目名/index.jsp访问页面内容

    5,MyEclipse Web项目目录结构

    这里写图片描述

    6,配置MyEclipse所默认使用的JRE,将软件中自带的JRE换成我们电脑中所安装的较新版的JRE

      在Window—>preferences—>Java—>Installed JREs中,右侧点击add,选择standard VM,找到自己安装的JRE,最后选中保存即可
      

    7,在MyEclispe中集成Tomcat服务器环境

      Window—>preferences—>MyEclipse—>servers—>Tomcat,选择自己的Tomcat的版本,将Tomcat server设置为enable,然后选择JDK为自己本地安装的JDK版本,点击OK后打开服务器,然后再运行测试(在浏览器地址栏输入localhost:8080,如果弹出Tomcat初始页面则表示在MyEclipse中集成Tomcat环境成功)

    8,Web项目虚拟路径设置

      Web项目默认的虚拟路径就是项目名+ .jsp文件
      修改项目的虚拟路径方式:右击项目,在Properties—>MyEclipse—>Web—>右侧WebContext-root就是项目的虚拟路径,修改为你想修改的虚拟路径名就可以了,修改完成之后,将页面推到服务器中,然后重启服务器,就可以在webapps目录下找到你重命名的虚拟路径文件夹了

    9,Tomcat服务器端口号设置

      如果出现Tomcat服务器端口号冲突的情况,就需要修改Tomcat服务器端口号,修改方法:在Tomcat的安装目录下找到conf—>server.xml,打开搜索,搜索8080端口内容,将其修改为其他端口就可以了

    10,Jsp基础语法

      Jsp全名为Java Server Pages,其根本是一个简化的Servlet,实现了在Java中使用Html标签,是一种动态网页脚本技术,也是JavaEE标准。其与Servlet一样,都是在服务端执行的
      常见的动态网站开发技术对比:Jsp,Java平台,跨平台性好,安全性高,适合大型、分布式、企业级开发(hadoop);Asp.net .net平台,简单易学,安全性及跨平台性差;Php:简单高效,成本低,开发周期短,适合中小型企业的Web应用开发(Php黄金组合:LAMP)
      Jsp页面元素构成: 静态内容、指令、表达式、小脚本、声明、注释
      指令:page指令,通常写在Jsp页面的顶端,同一个页面可以有多个page指令,例如:

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
    // language 默认为Java import 无默认内容 contentType 默认text/html ISO-8859-1
    • 1
    • 2

    include指令,将一个外部文件嵌入到当前Jsp文件中,同时解析这个页面中的Jsp语句;taglib指令,使用标签库定义新的自定义标签,在Jsp页面中启用定制行文
      注释:Jsp中有三种注释格式,Html注释,Jsp注释和Jsp脚本注释;Html注释如下:

    <!-- Html注释-->    // 客户端可见
    • 1

    Jsp注释如下:

    <%-- JSP注释--%>     // 客户端不可见
    • 1

    Jsp脚本注释如下:

    <%
        // 单行注释
        /*
         * 多行注释
         */
         // 客户端不可见
    %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

      脚本:在JSP页面中执行的Java代码,例如:

    <% out.println("hehe") %>
    • 1

      声明:定义变量或方法,例如:

    <% 
        // 定义变量
        int x = 10 
        // 定义方法
        public int add(int a , int b){
           return a + b;
       }
    %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

      表达式:调用在声明中定义的变量或方法

    // 调用变量
    <%= x %>
    // 调用方法
    <h1> a + b = <%=add(3 , 4) %> </h1>
    • 1
    • 2
    • 3
    • 4

    11,Jsp页面生命周期

    这里写图片描述

      jspService()方法被调用来处理客户端的请求,对每一个请求,Jsp引擎会创建多个线程来处理该请求。如果有多个客户端同时请求该jsp文件,则jsp引擎会创建多个线程。每个客户端请求对应一个线程,以多线程方式执行可以大大降低对系统的资源需求,提高系统的并罚两以及响应时间。但也需要注意多线程并发所带来的资源同步问题。
      Tomcat—>work目录下放置的是各个项目中jsp文件转化为Servlet生成的字节码文件
      当页面还未推到服务器上时,work目录下是没有此项目的,推至服务器中并打开服务器,会在work目录生成此项目文件夹,但其内并无内容;当访问此项目jsp页面成功时,就会在work目录对应的此项目文件夹中编译生成字节码文件;当jsp页面内容发生改变的时候,jsp引擎就会重新编译此页面
      当用户第一次请求一个jsp页面时,首先被执行的方法是 构造方法。原因:Jsp部署在服务器(tomcat)之后是会被编译成对应class文件的,jsp文件不再存在。在项目部署之后,一个个的Jsp变成了一个个的Java类,java类当被执行的时候肯定先走构造方法,所以先被执行的是构造方法咯

    展开全文
  • app后台开发入门

    2017-05-02 19:39:43
    前言:由于项目需求,我负责安卓后台开发这部分内容。服务器收到安卓的请求后,返回json数据给安卓用。 但是,我什么都不懂啊!我不知道安卓后台服务器长什么样子,我见都没见过,怎么开发?怎么照猫画虎!!! ...

    2017/5/1第二次更新

    前言:

    在我写下这篇文章之前,我头脑中的app后台开发,有且只有一个流程“客户端Cilent向服务器Server请求数据,服务器Server响应客户端请求并返回json数据”。但是,仅仅用语言描述出这个流程,对开发没有任何实质性的帮助。

    所以不夸张的说,对于app后天开发,我完完全全是零基础。小白小白还是小白。

    我是小白,这点毋庸置疑,但是只要对一些概念有一定的了解,后台开发还是有戏的。

    1: 提前做好刻苦学习的心理准备。因为后台开发的细节确实很多!


    正文:

    下面我罗列几个当初困扰我的问题,虽然有的现在看来不必要,但是难免其他人会问到。所以就留在那里,不打算删掉。

    • 问1:后台开发和服务器开发有什么区别和联系?
      答:对于新手,你可以认为他俩么有区别,是一个东西,区不区分清楚对你学习app后台开发没什么影响。
      这里写图片描述
      如果非要严谨点区分:
      这里写图片描述

    • 问2:http服务器,web服务器,应用服务器有什么区别?
      答:为什么叫http服务器呢?是因为该服务器支持http协议,所以这样命名。就像支持ftp协议的叫ftp服务器。web服务器是指同时支持http,https,ftp等多种协议的服务器。web服务器支持多种协议,自然要比单一的http服务器要强大。对于初学者,是否区分清楚web服务器http服务器的区别,对开发过程基本没有影响。
      注释:(http服务器==web服务器)
      这里写图片描述
      更多web(http)服务器与应用服务器的关系

    • 问3:web后台开发和手机app后台开发(也就是服务器开发)有什么区别?
      答:不严谨的说,web后台开发和app后台开发有区别,但区别不大。
      这里写图片描述

    • 问4:app后台怎么开发
      《App后台开发运维和架构实践》作者主页链接
      《Android 和PHP 开发最佳实践》第二版
      就我个人来说,上面两本书作用不是很大,看看就行,先别着急买。

    • 问5:app后台开发教程
      android 后台开发简单教程

    • 问6:app后台开发路线
      这里写图片描述

    • 问7:app和服务器如何通讯?
      这里写图片描述

    • 问8:api如何调调试?
      百度在线api测试平台,浏览器api测试插件。

    • 问9:app后台开发长啥样子
      答:后台开发语言有很多,这里以PHP为例,通过代码简单介绍app后台基本原理
      安卓流程


    php处理请求返回json数据

    这里写图片描述

    php返回的json数据

    {
        "products": [
            {
                "pid": "1",
                "name": "iPhone 4S",
                "price": "300.00",
                "created_at": "2012-04-29 02:04:02",
                "updated_at": "0000-00-00 00:00:00"
            },
            {
                "pid": "2",
                "name": "Macbook Pro",
                "price": "600.00",
                "created_at": "2012-04-29 02:04:51",
                "updated_at": "0000-00-00 00:00:00"
            },
            {
                "pid": "3",
                "name": "Macbook Air",
                "price": "800.00",
                "created_at": "2012-04-29 02:05:57",
                "updated_at": "0000-00-00 00:00:00"
            },
            {
                "pid": "4",
                "name": "OS X Lion",
                "price": "100.00",
                "created_at": "2012-04-29 02:07:14",
                "updated_at": "0000-00-00 00:00:00"
            }
        ],
        "success": 1
    }

    app源码

    AllProductsActivity.java
    
    public class AllProductsActivity extends ListActivity {
    
        // Progress Dialog
        private ProgressDialog pDialog;
    
        // Creating JSON Parser object
        JSONParser jParser = new JSONParser();
    
        ArrayList<HashMap<String, String>> productsList;
    
        // url to get all products list
        //向服务器上的get_all_products.php发出请求,然后才能得到json数据
        private static String url_all_products = "http://api.androidhive.info/android_connect/get_all_products.php";
    
        // JSON Node names
        private static final String TAG_SUCCESS = "success";
        private static final String TAG_PRODUCTS = "products";
        private static final String TAG_PID = "pid";
        private static final String TAG_NAME = "name";
    
        // products JSONArray
        JSONArray products = null;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.all_products);
    
            // Hashmap for ListView
            productsList = new ArrayList<HashMap<String, String>>();
    
            // Loading products in Background Thread
            new LoadAllProducts().execute();
    
            // Get listview
            ListView lv = getListView();
    
            // on seleting single product
            // launching Edit Product Screen
            lv.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // getting values from selected ListItem
                    String pid = ((TextView) view.findViewById(R.id.pid)).getText()
                            .toString();
    
                    // Starting new intent
                    Intent in = new Intent(getApplicationContext(),
                            EditProductActivity.class);
                    // sending pid to next activity
                    in.putExtra(TAG_PID, pid);
    
                    // starting new activity and expecting some response back
                    startActivityForResult(in, 100);
                }
            });
    
        }
    
        // Response from Edit Product Activity
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            // if result code 100
            if (resultCode == 100) {
                // if result code 100 is received
                // means user edited/deleted product
                // reload this screen again
                Intent intent = getIntent();
                finish();
                startActivity(intent);
            }
    
        }
    
        /**
         * Background Async Task to Load all product by making HTTP Request
         * */
        class LoadAllProducts extends AsyncTask<String, String, String> {
    
            /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(AllProductsActivity.this);
                pDialog.setMessage("Loading products. Please wait...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }
    
            /**
             * getting All products from url
             * */
            protected String doInBackground(String... args) {
                // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                // getting JSON string from URL
                JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
    
                // Check your log cat for JSON reponse
                Log.d("All Products: ", json.toString());
    
                try {
                    // Checking for SUCCESS TAG
                    int success = json.getInt(TAG_SUCCESS);
    
                    if (success == 1) {
                        // products found
                        // Getting Array of Products
                        products = json.getJSONArray(TAG_PRODUCTS);
    
                        // looping through All Products
                        for (int i = 0; i < products.length(); i++) {
                            JSONObject c = products.getJSONObject(i);
    
                            // Storing each json item in variable
                            String id = c.getString(TAG_PID);
                            String name = c.getString(TAG_NAME);
    
                            // creating new HashMap
                            HashMap<String, String> map = new HashMap<String, String>();
    
                            // adding each child node to HashMap key => value
                            map.put(TAG_PID, id);
                            map.put(TAG_NAME, name);
    
                            // adding HashList to ArrayList
                            productsList.add(map);
                        }
                    } else {
                        // no products found
                        // Launch Add New product Activity
                        Intent i = new Intent(getApplicationContext(),
                                NewProductActivity.class);
                        // Closing all previous activities
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    
                return null;
            }
    
            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog after getting all products
                pDialog.dismiss();
                // updating UI from Background Thread
                runOnUiThread(new Runnable() {
                    public void run() {
                        /**
                         * Updating parsed JSON data into ListView
                         * */
                        ListAdapter adapter = new SimpleAdapter(
                                AllProductsActivity.this, productsList,
                                R.layout.list_item, new String[] { TAG_PID,
                                        TAG_NAME},
                                new int[] { R.id.pid, R.id.name });
                        // updating listview
                        setListAdapter(adapter);
                    }
                });
    
            }
    
        }
    }

    app效果展示
    这里写图片描述

    展开全文
  • 后台开发必备技能

    2018-05-08 14:15:30
    转自 https://segmentfault.com/a/1190000014770363?utm_source=index-hottest在我们开始之前,虽然我们没有在上面的路线图中列出 HTML/CSS 的知识,但建议您至少了解一些基本的 HTML/CSS 并了解如何编写基本的 ...
  • 声明:本渣渣部分代码参考自TendCode其实有很多代码是不需要自己一行行码出来,生产力是第一位。只有研究型人才需要生产代码,作为一名渣渣拿来用是最高效的做法。程序员都有一个开源的精神,码出来的代码本身是希望...
  • 后台开发包括的知识点很多,包括语言基础,算法,linux编程基础,linux内核,网络,数据库,分布式等等。面面俱到很难,一个领域钻研的很深也很难。我认识的大神里有把C++语言吃的非常透的,也有实验室就是搞分布式...
  • 原文链接地址:后台开发 vs App应用开发? 最近很多老铁从app转做后台了,说app招聘的太少了,基本混合开发一出,app原生开发需求越来越少。本身一个公司安卓可能2人以上,ios可能始终就是一个人。 App...
  • 微信公众号后台开发总结一、项目简介当前需要做一个公众号后台,前期需要实现的功能有:(1) 在用户关注公众号时便获取用户的信息同时还要将用户信息存入数据库。(2) 在用户给公众号发送消息时,后台能够对消息...
  • 后台开发的语言比较

    2018-05-10 18:18:26
    最近因为个人兴趣和项目团队安排,我开始在学习后台开发,我们项目后台使用python写的,运用tonardo框架。因为对后台开发不是很理解,对各种语言也不懂,我上网查了各互联网公司的后台语言,并顺便比较比较。目前...
  • 微信小程序+Java后台开发 全部代码链接 链接:https://pan.baidu.com/s/1GiIXKgu76Urr7QfZ-U7W9A 提取码:mpio 通过这个博客,你可以快速的搭建一个微信小程序前端和后台相连的一个功能,在这里我会详细的解说每一...
  • C++后台开发学习路线

    2019-02-13 11:42:35
    后台开发包括的知识点很多,包括语言基础,算法,linux编程基础,linux内核,网络,数据库,分布式等等。面面俱到很难,一个领域钻研的很深也很难。我认识的大神里有把C++语言吃的非常透的,也有实验室就是搞分布式...
  • 本文将讲述(Linux)服务器后台开发岗位的要求,包含了大部分会遇到的面试题目。掌握文中提到的技术,也算少许入门水平了,此文既是面经,也是后台开发的入门手册。无论社招还是校招,都可作为一个参考。 本文内容...
  • Golang后台开发初体验

    2014-11-19 22:35:03
    犹记得去年靠着微信后台的强势宣传,coroutine在我司的C/C++后台界着实火了一把,当时我也顺势对中心的后台网络框架做了coroutine化改造,详见《当C/C++后台开发遇上Coroutine》,当时在文末我也提到了该实现的一些...
  • 当时投递岗位的时候没有看清要求,写着后台开发岗,招C/C++/Java,果然越靠前越重要。。本来想投的是Java岗,奈何鹅肠后台C++偏多。结果面试的时候面的全是C++和Linux,Java一点没问。全程大概25分钟,总结如下。 ...
1 2 3 4 5 ... 20
收藏数 599,031
精华内容 239,612
热门标签
关键字:

后台开发