Servlet的面试题

** 什么是Servlet**

Servlet是sun公司提供的一门用于开发动态web资源的技术。

Servlet接口实现类

Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,
它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
 
HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则
调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。

Servlet是如何被实现的

Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:

1、编写一个Java类,实现servlet接口。
 
2、把开发好的Java类部署到web服务器中。
  
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servle

** Servlet的执行原理**

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:

①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
  
②装载并创建该Servlet的一个实例对象。
 
  ③调用Servlet实例对象的init()方法。
  
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
 
  ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

Servlet访问URL映射配置
  
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用元素和元素完成。
  
元素用于注册Servlet,它包含有两个主要的子元素:和,分别用于设置Servlet的注册名称和Servlet的完整类名。

一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径
同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/</url-pattern>
 </servlet-mapping>
<servlet-mapping>
	 <servlet-name>HelloServlet</servlet-name>
		<url-pattern>/1.html</url-pattern>
</servlet-mapping>

Servlet与普通Java类的区别  
  
Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
  
针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。
(注)
  在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。
对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

  如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。

Servlet的生命周期

1.创建Servlet实例.
Servlet引擎装入JAVA类,在Servlet引擎启动时或首次请求特定Servlet时创建Servlet实例.发生时间取决于特定Servlet的设置.通常Servlet引擎只生成Servlet对象的一个备份,每次请求时复用这个对象,即使同时处理多个请求.这种方法可以节省对每个请求生成新的对象的时间,但需要在编程时认真计划.替换方法见"单线程模型".
2.实例初始化.
Servlet引擎调用Servlet的init()方法.利用此方法,通常要设置Servlet周期中的常量参数,如文件路径和数据库连接池.实例初始化之后,放在内存中,直到收到请求.
3.请求处理.
Servlet引擎收到的每个请求由单独的Java线程处理.Servlet引擎可能创建新线程,也可能从池中分配一个线程.线程创建请求并响应对象,然后调用Servlet的service()方法.service()方法确定如何处理请求.
4.线程管理.
多个线程可以同时执行一个对象的方法,各有自己的请求与响应对象.将代码设计成线程安全是Servlet编程的主要部分.
5.其它服务
Servlet引擎提供的典型服务是对话跟踪,使程序可以跟踪属于特定用户的数据.
6.实例删除
Servlet引擎需要安全关闭时,或需要恢复内存时,调用Servlet的destroy()方法.这时Servlet可以关闭文件并优雅地关闭.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值