内容概要:
1、什么是Web容器,如何工作的?
2、Servlet与JSP的关系是什么?
3、什么是Model 2 ?
1、Web容器
重要概念:Web容器(Container)是Servlet/JSP唯一认得的HTTP服务器。
容器:持有对象,负责对象的生命周期与相关服务的连接
具体层面,其实就是一个用Java写的程序
抽象层面,可以视为运行Servlet/JSP的HTTP服务器,Servlet/JSP在不同Web容器上运行,而不用理会底层真正的HTTP服务器
用Apache Tomcat作为Web容器
如同JVM介于Java程序与操作系统之间,Web容器是介于实体HTTP服务器与Servlet之间
一个请求/响应的基本例子:
(1)客户端(浏览器)对Web服务器发出HTTP请求
(2)HTTP服务器收到HTTP请求,将请求转由Web容器处理,Web容器会剖析HTTP请求内容,创建各种对象(如HttpServletRequest、HttpServletResponse、HttpSession等)
(3)Web容器由请求的URL决定要使用哪个Servlet来处理请求(事先由开发人员定义)。
(4)Servlet根据请求对象(HttpServletRequest)的信息决定如何处理,通过响应对象(HttpServletResponse)来创建响应。
(5)Web容器与HTTP服务器沟通,Web服务器将响应转换为HTTP响应并传回客户端。
如果有多次请求,就只是启动多个线程处理,而不是重复启动多次JVM,可以大幅减轻性能负担。
然而,Web容器可能会使用同一个Servlet实例服务多个请求,多个请求下,相当于多个线程在共享存取一个对象,因此得注意线程安全问题,避免引发数据错乱。
2、Servlet与JSP的关系
Servlet转化成一个类,继承了HttpJspBase,而HttpJspBase继承自HttpServlet
JSP会被Web容器转译为Servlet的".java"源文件、编译为".class"文件,然后加载容器之中,最后提供服务的还是Servlet实例。
3、MVC与Model 2
MVC:Model、View、Controller,模型、视图、控制器
Model 2 架构上仍将程序职责分为Model、View、Controller
控制器:取得请求参数、验证请求参数、转发请求给模型、转发请求给画面,这些都使用程序代码来实现
模型:接受控制器的请求调用,负责处理业务逻辑、负责数据存取逻辑等,这部分还可依应用程序功能,产生各种不同职责的模型对象,模型使用程序代码来实现。
视图:接受控制器的请求调用,会从模型提取运算后的结果,根据需求呈现所需的画面,在职责分配良好的情况下,基本上可以做到不出现程序代码,因此不会发生程序代码与HTML混杂在一起的情况。