什么是容器

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. [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛

    Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...

  2. UVALive - 3521 Joseph's Problem (整除分块)

    给定$n,k$$(1\leqslant n,k\leqslant 10^9)$,计算$\sum\limits _{i=1}^nk\: mod\:i$ 通过观察易发现$k\%i=k-\left \lfl ...

  3. 牛客网 PAT乙级(Basic Level)练习题 1023 考新郎

    题目描述 过年期间,老家举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做“考新郎”,具体的操作是这样的: 1. 首先,给每位新娘打扮得几乎一模一样,并盖上大大 ...

  4. 第一章计算机网络和因特网-day01

    什么是因特网: 其一:构成因特网的基本硬件与软件. 其二:为分布式应用提供服务的联网基础设施. 终端机器称为主机( host ) 或者端系统( end system ) 端系统通过通信链路(commu ...

  5. [转]java 中的序列化是什么意思?有什么好处?

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比 ...

  6. 反射ORM 三层(for sql server/mysql)

    sql server and oracle 不同之处只在于: 1·参数@和: 2·自增和序列 RPROM.cs //(写错愕,应该是RPORM) RPROM.Insert(p1); //需求:DBS中 ...

  7. java代码异常篇

    总结:掌握流.缓冲区类的方法 package com.b; import java.io.BufferedReader; import java.io.File; import java.io.Fil ...

  8. java中的死锁现象

    死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. java 死锁产生的四个必要条件: 1.互斥使用,即当资源被一个线 ...

  9. ORA-00904: 标识符无效——解决方案

    转自:https://blog.csdn.net/jajavaja/article/details/49122639 建表时列名用双引号引着(用Navicat工具建表默认是加上双引号的),java连接 ...

  10. tomcat跑多个项目和不同端口访问项目

    最近笔者在工作中需要同时运行多个项目,且有时需要不同端口访问项目:在此过程中,笔者觉得有必要将注意事项记录一下,以备后边查阅或广大读者借鉴. 工作环境是win7,64位,IDE为eclipse,浏览器 ...