Web框架系列:框架基础

2017-03-22

  很多做Web开发的同学都会有一个梦想,就是将来开发出来自己的一套Web应用框架,在项目中使用。刚开始做开发时,觉得这个东西好牛啊。只需要写一点代码,就能够做出带有业务逻辑的网站,就能够挣工资了。其实,写一个Web应用框架并不难,但是,写出一个能够经受工业强度测试的就不容易了。如果这个世界没有cracker,没有恶意攻击,我们现在做的工作可以减少一半。当然,世界就是这个样子的,或许,当下就是最好的样子了。有问题,解决问题即可。
  Web框架,是我们一般的简称,全称为“Web应用框架”(Web Application Framework),一般负责如下几个方面的工作:MVC分层, URL过滤与分发, View渲染,HTTP参数预处理,安全控制,还有部分附加功能,如页面缓存,数据库连接管理,ORM映射等等。web框架可以用任何语言写成,几乎你常见的语言都有对应的web框架,可以用来写web程序,不要以为只有PHP,Java,C#可以用来做网站而已。
  框架最重要的特征是MVC分层。MVC这个概念并不是Web开发中哦你才有的,也不是从这个方向上提起来的技术。在上个世纪70年代的Smalltalk-76就引入了这个概念。
  模板层渲染,就是View层技术,也被称为模板引擎,也是其中很重要的组成部分。HTTP请求只是一段纯文本,请求的结果也是一段纯文本,文本内容,可以是HTML,可以是json,可以是任意一段字符串。这样一段动态的字符串是通过程序生成,每次访问一个URL资源,对应的程序就运行一次。从最早C语言(而非Perl)写的CGI程序以来,这就是基础的运行原理。程序把HTML标签,通过几十到几百行的类似printf("<html><body>...");这样的语句输出,并把最终的输出文本发送到client(浏览器)。Java Web编程中,一个JSP就对应一个动态页面。其实一个JSP被Tomcat这样的容器编译为一个Servlet程序,可以看到这个Servlet的源代码的,里面基本上都是System.out.println("<div> ... </div>");等类似的语句。模板引擎也是Web框架中可能技术难度最难的一部分,因为我们这个东西可以很复杂,也可以很简单。虽然说在Java里称翻译JSP的工具为JSP编译器,但是,参见[5],其实也只是工作在正则语言层次而已,并非是于其上的上下文无关语言编译器,其他语言多类似。这也是模板层表述能力弱的一个原因。写一个这样的工具也并不是特别有难度,可以参考已有的工具自己模仿一个。
  HTTP请求参数处理。这部分是杂活儿。HTTP请求是纯文本,而我们希望在程序里可以获取到结构化的、格式良好的数据。这个工作就是此模块来做了。如数组参数整理,多文件上传处理,cookie获取等。这需要对HTTP(S)协议有深入的了解。
  URL映射。为了编程方便和安全方面的原因,我们访问的资源,如urlA,并不是服务端脚本程序的名字。如RESTful风格的编程,服务端文件夹层级也不可能有那么多。而且,通过映射我们可以选择性的对外暴露资源。
  安全控制。session和资源访问权限的管理,对于Web程序来说很重要。大多数情况下,上层写业务的程序员也无需关注这部分是怎么实现,简单了解即可。在Tomcat中,session的管理和用户认证,大部分工作是Tomcat做的。但是,在PHP中,没有对应的App Container这样的概念,这样的工作就完全由框架来做。如果一旦出错,比如A的session被B用户看到,或者可访问到其他用户的资源,这就是致命的。
  ORM和数据库管理、缓存等,都是附加的,可有可无,不是重点。

  我打算在后续的时间内,逐步的实现一个简单框架,来简单的讲解Web相关的技术。希望有时间吧。

 

  1. http://baike.baidu.com/view/7124722.htm
  2. http://www.cnblogs.com/hazir/p/what_is_web_framework.html
  3. https://jeffknupp.com/blog/2014/03/03/what-is-a-web-framework/
  4. https://en.wikipedia.org/wiki/Web_framework
  5. https://zh.wikipedia.org/wiki/Web%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6
  6. https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
  7. https://en.wikipedia.org/wiki/Web_template_system
  8. http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/Parser.java
如果有任何意见,欢迎留言讨论。


[ 主页 ]
COMMENTS
POST A COMMENT

(optional)



(optional)