什么是容器

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. 每天一个linux命令(14):less命令

    版权声明更新:2017-05-18博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2. ...

  2. shell for的用法

    #!/bin/sh for1(){ for i in 1 2 3 4 5 6do echo "$i"done } for1#!/bin/shfor2(){for i in {1.. ...

  3. Python函数-bytearray()

    bytearray([source [, encoding [, errors]]]) bytearray([source [, encoding [, errors]]])返回一个byte数组.By ...

  4. 使用 MLCC 替代电解电容需要注意几点 (2018-07-23)

    使用 MLCC 替代电解电容需要注意几点 容量,MLCC 在高压时容量会降到标称的 30~50% 以下 1. MLCC 的 ESR 很低,比较适合高频 DCDC 输出. MLCC 会有压电效应,可能会 ...

  5. bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...

  6. hdu 4336 Card Collector —— Min-Max 容斥

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4336 bzoj 4036 的简单版,Min-Max 容斥即可. 代码如下: #include<cst ...

  7. SQL SERVER存储过程的几种示例

    1.常用系统存储过程及使用语法:exec sp_databases; --查看数据库exec sp_tables; --查看表exec sp_columns student;--查看列exec sp_ ...

  8. UML解析

    1.1 UML基础知识扫盲 UML这三个字母的全称是Unified Modeling Language,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言. 你可能会问:这明明是一种图形,为什 ...

  9. Python中获得当前目录和上级目录

    [转]原文地址:http://blog.csdn.net/liuweiyuxiang/article/details/71154346 获取当前文件的路径: from os import path d ...

  10. Java-API:java.util.ArrayList

    ylbtech-Java-API:java.util.ArrayList 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 0. https://docs.orac ...