servlet容器
servlet没有main()方法。它们受控于另一个java应用,这个java应用研究称为容器(Container)。
web服务器应用得到一个指向servlet的请求,服务器不会把这个请求交个servlet本身,而是交给servlet容器。由容器向servlet提供http请求和响应,由容器调用servlet的方法(如doPost()、doGet())。
容器如何处理请求(摘自head first servlet & jsp P42)
- 用户点击一个链接,指向一个servlet而不是一个静态页面。
- 容器“看出来”这个请求要的是一个servlet,所以容器创建两个对象:HttpSerlvetResponse、HttpServletRequest
- 容器根据请求中的URL找到正确的servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个servlet线程。
- 容器调用servlet的service()方法。根据请求的不同类型,service方法会调用doGet()或doPost()方法。
- doGet()或doPost()方法生成动态页面,并把这个页面“塞到”响应对象里。要记住,容器还有响应对象的一个引用!
- 线程结束,容器把响应对象转换为一佧HTTP响应,把它发回给客户,然后删除请求和响应对象。
任务 | web服务器 | 容器 | servlet |
创建请求和响应对象 | yes | ||
调用service()方法 | yes | ||
开始一个新线程处理请求 | yes | ||
把响应对象转换为一个HTTP响应 | yes | ||
了解HTTP | yes | ||
把HTML增加到响应对象 | yes | ||
有响应对象的一个引用 | yes | ||
在DD中查找URL | yes | ||
删除请求和响应对象 | yes | ||
协调生成动态内容 | yes | yes | |
管理生命周期 | yes | ||
名字与DD中的<servlet-class>匹配 | yes |
容器为Web应用提供了通信支持、生命周期管理、多线程支持、声明方式的安全、还支持JSP,这样你就能全神贯注地开发你自己的业务逻辑。
转载于:https://blog.51cto.com/youaremyrice/289453