搞懂了这几点,你就学会了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程序员应该不在话下了, 接下来需要学习的就是像高并发,缓存,搜索,分布式等高级的内容了。

原文地址:https://www.cnblogs.com/qianyeliange/p/8974612.html

时间: 2024-10-26 01:49:29

搞懂了这几点,你就学会了Web编程的相关文章

彻底搞懂oracle的标量子查询

oracle标量子查询和自定义函数有时用起来比较方便,而且开发人员也经常使用,数据量小还无所谓,数据量大,往往存在性能问题. 以下测试帮助大家彻底搞懂标量子查询. SQL> create table a (id int,name varchar2(10)); Table created. SQL> create table b (id int,name varchar2(10)); Table created. SQL> insert into a values (1,'a1'); 1

猎豹MFC--使用向导快速进行MFC程序设计--不需要全部搞懂,只把重要的几个搞懂即可

新建MFC项目  单文档 文档视图: 如上,向导会为我们自动生成4个类. 每个类中有很多代码,不需压迫我们全部搞懂,我们只把重要的几个搞懂即可. 以前是在窗口中画显示要在视图中画: 所有的显示都是在视图类中: 在视图类属性中添加  paint消息: 记住要在视图对象上添加消息而不是像以前那样在窗口对象上添加. 在视图类上再添加  鼠标单击消息: 来自为知笔记(Wiz)

分分搞懂c#中的委托

分分搞懂c#中的委托: 不说废话,不来虚的概念,不管代码是否有意义,看我的优化之路,你会理解委托了: 源代码1 public class test { //我们不管代码是否有意义,我们直接看代码重构和一步步优化的过程 int flage = 1; public void show(int a) { if (flage == 1) { do1(a); } else if (flage == 2) { do2(a); } else if (flage == 3) { do3(a); } else i

【白话篇】10分钟搞懂字符编码

如上图所示为常见的,让人看了头晕的 几个种编码. 看懂下面几条规则,你就明白他们的关系了. [1]有些人说,GBK严格来说是字符集,而utf-8则是编码,这种区分已经相当模糊了,他们都是"字节到字符的映射关系",所以下面都用编码来说吧. [2] ISO-8859-1 这种编码是单字节编码,衍生于ASCII,表示范围0-255,只要按照ASCII的规则设计的编码,不管是几字节的,都可以和ISO-8859-1兼容. [3]比如说,GBK编码(双字节)能转化成ISO-8859-1编码,是因为

彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)[转]

最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些知识理解似乎也有些偏差,网上百度, google的内容,也有不少以讹传讹,根本就是错误的(例如说 unicode编码是两个字节),各种软件让你选择编码的时候,常常是很长的一个选单,让用户不知道该如何选.基于这样的问题,我就写下我的理解吧,一方面帮助一些需要帮助的人纠正认识,一方面作为自己以后备查的资料. 1. ASCII(American Standard Code for Informati

阶梯博弈(没怎么搞懂)

首先是对阶梯博弈的阐述...博弈在一列阶梯上进行...每个阶梯上放着自然数个点..两个人进行阶梯博弈...每一步则是将一个集体上的若干个点( >=1 )移到前面去..最后没有点可以移动的人输.. 如这就是一个阶梯博弈的初始状态 2 1 3 2 4 ... 只能把后面的点往前面放...如何来分析这个问题呢...其实阶梯博弈经过转换可以变为Nim..把所有奇数阶梯看成N堆石子..做nim..把石子从奇数堆移动到偶数堆可以理解为拿走石子..就相当于几个奇数堆的石子在做Nim..( 如所给样例..2^3

零基础搞懂智能机之手机参数怎么看

欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=53 手机参数, 基本能反映一款机器到底好还是不好.本篇带领大家阅读Samsung Galaxy S5的参数, 让大家购机心里有底. 这里要提醒: 不是硬件参数好, 系统体验就一定好的.当然好的软件, 要用好的硬件支撑. 笔者觉得, 参数差不多就好, 外形, UI, 发热, 安全性比较重要. 曝光日期 2014年 手机类型 4G手机,3G手机,智能手机,拍照手机,平板手机 运营商定制 中

五个小例子教你搞懂 JavaScript 作用域问题

众所周知,JavaScript 的作用域和其他传统语言(类C)差别比较大,掌握并熟练运用JavaScript 的作用域知识,不仅有利于我们阅读理解别人的代码,也有助于我们编写自己的可靠代码. 下面笔者将使用五个小例子来给大家分析下 JavaScript 的作用域要注意的问题. 感谢 例子的来源 (这5个例子我做错了2个 [嘿嘿,尽情鄙视吧],笔者就是要 死磕自己,奉献大家!) 先给出五个例子: 每个例子旁边都会给出答案的链接,如果你全部都正确了,你可以忽略这篇短文,并深深的鄙视下笔者. 例一:

完全搞懂傅里叶变换和小波(6)——傅立叶级数展开之函数项级数的性质

完全搞懂傅里叶变换和小波(6)——傅立叶级数展开之函数项级数的性质 上一小节中我们介绍了函数项级数的概念,这一节我们来讨论函数项级数的性质.傅立叶 级数是一种函数项(三角函数)级数,本质上来说,一幅图像(或者一组信号)就是一个函数,我们研究图像的傅立叶变换,就是要探讨如何将图像函数用三角函数 进行展开.所以如果要彻底搞清楚傅里叶变换,那么讨论函数项级数的性质是非常有必要的.在此基础上,我们将引入傅立叶级数的概念. 如果你对本文涉及的基础问题不甚了解,那么建议你阅读本文前面的部分.希望读者能日积月