- 我是一个线程(修订版)
- 我是一个 Java class
- Javascript:一个屌丝的逆袭
- Java : 一个帝国的诞生
- JSP 一个装配工的没落
- TCP/IP 之 大明王朝邮差
- TCP/IP 之大明内阁
- TCP/IP 之蓟辽督师
- CPU 阿甘
- CPU 阿甘之烦恼
- CPU 阿甘:函数调用的秘密
- 我是一个网卡
- 我是一个路由器
- 我是一个进程
- 我是一块硬盘(上)
- 我是一块硬盘(下)
- 我是一个键盘
- 张大胖的 socket
- 张大胖学递归
- 学习面向对象的令狐冲
- 张大胖学数据库
- 数据库村的旺财和小强
- 小李的数据库之旅(上)
- 小李的数据库之旅(下)
- 漫画:什么是机器学习?
- 那些烦人的同步和互斥问题
- IE 为什么把火狐和 Chrome 给打伤了?
- 对浏览器村的第二次采访
- 节约标兵 IE 的自述
- EMail 诞生记
- Email 诞生记(下)
- Http 历险记(上)
- Http 历险记(下)-- Struts 的秘密
- 动物王国的面向对象
- 冯·诺伊曼计算机的诞生
- Http Server : 一个差生的逆袭
- 张大胖的加法器
- 从 1 加到 100:一道简单的数学题挑战下你的大脑
- 编程语言
- Javascript:一个屌丝的逆袭
- 计算机语言之战
- 我和编程语言的爱恨情仇(上)
- 我和编程语言的爱恨情仇(下)
- Android 为什么选择了 Java
- iOS 为什么选择了 Object-C?
- Basic : 一个老兵的自述
- Node.js : 我只需要一个店小二
- 命令式编程 vs 声明式编程
- 编译还是解释?
- 程序人生
- “架构师"小赵
- 师兄说
- 师姐说
- 小王的架构师之路
- 小李的版本管理系统
- 小超穿越记
- 小李的 Build 之路(上)
- 小李的 Build 之路(下)
- 张大胖改 Bug
- 我的编程之路--大学趣事
- 码农小王的一天
- 小李在外企
- 张大胖的需求估算
- 从厨师到码农
- 聊一聊那些神一样的程序员们(上)
- 聊一聊那些神一样的程序员们(中)
- 聊一聊那些神一样的程序员们(下)
- 谁是互联网之父?
- 一个价值百万的创业教训
- 让自己与众不同 - 提升工作的价值
- 看看你的“易燃性”
- 从无聊的工作中寻找价值
- 什么样的学生适合报考计算机?
- 谈谈程序员的职业方向(上)
- 谈谈程序员的职业方向(中)
- 谈谈程序员的职业方向(下)
- 谈谈培训班的作用
- 码农需要知道的“潜规则”
- 学习编程的加速度
- 码农在工作中的必备能力
- 码农和英语
- 老司机经验
- 假如时光能够倒流, 我会这么学习 Java
- 假如我是计算机系老师
- 学会编程, 而不是学会 Java
- 从增删改查中突围
- 抽象:程序员必备的能力
- 懒就一个字
- 编程的自学方法
- 小王买房记
- 从一道面试题谈谈一线码农应该具备的基本素质
- 想写框架的看过来
- 苹果手机变砖头以后
- 如何快速的学习一门技术?
- 唯一不变的是变化: 谈谈微信应用号
- 什么是企业应用?
- 勿以浮沙筑高台
- 为什么敏捷开发难于成功?
- localhost vs 127.0.0.1
- GitHub/Stackoverflow 找工作时有什么用?
- 动词 or 名词 :这是一个问题
- 如何选择入行语言
- 有时候,沉默是金
- 零 Bug 的代码是怎么炼成的?
- 浮点数为什么不精确?
- 文章错误大全
- Open Source--不要为了开源而开源
- 一不留神,代码就腐化了
- 先做个“键盘侠”, 再来写程序
- 不加断点调试的程序员是好程序员
- 码农必备技能:烂代码的处理之道(上)
- 码农必备技能:烂代码的处理之道(下)
- 学习数据结构有用吗?
- 从现在开始,丰富你的简历
- 那些永不过时的书,你看过几本吗?
- 学好编程必备的一个品质你知道吗?
- 你最爱的 Java
- 搞懂了这几点,你就学会了 Web 编程
- Spring 的本质系列(1) -- 依赖注入
- Spring 本质系列(2)-AOP
- 三层架构和 MVC 那点事儿
- Java 帝国之拨云见日识回调
- 小张的 Duck Typing
- JDBC 的诞生
- JDBC 后传
- 一个不安分的 JDBC 驱动
- Java 帝国之 Java bean (上)
- Java 帝国之 Java bean(下)
- Java 帝国之函数式编程
- Java 帝国之函数式编程(下)
- 关于 Java 初学者需要知道的 10 件事
- JUnit 你不知道的那些事儿
- 圣诞礼物:Java EE 的历史
- Java EE 读书指南
- 给小白的 Java EE 指南
- 给小白的 Java EE 指南(2)
- 给小白的 Java EE 生存指南(3) : XML
- 给小白的 Java EE 生存指南(4) : 一只叫 Tom 的猫
- 给小白的 Java EE 指南(5) : AJAX
- 给小白的 Java EE 生存指南(6) :Java 反射
- 闲聊
- "饿了么"初体验
- 来自大脑的控诉
- 一个高中生是怎么玩自媒体的?
- 尝试 分答
- 到底应不应该上培训班?
- 自学编程中遇到问题怎么办?
- 据说 99%的初级程序员看完后都不迷茫了
- 一行代码引发的“血案”
- 对一个死锁问题的思考
- 通过外包进入名企
- 请开往十年前的今天
- 为什么自学中最好有个师傅指导一下?
- 这个网站值得你花时间投入
- 为什么你无法坚持自学编程?
搞懂了这几点,你就学会了 Web 编程
做了那么多年 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论