做了那么多年Web编程,仔细想想, 其实本质上就那点事儿, 你抓住了几个重点问题, 学起来一点都不难。

1.  理解浏览器/服务器结构 (B/S)

B/S 是从 90年代的客户端/服务器端发展而来, 共同点都是由一个(或一组)服务器来服务多个客户端。

差别在于:首先,C/S结构的客户端可能是由不同语言编写的,例如VB,Delphi, PowerBuilder等, B/S结构中浏览器成为了一个通用的客户端, 程序以Web的方式呈现,不需要安装,服务器端的升级就意味着所有客户端的升级,这和C/S相比是个翻天覆地的变化。

其次B/S的访问协议也标准化为HTTP(s)  ,而不是原来各种各样的私有协议。

最后B/S结构中的服务器面向全球用户访问,而不像C/S那样仅仅是局域网, 所以压力更大, 挑战更大。

2. Web页面是怎么组成的?

简单来说就是HTML + CSS + Javascript ,  我们看到的Web界面就是由这三者组成。

HTML负责结构, CSS负责展现, 而Javascript负责行为。

我们说的前端开发也主要是做这一块, 对于前端工程师,需要能理解DOM 模型,以及如何通过javascript(例如JQuery等框架)来操作DOM模型。

3. 浏览器和服务器是怎么打交道的?

当然是HTTP !  HTTP说穿了就是浏览器和服务器聊天时的一种约定, 这个约定确保双方互相理解。

完整的HTTP是非常复杂的,《HTTP权威指南》一书厚达700多页。

其实我们最常用, 也是最重要的也就那么几点:

(1) GET 和 POST 。 GET从服务器端获取数据,  POST 向服务器端发送数据(由此引出图片上传问题)

(2) HTTP是个没有状态的协议,需要通过额外的机制来维持状态(例如登录状态), 常用的方法就是cookie。

(3) 理解HTTP 状态码

(4) 理解 同步 vs 异步(由此引出AJAX,以及JQuery等框架)

4. URL 和 代码的映射

理解url 和 代码之间的关联, 例如 www.xxx.com?action=login  这样的url 是怎么和后端的业务代码关联起来的?

这样的规则是在哪里定义的? 用代码、注解还是配置文件?

后端的业务代码该如何组织? 相信现在不会有人把业务逻辑都写到Servlet当中了,  所以需要很多MVC 框架像Struts , SpringMVC 来组织代码,让系统清晰易懂。

5. 数据的验证、转换和绑定

如何保证浏览器发过来的数据是符合要求的?

例如不能为空、不超过8个字符、两个密码必须相等....  , 出错了得给出错误提示。

浏览器发过来的数据都是形如username=liuxin&password=123456这样简单的文本, 但是后台程序却有着丰富的数据类型,什么String, Date ,Integer等等。 所以需要把文本变成指定语言的类型。

类型转换以后, 后端的业务代码怎么才能有效的使用呢?

最简单的就是弄一个key : value 这个样的Map 出来, 业务代码直接用map.get(key) 即可。

高级一点的可以把页面发来的数据直接绑定到对象的属性上, 并且支持数组,嵌套等复杂的结构。

例如user.name=liuxin&user.password=123456  可以绑定到一个叫User的对象, 其中有两个属性userName和password。

6. Web安全

如何防止黑客利用SQL 注入,跨站脚本攻击, 跨站请求伪造等手段来攻击系统?

7. 数据库访问

这一块是比较麻烦的, 毕竟面向对象(OO)世界和关系(Relational)数据库之间存在着天然的鸿沟。

对于简单的应用, 直接写点JDBC就够用了,只需要掌握Connection, Statement , Resultset这三个基础。

复杂点的需要用O/R Mapping 框架来搞定,例如 Hibernate, MyBatis  ,还有RoR的ActiveRecord。

这其中比较棘手的就是表之间的关联, 就是所谓的一对多, 一对一, 多对多这样的关系, 如何在面向对象的世界里描述。

扩展开去,还需要处理连接池, 事务,锁 等各种烦人问题。

8. 用什么技术来生成Web页面?

这里说的Web页面就是第2点中的页面,包括HTML, CSS, Javascript。

能不能直接用Servlet的PrintWriter 直接输出HTML ? 当然可以,只是以后就没有人看懂了。

现在用来创建Web页面的技术多如牛毛:例如 JSP, Velocity, Freemaker, Groovy 等等, 他们都有一个共同点: 模板技术

说白了就是有一个HTML的模板, 里边可以嵌入代码, 这个模板在运行时(例如在Tomcat当中)就可以根据输入的不同而生成不同内容的Web界面了。

无论哪种模板,都需要面对一个重要问题:如何展示从业务逻辑层发送来的数据?  这一步骤其实和第5步中的数据绑定有密切关系。因为这一步需要确定诸如user.name  , user.password这样的字段名称。

9. 如何把对象变成XML或者JSON字符串?

由于AJAX以及手机端的存在,对于一个URL的请求, 他们要求的返回值通常不是HTML页面, 而是XML或者JSON数据, 此时需要有框架把对象转化成相应的字符串。

搞定了Web这些基础的东西,在公司里做一个Web程序员应该不在话下了, 接下来需要学习的就是像高并发,缓存,搜索,分布式等高级的内容了。

搞懂了这几点,你就学会了Web编程相关推荐

  1. zhs16gbk对应mysql_[Oracle] 彻底搞懂Oracle字符集

    基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.常见的字符集有ASCII,ZHS16GB231 ...

  2. 面试必备|带你彻底搞懂Python生成器

    2019年人工智能系统学: https://edu.csdn.net/topic/ai30?utm_source=ai100_bw 作者 | Rocky0429 转载自 Python空间(ID:Dev ...

  3. 20分钟教你搞懂Git!

    Git 是最流行的版本管理工具,也是程序员必备的技能之一.本文就来教你 20 分钟搞懂 Git! 以下为译文: 尽管每天你都会用到Git,但也有可能搞不懂它的工作原理.为什么Git可以管理版本?基本命 ...

  4. 搞懂机器学习的常用评价指标!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈安东,湖南大学,Datawhale成员 我与评价指标的首次交锋是 ...

  5. 一文搞懂结构体的定义及实际使用

    大家好,我是无际,无实战不理论. 今天给大家讲一下结构体. 大家可能很好奇,为什么这种文章教程泛滥了,我还要拿出来讲. 相信无际的铁粉都知道,我分享的干货和经验出发点是实际产品应用. 脱离产品你所学的 ...

  6. 想要彻底搞懂“异地多活”,看完这篇就够了

    在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理. 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必 ...

  7. 这一次,你能彻底搞懂 Flink!

    近年来,AI 场景发展得如火如荼,同时其计算规模也越来越大.这也让专注于数据处理的 Flink 有了较大的发展空间.Flink作为在大数据生态里实时处理的一个新框架,在一定程度上也有一定的难度. Fl ...

  8. C语言重点——指针篇(一篇让你完全搞懂指针)

    C语言重点--指针篇(一篇让你完全搞懂指针) 一. 前言 C语言是比较偏底层的语言,为什么他比较偏底层,就是因为他的很多操作都是直接针对内存操作的. 这篇我们就来讲解C语言的一大特点,也是难点,指针和 ...

  9. C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别

    C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别 C++构造函数用=与()不完全一样,注意使用=时c++中临时变量不能作为非const的引用参数,不论是=运算符重载还是构造函数,否则可能出现以下错 ...

最新文章

  1. 告别无止境的增删改查:Java代码生成器
  2. 哪个版本python适用于windows-何种版本的Python适合您
  3. Spring Boot 启动,1 秒搞定!
  4. 两个有序数组的中位数 python_Python寻找两个有序数组的中位数实例详解
  5. 从零学前端第十四讲:AngularJs进阶-作用域和控制器
  6. 聊聊storm nimbus的LeaderElector
  7. C# -- HttpWebRequest 和 HttpWebResponse 的使用
  8. 显卡测试软件毛毛虫,超龙超龙,与众不同,顶流配备,散热一流,3070Ti超龙旗舰版评测...
  9. [LeetCode] Number of 1 Bits 位操作
  10. paip. erlang语法C++语法对比attilax总结
  11. 硬盘测试软件测试有问题,用crystaldiskinfo工具检测出来硬盘不良怎么办
  12. XGBoost算法案例实战—— 金融反欺诈模型
  13. 初级官方卡刷包精简 添加万能ROOT
  14. 管家婆 mysql_管家婆软件恢复账套数据图解-通过数据库源文件
  15. java毕业答辩会问什么,java毕业设计答辩(详细流程介绍)
  16. linux cpu使用率太高,小技巧:教您一个窍门!解决Linux下CPU使用率过高的问题
  17. 编译MTK系统源码时checking Env失败的解决方法
  18. 初识BashBunny
  19. Window xp与Win7对比
  20. mybatis-plus自定义sql报错 ew.customSqlSegment

热门文章

  1. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
  2. JavaScript中String和JSON互换
  3. 【Hibernate框架开发之五】Hibernate对象的三种状态Session常用方法
  4. Windows ThinPC 最终版已 RTM
  5. LINUX ulimit命令
  6. ACE网络编程模式比较
  7. 使用神经网络拟合曲线(MATLAB/Python)
  8. codeforces654题解_[codeforces 1374A] Magical Sticks 棍子拼接
  9. vb退出窗体代码_VB中基本概念(3)
  10. python Series 添加行_傻傻分不清系列 | Python中各种字符串处理方法