Servlet面试题整理

Servlet和JSP面试题整理

1. forward和redirect的区别?
  • 地址栏显示不同,forward地址栏显示的是原来的地址,因为其是由服务器请求资源,直接访问目标地址的URL,并读取响应内容,然后将内容发送至浏览器,浏览器并不知道目标地址。redirect显示的是新的URL,因为其是个是服务器根据逻辑发送状态码至浏览器,让浏览器重新请求目标地址,所以浏览器是知道目标地址的。
  • 数据共享方式不同,forward转发页面和目标页面均可共享request的数据。redirect则是不可以共享数据。
  • 通常应用的场景不同,forward一般用于用户登陆的时候,根据角色转发到相应的模块。redirect一般用于用户注销登陆时返回主页面和跳转到其它的网站等
  • 效率不同,通常认为forward的效率要更高
2. session和cookie有什么区别?
  • cookie可以被客户端禁用,但是客户端无法禁用服务端的session。
  • 存储的对象不同,session能够存储任意的Java对象,cookie只能存储String类型的对象。
  • 数据存储的地址不同,cookie数据保存在客户端,session数据保存在服务器端
3. Servlet有什么优点?
  • 可移植性好
    Servlet是用Java语言编写的,因此它可以移植到不同的操作系统和服务器上。
  • 安全性好
    Servlet也具有类型检查特征,并利用Java的垃圾收集和没有指针的设计,使得Servlet避免了内存管理等问题。
  • 高效性
    Servlet加载执行后会常驻服务器内存中,当再次受到客户端的请求时,服务器会产生新的线程而不是进程为客户端服务,这样就提高了响应速度。
4. 对Servlet线程安全的理解
  • 客户端第一次请求Servlet的时,tomcat会根据web.xml配置文件实例化servlet,当又有一个客户端访问该servlet的时候,不会再实例化该servlet,这就是JSP/Servlet容器默认采用的单实例多线程(这是造成线程安全的主因)处理多个请求的方式。
  • Servlet本身是无状态的,一个无状态的Servlet是绝对线程安全的,所以servlet是否线程安全是由它的实现来决定的,如果它内部的属性或方法会被多个线程改变,它就是线程不安全的,反之,就是线程安全的。
  • 避免使用实例变量 ,避免使用非线程安全的集合,在多个Servlet中对某个外部对象(例如文件)的修改是务必加锁,互斥访问,都能够提高线程安全性。
5. Servlet的生命周期
  • 当客户端第一次请求Servlet时,Servlet被加载到内存中,容器会创建Servlet实例,并调用其init()方法进行初始化工作。
  • 容器创建请求对象和响应对象,然后调用Servlet的service()方法为客户端提供服务。
  • 当Servlet不再被需要时,容器调用Servlet的destory()方法将Servlet实例销毁。
  • 注: 当客户端请求的Servlet已经存在于服务器内存时,容器会创建新的线程调用service()方法响应客户端请求。在Servlet的整个生命周期中,init()方法和destory()方法只会被调用一次。
6. JSP中动态INCLUDE与静态INCLUDE的区别?
  • 动态INCLUDE 用jsp:include动作实现它总是会检查所含文件中的变化,并且可以带参数,适合用于包含动态页面。
  • 静态INCLUDE 用include伪码实现,不会检查所含文件的变化,适用于包含静态页面。
7. get和post有何区别?
  • get参数传递通过url,post放在resquest body中
  • get请求参数有长度限制,post没有
  • get不安全,因为参数暴露在url中。post安全,参数是隐藏的
  • get请求只能进行url编码。post支持多种编码
  • get请求参数会被完整保留在浏览历史记录,而post不会被保留。
  • get产生一个tcp数据包;post产生两个tcp数据包。
  • get和post本质就是tcp链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
  • 7
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值