有关Servlet的面试题
CGI(Common Gateway Interface),通用网管接口
通用网管接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,web服务器可以根据请求的不同,启动不同的外部程序。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致了服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的。
Servlet
Servlet最初是在1995年由James Gosing提出的,因为使用技术需要复杂的Web服务器支持,所以当时并没有得到重视,也就放弃了。后来随着Web应用复杂度的提升,并要求提供跟高的并发处理能力,Servlet被重新捡起,并在Java平台上得到实现。
Java Servlet要求必须运行在Web服务器当中,与Web服务器之间属于分工和互补关系。确切的说,在实际运行的时候Java Servlet与Web服务器会融合到一块,如同一个程序一样运行在同一个Java虚拟机当中。与CGI不同的是,Servlet对每个请求都是单独启动一个线程,而不是进程。这种处理方式大幅度的降低了系统中的进程数量,提供了系统的并发处理能力。另外因为Java Servlet是运行在虚拟机上的,也就解决了 跨平台的问题。如果没有Servlet的出现,也就没有互联网的今天。
Servlet侧重解决运算和业务逻辑,JSP侧重于解决展示问题。
两者的对比
- servlet处于服务器进程中,它通过多线程的方式运行service方法。
- CGI是一个HTTP请求都会产生一个新的进程,服务完成后就销毁。
- CGI主要用shell Script或C语言编写
- Servlet主要使用Java语言编写
- CGI进程在服务完成后就会被销毁,所以效率上低于Servlet。
- Servlet进程出于服务器进程中,只有在服务器被卸载时才会被卸载
- CGI是不可被移植的,是运行于特定平台上的。
- Servlet是可移植的,运行在JVM上的。
Servlet是线程安全的吗?为什么?
servlet是线程不安全的,因为在tomcat容器中所创建出的servlet对象是单例的,每次请求到达后就会从线程池中启用一个线程去操作servlet对象,如果多个线程操作的是同一个servlet对象,并且使用servlet处理请求的代码中包含有实例对象或者静态变量,就可能造成线程安全问题。但是也要分具体的情况来处理问题。
如果service方法没有访问成员变量或者是静态变量、文件、数据库连接等,而是只是用了当前线程自己的资源,比如临时变量、request、response对象等。该方法本身就是线程安全的那就不需要再进行同步操作。
如果service方法访问 servlet的成员变量但是只对其读操作那就不必进行同步控制,如果进行写操作就需要加上同步语句;如果访问了全局静态变量,既有读也有写操作,通常需要加上同步控制。
解决线程安全问题也可以通过加锁
或者实现
SingleThreadModel
接口。(该接口已经过时)
实现这个接口后,就意味着web容器能够为每个请求创建一个Servlet对象,而不再使用默认的单例模式。
Servlet的生命周期
servlet的生命周期就是从servlet出现到销毁的过程
分以下几个阶段
加载--->实例化---->初始化(为对象的属性赋值)---->请求处理---->销毁
服务器启动时(web.xml中配置load-on-startup=1,默认是0)或者第一次请求该servlet时,会初始化一个Servlet对象,也就是会执行初始化方法init ,该Servlet对象会处理所有客户端请求,service方法中执行,最后服务器关闭时才会调用destory方法销毁该对象,其中加载阶段无法观察,但是初始化,服务,销毁阶段是可以观察到的。
创建Servlet的时机:在tomcat启动时,客户端首次向容器发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有就创建它,然后根据客户端的请求创建HTTPRequest、HTTPResponse对象,从而调用Servlet对象的service方法。
有关Servlet的面试题的更多相关文章
- jsp、Servlet的面试题
3. 谈谈Servlet的生命周期 当接收到请求的时候,容器察看对应的Servlet对象是否存在,如果不存在,需要加载Servetl,实例化Servlet,调用init方法进行初始化.如果已经存在,根 ...
- Servlet 的面试题
Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...
- Servlet request 面试题
使用request获得请求行:String getmethod():获得请求的资源:String getcontextpath():----web应用名称request是一个域对象request完成请 ...
- java面试宝典2019(好东西先留着)
java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...
- Tomcat+Servlet面试题都在这里
下面是我整理下来的Servlet知识点:  图上的知识点都可以在我其他的文章内找到相应内容. Tomcat常见面试题 Tomcat的缺省端口是多少,怎么修改 Tomcat的缺省端口是多少,怎么修改 ...
- Java面试题总结系列 Servlet
Servlet技术主要是为了使用Web上的HTTP协议而设计的.servlet是在WEB服务器上运行的程序.Java Servlet可以用于处理客户请求或生成动态Web网页.先一个实例.然后解释. 先 ...
- Java面试题精选(三) JSP/Servlet Java面试逻辑题
-- JSP/Servlet Java面试逻辑题 -- 很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...
- Java面试题:Servlet是线程安全的吗?
Servlet不是线程安全的. 要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP请求时 ...
- Servlet面试题归纳
尊重原创:http://blog.csdn.net/caohaicheng/article/details/38116481 1.说一说Servlet生命周期 Servlet生命周期包括三部分: 初始 ...
随机推荐
- 笨方法学python笔记
编程是什么 编程就是通过输出一种语言给计算机"听",命令其去执行相应的操作. 我们称我们给计算机下达的命令称为指令.一般说程序就是有多个指令构成的. 计算机需要使用非常多的电路来实 ...
- 开发阶段,将SpringBoot应用快速部署到K8S
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- CVE-2019-0708——RDP漏洞利用
影响系统:windows2003.windows2008.windows2008 R2.windows xp .win7环境:攻击机:kali ip:192.168.40.128靶机:windows ...
- PHP 直接使用html输出excel
1 <?php 2 header("Cache-Control:public"); 3 header("Pragma:public"); 4 5 head ...
- Python稳基修炼之异常处理
错误与异常 1.区分错误与异常 两种错误(都必须改正): 语法错误(代码不规范,格式不对或缺少符号).逻辑错误(逻辑不通) 异常: 程序运行时发生错误的信号 2.异常处理与注意事项 异常处理: 程序员 ...
- 测试平台MeterSphere源码入门
前端代码结构 ├── package.json #Vue的模块依赖定义 ├── pom.xml #Maven前后端打包的定义与依赖 ├── public ├── src #前端核心代码 │ ├── a ...
- JavaEE在职加薪课好客租房项目实战视频教程
JavaEE在职加薪课好客租房项目实战视频教程课程介绍: 本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来 ...
- 整合SSM框架
整合SSM 基本环境搭建 导入相关的pom依赖! <dependencies> <!--Junit--> <dependency> <groupId>j ...
- MySQL全面瓦解15:视图
概述 很多时候,我们会有一些很复杂的数据库操作,比如整合用户的行为数据,那这些数据可能包含用户的餐饮.生活日用.充值消费.交通出行.通讯物流.交通出行.医疗保健.住房物业.运动健康... 基于此,我们 ...
- 论文翻译:2018_Deep Learning for Acoustic Echo Cancellation in Noisy and Double-Talk Scenarios
论文地址:深度学习用于噪音和双语场景下的回声消除 博客地址:https://www.cnblogs.com/LXP-Never/p/14210359.html 摘要 传统的声学回声消除(AEC)通过使 ...