企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 理解B/S架构 B/S 是从 90 年代的客户端 / 服务器端发展而来, 共同点都是由一个(或一组)服务器来服务多个客户端。 差别在于:首先,C/S 结构的客户端可能是由不同语言编写的,例如 VB,Delphi, PowerBuilder 等, B/S 结构中浏览器成为了一个通用的客户端, 程序以 Web 的方式呈现,不需要安装,服务器端的升级就意味着所有客户端的升级,这和 C/S 相比是个翻天覆地的变化。 其次 B/S 的访问协议也标准化为 HTTP(s) ,而不是原来各种各样的私有协议。 最后 B/S 结构中的服务器面向全球用户访问,而不像 C/S 那样仅仅是局域网, 所以压力更大, 挑战更大。 ## Web 页面是怎么组成的 简单来说就是 HTML + CSS + Javascript , 我们看到的 Web 界面就是由这三者组成。 HTML 负责结构, CSS 负责展现, 而 Javascript 负责行为。 我们说的前端开发也主要是做这一块, 对于前端工程师,需要能理解 DOM 模型,以及如何通过 javascript(例如 JQuery 等框架) 来操作 DOM 模型。 ## 浏览器与服务器如何打交道的 通过HTTP协议, HTTP 说穿了就是浏览器和服务器聊天是的一种约定, 这个约定确保双方互相理解。 (1) GET 和 POST 。 GET 从服务器端获取数据, POST 向服务器端发送数据 (由此引出图片上传问题) (2) HTTP 是个没有状态的协议,需要通过额外的机制来维持状态(例如登录状态), 常用的方法就是 cookie。 (3) 理解 HTTP 状态码 (4) 理解 同步 vs 异步 (由此引出 AJAX,以及 JQuery 等框架) ## URL与代码的映射 理解 url 和 代码之间的关联, 例如 www.xxx.com?action=login 这样的 url 是怎么和后端的业务代码关联起来的? 这样的规则是在哪里定义的? 用代码、注解还是配置文件? 后端的业务代码该如何组织? 相信现在不会有人把业务逻辑都写到 Servlet 当中了, 所以需要很多 MVC 框架像 Struts , SpringMVC 来组织代码,让系统清晰易懂。 ## 数据的验证、转换和绑定 如何保证浏览器发过来的数据是符合要求的?比如不能为空,不能超过8个字符,两个密码必须相等,出错了得给出错误提示 浏览器发过来的数据都是形如 username=liuxin&password=123456 这样简单的文本, 但是后台程序却有着丰富的数据类型,什么 String, Date ,Integer 等等。 所以需要把文本变成指定语言的类型。 类型转换以后, 后端的业务代码怎么才能有效的使用呢? 最简单的就是弄一个 key : value 这个样的 Map 出来, 业务代码直接用 map.get(key) 即可。 高级一点的可以把页面发来的数据直接绑定到对象的属性上, 并且支持数组,嵌套等复杂的结构。 例如 user.name=liuxin&user.password=123456 可以绑定到一个叫 User 的对象, 其中有两个属性 userName 和 password。 ## Web 安全 如何防止黑客利用SQL注入、跨站脚本攻击,跨站请求伪早等手段来攻击系统 ## 数据库访问 对于简单的应用, 直接写点 JDBC 就够用了,只需要掌握 Connection, Statement , Resultset 这三个基础。 复杂点的需要用 O/R Mapping 框架来搞定,例如 Hibernate, MyBatis ,还有 RoR 的 ActiveRecord。 这其中比较棘手的就是表之间的关联, 就是所谓的一对多, 一对一, 多对多这样的关系, 如何在面向对象的世界里描述。 ## 用什么技术来生成Web 页面 能不能直接用 Servlet 的 PrintWriter 直接输出 HTML ? 当然可以,只是以后就没有人看懂了。 现在用来创建 Web 页面的技术多如牛毛:例如 JSP, Velocity, Freemaker, Groovy 等等, 他们都有一个共同点: 模板技术。 说白了就是有一个 HTML 的模板, 里边可以嵌入代码, 这个模板在运行时(例如在 Tomcat 当中)就可以根据输入的不同而生成不同内容的 Web 界面了。 无论哪种模板,都需要面对一个重要问题:如何展示从业务逻辑层发送来的数据? 这一步骤其实和第 5 步中的数据绑定有密切关系。因为这一步需要确定诸如 user.name , user.password 这样的字段名称。 ## 如何把对象变成XML或者JSON字符串 由于 AJAX 以及手机端的存在,对于一个 URL 的请求, 他们要求的返回值通常不是 HTML 页面, 而是 XML 或者 JSON 数据, 此时需要有框架把对象转化成相应的字符串。 接下来需要学习的就是像高并发,缓存,搜索,分布式等高级的内容了。