什么是容器

Servlet没有main()方法,他们受控于另一个Java应用,这个java应用称为容器(Container)。

Web服务器应用(如Apache)得到一个指向Servlet的请求(如何判断是一个Servlet请求而不是一个静态HTML页面请求?)时,服务器不是把这个请求交给Servlet本身,而是交给部署该Servlet的容器。由容器向Servlet提供HTTP请求和响应,而且要由容器调用Servlet的方法(如doPost()或deGet())。

注意,我们目前使用Tomcat作为Http服务器和Web容器,即可以将上述Apache、Servlet容器字眼都换为Tomcat。

容器的作用

  • 通信支持

    容器使得Servlet与Web服务器对话,不用自己建立ServerSocket、监听端口、创建流那一套。
  • 生命周期管理

    容器控制Servlet的生与死,如负责加载类、实例化类和初始化Servlet、调用Servlet方法、实例回收等等。
  • 多线程支持

    容器为每个Servlet请求创建一个新的Java线程,若Servlet运行完相应的Http服务方法,该线程结束。
  • 声明方式实现安全

    通过容器,可以使用XML部署描述文件(DD)来配置和修改安全性,而不必将其硬编码到Servlet类代码中。
  • JSP支持

    是容器负责将JSP代码翻译成真正的Java代码。

容器如何处理请求

  • 用户请求的一个连接是Servlet而不是一个静态页面
  • 容器看出这是个Servlet,则穿件两个对象:HttpServletRequest和HttpServletResponse
  • 容器根据URL找到正确的Servlet,为这个请求创建或分配一个线程,并把上述请求和响应对象传递给这个Servlet线程
  • 容器调用Servlet的service()方法,该方法会调用doGet()或doPost()方法
  • 处理请求并把结果塞给响应对象
  • 线程结束,容器把响应对象转换为一个HTTP响应

部署描述文件(DD)

Servlet的三个名字:真实java类名、URL映射名、HTTP请求名,这些在部署描述文件(DD)里声明。

DD另外还有以下作用:安全角色、错误页面、标记库、初始化配置信息等等。

Servlet&JSP世界中的MVC

业务逻辑放在模型中,模型就是业务数据和方法的组合;

Servlet扮演控制器的角色,在模型和视图之间起协调作用;

JSP作为视图可与模型分离。

要点

J2EE

J2EE是一种超级规范,他结合了其他的一些规范,包括Servlet2.4规范和JSP2.0规范,这些是对应Web容器的;

另外J2EE 1.4规范还包括Enterprise JavaBean(EJB)2.1规范,这对应EJB容器;

即,Web容器用于Web组件(Servlet和JSP),EJB容器用于业务组件;

J2EE应用服务器包括一个Web容器和一个EJB容器;Tomcat是一个Web容器,而不是一个完整的J2EE应用服务器;

独立的Web容器通常配置为与一个HTTP Web服务器(如Apache)协作,不过Tomcat容器本身就能作为一个基本的HTTP服务器。

但是在HTTP服务器功能方面,Tomcat没有Apache那么健壮,所以常见的非EJB Web应用通常会结合使用Apache和Tomcat。

注意的名词:

  • Web服务器
  • Web容器
  • Servlet容器

参考资料

EJB到底是什么 csdn

EJB wikipedia

《Head First Servlets & JSP》-2-概述的更多相关文章

  1. 《Head First Servlets & JSP》-1-前言

    <Head First Servlets & JSP>(中文版) BB,KS & BB著, 苏钰函,林剑译,中国电力出版社 数据交互 Web浏览器和Web服务器:通过Htt ...

  2. Headfirst JSP 01 (概述)

    HTTP 协议 http 是tcp/ip上层协议, 如果你对这些网络协议还不是太熟悉, 下面提供一个非常简单的解释, tcp负责确保从一个网络节点向另一个网络节点发送文件能作为一个完整的文件到达目的地 ...

  3. Head First Servlets & JSP 学习笔记 第十一章 —— Web应用部署

    jar:java archive(java归档) war:web archive(web归档) war文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个jar文件).建立 ...

  4. Head First Servlets & JSP 学习笔记 第九章 —— 使用JSTL

    JSTL1.1 不是JSP2.0规范的一部分!你能访问Servlet和JSP API 不意味着你能访问JSTL! 使用JSTL之前,需要将两个文件("jstl.jar" 和 &qu ...

  5. Head First Servlets & JSP 学习笔记 第七章 —— 作为JSP

    <%@ …… %> 这是指令 <%@ page ……import="java.util.Date" %> 这是page指令,import是page指令的一个 ...

  6. Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用

    初始化参数:(init-param) 初始化参数写在web.xml文件中:(写在<servlet>标签内部) <servlet> <servlet-name>Bee ...

  7. Head First Servlets & JSP 学习笔记 第三章 —— MVC迷你教程

    临渊羡鱼,不如退而结网!是时候动手搞事情了! 我们的四大步骤: ①分析用户的视图(也就是浏览器要显示的东西),以及高层体系结构: (这个就是所谓的前端吧?用JSP?JSP可以当成Html来用吧?高层体 ...

  8. Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构

    Servlet没有main()方法,所以Servlet受其他人控制,这个其他人就是容器!而Tomcat就是一种容器. 容器向Servlet提供Http请求和Http响应:容器来调用Servlet的do ...

  9. 01 Servlet & Jsp 技术概述

    Servlet 介绍 servlet 是运行在web服务器或应用服务器上的java程序, 它是一个中间层, 负责连接来自web浏览器或其他http客户端的请求和HTTP服务器上的数据库或应用程序. 为 ...

  10. 《Head First Servlets & JSP》-11-Web应用部署

    Web目录 WAR文件 WAR文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式. 建立WAR文件时,就是把整个Web应用结构(去掉Web应用上下文目录,就是把WEB-INF之上的一级目录 ...

随机推荐

  1. Storm实时计算:流操作入门编程实践

    转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践   Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...

  2. Java 参数的和

    public class CommandParamter { public static void main(String[] args) { // TODO Auto-generated metho ...

  3. LeetCode Perfect Number

    原题链接在这里:https://leetcode.com/problems/perfect-number/#/description 题目: We define the Perfect Number ...

  4. django模型models.py文件内容理解

    首先,要理解这句话:模型是你的数据的唯一的.权威的信息源.它包含你所存储数据的必要字段和行为.通常,每个模型对应数据库中唯一的一张表 基础:每个模型都是django.db.models.Model的一 ...

  5. TP上传图片

    //更新 更新中的话,一定要写那一个if判断 public function update(){ $model = M('link'); $upload = new \Think\Upload();/ ...

  6. ORACLE删除用户的有的表的方法

    首先我们查询oracle用户下的所有表 select * from all_tab_comments -- 查询所有用户的表,视图等select * from user_tab_comments    ...

  7. vue.js初学(三)模板语法

    1:介绍 vue.js允许开发者声明式地将Dom元素绑定至Vue实例的底层,所有的模板都是合法的html,所以能够被遵循规范的浏览器和html解析器解析 在底层的实现上,vue将模板编译成虚拟Dom渲 ...

  8. HL7 标准及实现指南 必看的网址

    V2: http://hl7book.net/index.php?title=HL7_version_2 包括HL7 的介绍,主要章节,每个版本的变化, 各种语言实现的HL7库,免费HL7工具, 最新 ...

  9. boost::ASIO的同步方式和异步方式

    http://blog.csdn.net/zhuky/article/details/5364574 http://blog.csdn.net/zhuky/article/details/536468 ...

  10. java中Swing编程再度练习篇

    总结: 注意理解frame的层级关系 package com.da; //添加背景图片 //我只实现了插入图片.但并没有实现是背景图片 import javax.swing.JFrame; impor ...