Servlet与Tomcat的关系

  • Post author:
  • Post category:其他





Servlet与Tomcat的关系概述


在web项目访问中,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,

那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,

servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建? 这时候tomcat用到了,

它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。相对应的web容器有很多,比如Tomcat、Jboss、Weblogic等




Servlet




1、Servlet是什么?


(1)

Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。


(2)Servlet多线程体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器(如Tomcat)负责的。

(3)Servlet的作用:主要功能在于交互式地浏览和修改数据,生成动态Web内容。

(4)Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。



1.1 Servlet 与 Servlet 容器的关系

tomcat容器模型


Context 容器


Tomcat 的容器等级中,Context 容器是直接管理 Servlet 在容器中的包装类 Wrapper,所以 Context 容器如何运行将直接影响 Servlet 的工作方式。


真正管理 Servlet 的容器是 Context 容器

,一个 Context 对应一个 Web 工程,在 Tomcat 的配置文件中可以很容易发现这一点,如下:

<Context path="/projectOne " docBase="D:\projects\projectOne"  
reloadable="true" />


1.2 Servlet 如何工作?

当用户从浏览器向服务器发起一个请求,请求信息:

http://hostname: port /contextpath/servletpath 


①:hostname 和 port 是用来与服务器建立 TCP 连接。



②:【/contextpath/servletpath】即【 URL 】才是用来选择服务器中的哪个子容器来服务用户的请求。



特别说明:

Tomcat7.0 中有个映射类【org.apache.tomcat.util.http.mapper】,这个类保存了 Tomcat 的 Container 容器中的所有子容器的信息,

mapper 将会根据这次请求的 hostnane 和 contextpath 将 host 和 context 容器设置到 Request 的 mappingData 属性中。




Tomcat




Tomcat 是什么?

Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,处理动态网页部分。

Tomcat是运行java的网络服务器,底层是一个socket的程序,同时Tomcat也是JSP和Serlvet的容器



那么为什么我们要用Tomcat呢?

一般情况下,如果我们使用HTML/CSS/JS编写了一个网页,这个网页只能由我们本地打开,别的人无法通过远程访问这个页面。那么Tomcat就解决了这个问题,让其他人也可以访问我们写的页面。

在这里插入图片描述




扩 展 知 识




Session


(1)Session的三种工作方式


1.基于 URL Path Parameter,默认就支持;

2.基于 Cookie,如果你没有修改 Context 容器个 cookies 标识的话,默认也是支持的;

3.基于 SSL,默认不支持,只有 connector.getAttribute(“SSLEnabled”) 为 TRUE 时才支持。

(2)SSL(Secure Sockets Layer 安全套接层)协议,及其继任者TLS(Transport Layer Security传输层安全)协议,是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密,用于保障网络数据传输安全,利用数据加密技术,确保数据在网络传输过程中不会被截取及窃听。SSL协议已成为全球化标准,所有主要的浏览器和WEB服务器程序都支持SSL协议,可通过安装SSL证书激活SSL协议。

SSL 证书就是遵守 SSL协议的服务器数字证书,由受信任的证书颁发机构(CA机构),验证服务器身份后颁发,部署在服务器上,具有网站身份验证和加密传输双重功能。

如果是第三种情况的话将会根据 javax.servlet.request.ssl_session 属性值设置 Session ID。

(3)有了 Session ID 服务器端就可以创建 HttpSession 对象了,第一次触发是通过 request. getSession() 方法,如果当前的 Session ID 还没有对应的 HttpSession 对象那么就创建一个新的,并将这个对象加到 org.apache.catalina. Manager 的 sessions 容器中保存,Manager 类将管理所有 Session 的生命周期,Session 过期将被回收,服务器关闭,Session 将被序列化到磁盘等。只要这个 HttpSession 对象存在,用户就可以根据 Session ID 来获取到这个对象,也就达到了状态的保持。

(4)Session 的致命弱点是不容易在多台服务器之间共享。



Servlet 中的 Listener


(1)整个 Tomcat 服务器中 Listener 使用的非常广泛,它是基于【观察者模式】设计的。


Listener 的设计对开发 Servlet 应用程序提供了一种快捷的手段,能够方便的从另一个【纵向维度控制程序和数据】。


(2)目前 Servlet 中提供了 6 种两类事件的观察者接口,它们分别是:


4 个 EventListeners 类型的,ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener 和 2 个 LifecycleListeners 类型的,ServletContextListener、HttpSessionListener。

这些 Listener 的实现类可以配置在 web.xml 中的 标签中。当然也可以在应用程序中动态添加 Listener,需要注意的是 ServletContextListener 在容器启动之后就不能再添加新的,因为它所监听的事件已经不会再出现。掌握这些 Listener 的使用,能够让我们的程序设计的更加灵活。



版权声明:本文为Roccc666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。