最近一场面试(Servlet的生命周期)

一、(面试)请简述一下Servlet的生命周期?

答:Servlet的生命周期(4个):①创建对象,②初始化,③执行,④销毁。

但是不是固定的,Servlet对象是单例的。

首次访问Servlet,才会创建对象并调用初始化方法,然后执行操作;

非首次访问则直接调用服务方法,不会创建对象和初始化;

正常关闭服务器会调用销毁方法,非正常则不会。


 
2.2 Servlet
2.2.1 Servlet 生命周期
1. 创建 Servlet 对象,通过服务器反射机制创建 Servlet 对象,第一次请
求时才会创建。(默认)
2 ,调用 Servlet 对象的 init() 方法,初始化 Servlet 的信息, init() 方法只会在创建后被调用一次;
3 ,响应请求,调用 service() 或者是 doGet() doPost() 方法来处理请求,这些方法是运行的在
多线程状态下的。
4 , 在长时间没有被调用或者是服务器关闭时,会调用 destroy() 方法来销毁 Servlet 对象。
2.2.2 servlet 是什么
Servlet 定义: Servlet 是基于 Java 技术的 Web 组件,由容器管理并产生动态的内容。
Servlet 引擎作为 WEB 服务器
的扩展提供支持 Servlet 的功能。 Servlet 与客户端通过 Servlet 容器实现的请求 / 响应模型进
行交互
Servlet 知道是做什么的吗?和 JSP 有什么联系? JSP 的运行原理? JSP 属于 Java
的吗?
Servlet 是线程安全
scala 写的大型框架吗 spark
如何确保分布式环境下异步消息处理的顺序性?
servlet 是单例
servlet filter 的区别。
servlet 流程
 

Servlet 是线程安全的吗?如何证明?

Servlet 是线程不安全的,因为Serlvet 在整个生命周期中是单例的。因为是单例,所以共用同一个堆空间中的数据,如果使用成员变量来记录数据,在多个用户的访问下就可以出现数据混乱的效果,从而也体现其线程的不安全性。


 

二、补充:

 

1、什么是Servlet

Servlet(Server Applet),服务小程序(或服务连接器),用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下都是指后者。

 

2、如何使用Servlet

自定义类 extends HttpServlet 覆盖service 方法。(后期有时间再补充)

 

3、 Servlet 接口中常用的方法

构造方法:在服务器创建对象的时候执行,单例。

void init(ServletConfig config):初始化方法。在第一次创建对象的时候执行。

void service(ServletRequest req, ServletResponse resp):服务方法,只要请求该资源一次,就会执行一次。

void destory():销毁方法,服务器正常关闭的时候执行。

getServletConfig():用于返回ServletConfig 对象的方法。

 

4、Servlet是线程不安全的

因为Servlet在整个生命周期中都是单例的,所以会共用一个堆空间中的数据,如果使用成员变量来记录数据,在多个用户的访问下,就会出现数据混乱。

 

5、Servlet的三大作用域   request < session < servletContext

request:在一个请求的多个跳转之间共享数据时使用。

session:在一个会话的多个请求之间共享数据时使用。

servletContext:在多个会话之间共享数据时使用。

 

6、HttpServletRequest常用方法

ServletRequest 接口:表示请求对象,封装了请求的数据和获取请求数据的方法。

HttpServletRequest 接口:ServletRequest 接口的子接口,封装了所有的请求数据和获取符合Http协议的数据的方法.。它底下的常用方法:

(1)getMethod:返回请求方式(如GET)

(2)getRequestURI:返回请求行中的资源名字部分(如/test/index.html )

(3)getRequestURL:返回浏览器地址栏中的所有信息

(4)getContextPath:获取当前项目的上下文路劲<Context />元素的path属性值

(5)getRemoteAddr:返回发出请求的客户机的IP地址

(6)getRequestURL:返回客户端请求的完整URL(包括协议、服务器名、端口号、资源路径信息),不含查询参数

(7)getHeader:返回指定名称的头字段的值

(8)获取表单请求参数: 

①String getParameter(String name):返回指定名字参数的值

②String[] getParameterValues(String name):返回指定名字参数的多个参数值。(复选框)

③Enumeration<String> getParameterNames():返回所有参数名的 Enumeration 对象 

④Map<String,String[]> getParameterMap():返回所有的参数和值所组成的Map对象

 

7、HttpServletResponse常用方法

ServletResponse 接口:响应对象,封装了做响应相关的方法。

HttpServletResponse 接口:ServletResponse 接口的子接口,封装了符合Http 协议的响应方法。它常用方法:  

(1)OutputStream getOutputStream():获取字节输出流对象( 文件下载)。     

(2)PrintWriter  getWriter(): 获取字符输出流对象

(3)response.setContentType("text/html"),设置输出的MIME类型(内容的类型)

(4)response.setCharacterEncoding("UTF-8"),response.setContentType("text/html;charset=utf-8"),设置输出数据的编码方式    

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一碗谦谦粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值