> For the complete documentation index, see [llms.txt](https://jun-wang.gitbook.io/learnjava/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jun-wang.gitbook.io/learnjava/ji-shu-xue-xi/jia-gou-xue-xi/web-kuang-jia.md).

# Web框架

## 1. web框架简介

web框架（Web Framework）也可以叫web应用框架（Web Application Framework），是一套进行web开发的一套软件架构，用于支持动态网站（比如淘宝，新浪等）、网络应用程序（比如office在线版，网页版微信等）以及网络服务（比如12306订票这些）的开发。

大多数的web框架提供了一套开发和部署网站的方式，并提供了很多方法，很多业务逻辑不需要自己去写，使用框架已有的功能就可以，常用的web框架比如Java的SSM（Spring SpringMVC MyBatis），SSH（Spring Struts hibernate）；Python的Django和Flask等 。

web框架使得在进行web开发的时候减少了工作量，提高了系统的健壮性和安全性。

## 2. web框架的分类

web框架可以分为两类：**基于请求**的和**基于组件**的，前者的代表有Spring MVC，Struts等，后者的代表有JSF，Tapestry（不了解的可以百度下）。

### 2.1 基于请求的框架

这类框架出现的比较早，使用范围也比较广，核心思想是服务器端为前端提供接口，前端通过浏览器发送URI请求，请求分为两类，一类是请求静态资源，比如图片，视频等，服务器接收到请求返回静态资源；另一类是动态内容，比如创建一个用户的服务，此时服务端通过某种机制运行对用的程序，最后由程序返回数据给前端。

### 2.2 基于组件的框架

在基于组件的框架中，服务器返回的文档被视为一个个可独立工作，重复使用的组件。每个组件都能接受用户的输入并展示自己的内容，我理解freemaker模板 引擎就是这个设计，直接在服务器端将生成的html返回给前端展示。

### 2.3 两种框架的对比

现代的web框架基本使用了MVC架构，所以这两种web框架的区别主要表现在视图层，基于请求的框架需要程序员自己写html，css，js这些视图文档，而基于组件的框架把视图看作由积木一样的组件拼成，积木的显示不用程序员关心，只要设置好它绑定的数据和调整它的属性就可以从编写html，css，js的工作中解放出来。但是这样就会导致程序员的能力比较高，能够生成对用需求的界面，并且不能好精细的控制html的展示，相比来说，面向服务的框架，程序员使用一些前端框架就会把界面做的很好，使用原生的css更能精细的控制页面的展示。所以如果一个web应用的前端展示比较简单，可以选择基于组件的框架，但是一旦前端比较复杂的话就推荐使用基于服务的框架了。

> 参考：
>
> <https://blog.csdn.net/starrow/article/details/12950617>
>
> <https://baijiahao.baidu.com/s?id=1597337059085396836&wfr=spider&for=pc>
>
> <https://baike.baidu.com/item/Web%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6/4262233?fr=aladdin>
