Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架

中文名

Web应用框架

外文名

Web application framework

支持

网络应用程序及网络服务的开发

定义

开发框架

应用简介

Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。

系统架构

MVC

主条目:MVC

CMS

主条目:内容管理系统

主要分类

web框架可以分为基于请求的(request-based)和基于组件的(component-based)两大阵营。前者的代表有Struts和Spring MVC等,后者的成员则有JSF、Tapestry等等。[1]

系统对比

基于请求的框架较早出现,它用以描述一个web应用程序结构的概念和传统的静态Internet站点一样,是将其机制扩展到动态内容的延伸。对一个提供HTML和图片等静态内容的网站,网络另一端的浏览器发出以URI形式指定的资源的请求,Web服务器解读请求,检查该资源是否存在于本地,如果是则返回该静态内容,否则通知浏览器没有找到。Web应用升级到动态内容领域后,这个模型只需要做一点修改。那就是web服务器收到一个URL请求(相较于静态情况下的资源,动态情况下更接近于对一种服务的请求和调用)后,判断该请求的类型,如果是静态资源,则照上面所述处理;如果是动态内容,则通过某种机制(CGI、调用常驻内存的模块、递送给另一个进程如Java容器)运行该动态内容对应的程序,最后由程序给出响应,返回浏览器。在这样一个直接与web底层机制交流的模型中,服务器端程序要收集客户端籍get或post方式提交的数据,转换,校验,然后以这些数据作为输入运行业务逻辑后生成动态的内容(包括HTML、JavaScript、CSS、图片等)。

基于组件的框架采取了另一种思路,它把长久以来软件开发应用的组件思想引入到web开发。服务器返回的原本文档形式的网页被视为由一个个可独立工作、重复使用的组件构成。每个组件都能接受用户的输入,负责自己的显示。上面提到的服务器端程序所做的数据收集、转换、校验的工作都被下放给各个组件。现代web框架基本上都采用了模型、视图、控制器相分离的MVC架构,基于请求和基于组件两种类型大都会有一个控制器将用户的请求分派给负责业务逻辑的模型,运算的结果再以某个视图表现出来,所以两大分类框架的区别主要在视图部分,基于请求的框架仍然把视图也就是网页看作是一个文档整体,程序员要用HTML、Javascript和CSS这些底层的代码来写“文档”,而基于组件的框架则把视图看作由积木一样的构件拼成,积木的显示不用程序员操心(当然它们也是由另一些程序员开发出来的),只要设置好它绑定的数据和调整它的属性,把他们大大从编写HTML、Javascript和CSS这些界面的工作中解放出来。

如何选择

基于请求的和基于组件的两种框架各有优劣。虽然一眼看上去后者有很大的吸引力,普通的web开发人员只要使用专门的公司或开源组织提供的组件就可以轻松开发出好用漂亮的界面,但是有几种因素综合起来不利于这种理想中的方案。要编写一个没有潜在问题的、跨浏览器的、显示美观并且有足够灵活性可以调整的服务器端组件是需要高水平的技能、丰富的经验和较多时间的,即使付出这些成本,也不能完全避免使用者失望的情况。

综合来看,基于请求的框架要程序员自己动手的地方比较多,但也因此可以更精细地控制HTML、CSS和Javascript这些最终决定应用程序界面的代码,特别是如果要在界面上有创新,尝试新的视觉效果和用户操作,必然选择基于请求的框架。基于组件的框架可以提高开发界面的效率,前提是选用的组件质量优秀。

主要特点

网页模版系统

网页高速缓存

安全性

URL映射

AJAX

自动configuration

Web服务

编程语言

PHP

Zend framework

CakePHP

Yii

ThinkPHP

symfony

kohanaphp

Seagull

Drupal

CodeIgniter

javascript

jQuery

MooTools

prototype

dojo

zk

Backbone.js

SproutCore

Sammy.js

Spine.js

Cappuccino

Knockout.js

Javascript MVC

GWT(Google Web Toolkit)

Google Closure

Ember.js

Angular.js

Batman.js

ExtJS

Python

django

pinax

Grok

Pylons

TurboGears

web2py

Zope

Quixote

snakelets

snakelets

PylonsHQ

Tornado

Ruby

Ruby On Rails

Sinatra

.net

mvc

三层

nhibernate

JAVA

Spring

Hibernate

Grails

Tapestry

ZK

SpringMVC

Struts2

Struts

Mybatis

Go

Gin

Beego

Buffalo

Iris

Echo

Goji