JSP&Servlet底层机制
网站工作机制
客户端与用户交互,用户通过客户端向服务器发送请求信息,Web服务器接收到客户的请求后查找资源,并将资源发挥给客户端。在这个过程,用到了两个比较重要的概念HTML标签语言和HTTP协议。
- ?HTML:用标签来描述客户端应该显示给用户的界面。服务器对某一请求做出的回答一般是一个HTML页面,客户端获得后显示给用户。
- ?HTTP:服务器和客户通信所使用的协议。主要分为:
- ?HTTP请求
- Get方法:简单的请求,不从客户端传送数据给服务器。(可以带一些参数,会直接显示在URL后面)
- ?Post方法:可以请求某个资源,同时向服务器发送一些数据(如用户名、密码等)
- Get和Post传递参数不同,Get直接在URL里面体现,而Post会在请求首部后面添加消息体(有效负载),用户无法从URL中看到。
<li>HTTP响应:包括响应首部和内容。首部包括一些响应的属性,如Content-type表示告诉浏览器要接受的数据是什么类型。</li>
- ?HTTP请求
总之,网站工作机制如下:
1)?????? 用户提交一个URL(或表单)
2)?????? 浏览器创建一个HTTP GET(或Post)请求
3)?????? HTTP请求发送给服务器
4)?????? 服务器找到相应资源
5)?????? 生成HTTP响应
6)?????? 发送给客户端(浏览器)
7)?????? 浏览器显示资源,一般是一个HTML页面
动态页面生成机制
以上是静态的网站,在动态网站中,主要不同时在第3步。服务器无法找到相应的资源,而是要去生成一个页面。这是我们就需要另一个应用,Web服务器与它交互生成页面返返回给客户端。
容器就是这么一个应用程序。当某个请求指向servlet而不是静态html页面,Web服务器把这个请求交给容易,容器调用servlet获得响应。
- 使用容器管理和运行servlet减少了很多工作量,他提供一些功能。
- 通信支持:让Web服务器和servlet对话。
- 生命周期管理:初始化servlet、调用servlet及回收资源。
- 多线程支持:某个servlet请求创建一个新的线程。
- 声明方式实现安全:使用XML部署描述文件配置。
- JSP支持。
容器处理请求的步骤:
1)?????? 容器收到请求
2)?????? 创建两个对象HttpServletResponse和HttpServletRequest
3)?????? 根据请求中的URL找到正确的servlet,为这个请求创建一个线程,并将请求和响应对象传递给这个线程。
4)?????? 容器调用servlet的service()方法,此方法根据请求类型调用doGet()或doPost()方法。
5)?????? 在doGet或doPost方法中生成动态页面,并将动态页面放入响应对象中。
6)?????? 容器将响应对象转换为HTTP响应,发送给Web服务器。