JavaWeb面试深度解析:Servlet生命周期与CGI对比

需积分: 21 2 下载量 176 浏览量 更新于2024-09-08 收藏 60KB DOC 举报
本文主要探讨了JavaWeb面试中常见的知识点,包括Servlet的生命周期、Servlet与CGI的区别、HTTP请求转发与重定向的区别以及JSP中动态INCLUDE与静态INCLUDE的差异,同时还介绍了JSP的内置对象及其作用。 Servlet的生命周期主要包括三个阶段:初始化、服务和销毁。当Servlet被加载到服务器时,会调用`init()`方法进行初始化,这个方法只在Servlet实例创建时执行一次。接着,在客户端发送请求到服务器时,Servlet容器会调用`service()`方法来处理请求,`service()`方法会根据请求类型(GET或POST等)自动调用相应的`doGet()`或`doPost()`等方法。当服务器决定不再需要Servlet实例时,会调用`destroy()`方法进行清理工作,释放Servlet占用的资源。 Servlet与CGI的主要区别在于处理请求的方式和性能。Servlet是基于多线程模型的,同一个Servlet实例可以服务于多个并发请求,从而提高了效率。而CGI则为每个请求创建一个新的进程,服务完成后立即销毁,这种模式在高并发环境下效率较低,因为频繁的进程创建和销毁消耗较大。 HTTP请求的转发(`forward()`)和重定向(`redirect()`)也是面试中常见的问题。转发是服务器内部的操作,发生在服务器端,浏览器的URL不会改变,而重定向则是服务器告诉浏览器需要重新发起一个新的请求,浏览器的URL会显示新的地址。因此,重定向可以传递更多的请求参数,而转发则适合于在同一个应用内的页面间跳转,保持请求的状态。 JSP中的动态INCLUDE和静态INCLUDE是两种不同的包含机制。动态INCLUDE使用`<jsp:include>`标签,每次请求都会检查包含文件是否更新,适用于包含可能会变化的动态内容,同时可以传递参数。静态INCLUDE使用`<%@ include file="">`,它不会检查包含文件的更新,适用于包含静态内容,如HTML片段,且不支持传参。 JSP的内置对象是开发者常用的一些便利工具。例如,`request`对象代表`HttpServletRequest`,提供了获取请求信息和处理Cookie、Header、Session的方法;`response`对象对应`HttpServletResponse`,用于设置返回给浏览器的响应,如设置Cookie和Header信息;`out`对象是`JspWriter`的实例,负责将数据输出到浏览器;`pageContext`对象则提供了跨范围访问属性和获取其他Servlet相关对象的能力。 理解这些核心概念和技术细节对于JavaWeb开发者来说至关重要,它们是构建动态Web应用程序的基础,也是面试中考察技术深度和广度的重要方面。