Jsp,Servlet和Tomcat

一、什么是servlet

servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。过程如下:
1、客户端发送请求至服务器端;
2、服务器将请求信息发送至 Servlet;
3、Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4、服务器将响应返回给客户端。
Servlet没有main方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器。Servlet 运行在 Servlet 容器中,并由容器管理从创建到销毁的整个过程。

二、Servlet 的生命周期与工作原理

当服务器接收一个客户端请求时,需要做一下四件事情。
(1) 加载和实例化
如果Servlet容器还没实例化一个Servlet对象,此时容器装载和实例化一个 Servlet。创建出该Servlet类的一个实例。如果已经存在一个Servlet对象,此时不再创建新实例。
(2) 初始化
在产生Servlet实例后,容器负责调用该Servlet实例的init()方法,在处理用户请求之前,来做一些额外的初始化工作。
(3) 处理请求
当Servlet容器接收到一个Servlet请求时,便运行与之对应的Servlet 实例的service()方法,service()方法根据用户的请求调用相对应的doGet或doPost方法来处理用户请求。然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。
(4) 销毁
当Servlet容器决定将一 Servlet从服务器中移除时 ( 如Servlet 文件被更新),便调用该Servlet实例的destroy()方法,在销毁该Servlet实例之前,来做一些其他的工作。
其中,(1)(2)(4) 在 Servlet 的整个生命周期中只会被执行一次。一般情况下,一个servlet实例对应一种请求,此servlet实例可以处理多个用户请求。
Servlet工作原理

三、Servlet 的使用

1、自定义Servlet一般需要继承HttpServlet,而HttpServlet是继承GenericServlet,而GenericServlet是继承Servlet。
2、请求的实际处理者是doGet,doPost方法,自定义Servlet类需要重写doGet,doPost方法。
3、Get方式的请求:直接在浏览器地址栏输入访问的地址所发送的请求或表单发送时没有指明post形式发送的(表单默认为get提交)都会调用doGet方法。

四、Jsp的工作原理

1、当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问,如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。

2、如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。

3、JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过,打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成Servlet 类的源文件和字节码文件了。

jsp工作原理

五、Tomcat总体结构

tomcat容器模型

从上图可以看出 Tomcat 的容器分为四个等级,真正管理 Servlet 的容器是 Context 容器,一个 Context 对应一个 Web 工程,也就是 Servlet 运行时的 Servlet 容器。Tomcat组成如下:

1、Server。整个 Tomcat 的生命周期由 Server 控制,在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令)。

2、Service。Service是一个集合,它有一个或者多个Connector,以及一个Engine,负责处理所有Connector所获得的客户请求

3、Connector。一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回给客户。

4、Engine。Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名。当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理。(Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。)

5、Host。代表一个虚拟主机,每个虚拟主机和某个网络域名相匹配。每个虚拟主机下都可以部署一个或者多个Web App,每个Web App对应于一个Context,当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理。

6、Context。一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成。Context在创建的时候将根据配置文件web.xml载入Servlet类。当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的回应,并返回。

六、Tomcat Server处理一个http请求的过程

假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”“的Context去处理)
7) path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值