# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jun-wang.gitbook.io/learnjava/ji-shu-xue-xi/jia-gou-xue-xi/web-kuang-jia.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
