Servlet
Http服务器
在早期的Web中,服务器的作用只是存储静态资源供浏览器访问(比如图片、视频等等),这时的服务器功能并不需要多复杂,只需要做到解析请求、寻找资源、返回资源这些非业务功能即可即可。这里的服务器就是Http服务器。
interface Http {}
class HttpServer implements Http{
private String StaticResources;
public String GetRequest(){
// 简单查询返回
}
public String PostRequest(){
// 简单处理返回
}
}
class Browser{
public SendGetRequest(){
HttpServer.GetRequest();
}
}
Servlet
随着Web的发展,业务越来越复杂,交互越来越多。这时候需要根据Http请求调用不同的业务逻辑,但如果放在Http服务器中,就出现业务与非业务的混淆,于是需要再加一层来处理业务逻辑。
同时规定一个接口方便服务器与业务的对接,这就是Servlet。而Servlet容器是加载和管理这些实现Servlet的业务类。
interface Servlet{}
class ServletContainer implements Servlet{
private String BusinessLogic(){
// 使用Servlet的接口实现业务逻辑
// 返回处理结果
}
public GetRequest(){
// 获得从Http服务器发送来的请求
// 找到对应的业务逻辑
}
}
interface Http {}
class HttpServer implements Http{
private String StaticResources;
public String GetRequest(){
ServletServer.GetRequest();
}
public String PostRequest(){
ServletServer.GetRequest();
}
}
进一步职责分离
可以看到,Servlet服务器也是存在业务类(Servlet业务类)和非业务类的混合。
于是我们可以把Servlet类完全抽离出来,Servlet只负责处理Http服务器的请求和根据Http服务器请求寻找对应Servlet业务类。
抽离出Servlet业务类来后,维护一个配置文件,记录请求与Servlet业务的关系,这就是web.config。
Http服务器和Servlet容器被统一称为Web容器。
这也解释了在开发Servlet的时候,没有main方法,只能放到web容器中才能运行。
参考网站
为什么要有Servlet,什么是Servlet容器,什么是Web容器