[Java学习笔记]TomCat和Servlet之间的交互

什么是Servlet?

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器

总体而言Servlet的功能即是负责响应。

什么是Tomcat

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。因此总体而言服务器负责的便是传递请求,传递响应。

Servlet的生命周期

  • 创建 / init()
    Servlet容器启动时:读取web.xml配置文件中的信息,创建ServletConfig对象
    将ServletConfig对象作为参数来调用Servlet对象的init方法(load-on-startup标签设定后才会在这时直接构造对象)。
    在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建ServletRequest、ServletResponse对象,从而调用Servlet对象的service方法。
    Servlet的类文件被更新后,重新创建Servlet,Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的属性决定。
    从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。

  • 响应服务 / service()

  • 销毁 / destroy()
    Servlet容器停止:Servlet容器调用Servlet对象的destroy方法来释放资源。
    Servlet容器得到更新或重新启动:因为Servlet对象此时也需要重新更新,所以先会destroy后再重新创建。

Servlet容器如何知道创建哪个Servlet对象——.xml配置文件

<servlet>

<servlet-name>action<servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<init-param>

<param-name>detail</param-name>

<param-value>2</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>2</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

Servlet容器在开始时便对web.xml进行解析
init-param: 配置创建ServletConfig对象,以用于传入init()方法创建Servlet对象
servlet-name:Servlet对象的名称
servlet-class:创建Servlet对象所要调用的类
param-name:参数名称
param-value:参数值
load-on-startup:Servlet容器启动时加载Servlet对象的优先级顺序
servlet-mapping/servlet-name:要与servlet中的servlet-name配置节内容对应
url-pattern:该Servlet将会响应的URI地址

附:面试问题

什么是Http协议
Http协议(超文本传输协议)是对客户端和服务器进行超文本传输时的规则设定,他规定由客户端向服务端发出请求,而服务端将返回客户端以响应。
其中服务端发出的请求总共由请求行(请求方式、Http协议版本),请求头(客户端信息条件),
请求体(客户端提交的请求参数(post方式下))
而客户端发出的响应也同样分为响应行(协议版本、状态码),响应头(服务端信息条件),请求体(响应内容如html页面/JSON)

程序员能主动调用destroy方法来销毁servlet对象吗?
答:不能,这些方法都是tomcat容器调用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值