版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Servlet高频面试题及详细答案(实战版)一、Servlet基础概念1.什么是Servlet?Servlet是JavaEE提供的一套服务端小程序规范,是运行在服务器端的Java类,专门用来接收和处理客户端的HTTP请求,响应HTTP结果。它属于动态web资源,核心作用是处理业务请求、交互后台数据,区别于HTML、CSS这类静态资源。所有自定义Servlet都必须直接或间接实现Servlet接口,由web容器(Tomcat)负责实例化、调用和管理生命周期。2.Servlet和普通Java类的区别?1)普通Java类由开发者手动new创建、调用方法;Servlet由Tomcat容器管理,无需手动创建对象和调用方法。2)普通Java类无法处理HTTP请求;Servlet专门适配HTTP协议,内置请求、响应相关API,可直接处理浏览器请求。3)普通Java类没有固定生命周期;Servlet拥有完整的生命周期,由容器统一调度执行。4)普通Java类可独立运行;Servlet必须依赖web容器才能运行。3.Servlet的父类和核心接口有哪些?核心顶层接口:Servlet,定义了Servlet生命周期的核心方法。通用抽象类:GenericServlet,实现了Servlet接口,提供了通用的Servlet基础实现,不绑定HTTP协议。HTTP专用抽象类:HttpServlet,继承GenericServlet,专门针对HTTP协议封装,重写了服务方法,区分GET、POST等请求方式,日常开发中我们自定义Servlet都是继承HttpServlet。二、Servlet生命周期(高频必考)4.详细说说Servlet的生命周期?Servlet生命周期分为实例化、初始化、服务、销毁四个阶段,全程由Tomcat容器管控。1.实例化阶段(只执行一次)客户端第一次请求该Servlet,或者服务器启动时(load-on-startup配置),Tomcat通过反射创建Servlet实例对象,整个生命周期只创建一个实例。2.初始化阶段(只执行一次)实例化完成后,容器调用init()方法完成初始化,主要用来加载配置、初始化资源(数据库连接、读取参数等),全局仅执行一次。3.服务阶段(执行多次)每次客户端请求该Servlet,容器都会调用service()方法。HttpServlet中会根据请求方式,自动分发到doGet()、doPost()、doPut()等方法处理请求。每一次请求都会触发该阶段。4.销毁阶段(只执行一次)服务器关闭、项目卸载时,容器调用destroy()方法,释放Servlet占用的资源,之后Servlet实例被垃圾回收,仅执行一次。5.init()、service()、destroy()三个方法的区别?1)init():初始化方法,Servlet创建后执行一次,用于初始化资源,不处理请求。2)service():核心服务方法,每次请求都会执行,负责接收请求、分发请求方式,是处理用户请求的入口。3)destroy():销毁方法,项目停止时执行一次,用于关闭资源、清理缓存。6.Servlet是单例还是多例?有什么线程安全问题?Servlet是单例的,整个web项目中一个Servlet类只有一个实例对象。线程安全问题:多个客户端同时请求同一个Servlet时,会开启多个线程并发访问同一个Servlet实例。如果在Servlet中定义了成员变量,多线程同时读写该变量会出现数据错乱、并发冲突问题。解决方案:尽量不要在Servlet中定义成员变量;如果必须使用,可加同步锁,或者将变量定义在doGet/doPost方法内部(局部变量,每个线程独立)。三、HTTP请求处理与常用方法7.doGet和doPost的区别?1)参数传递方式:GET请求参数拼接在URL地址栏中;POST请求参数放在请求体中。2)数据大小限制:GET有URL长度限制,无法传输大量数据;POST无大小限制,可传文件、大数据。3)安全性:GET参数暴露在地址栏,明文显示,安全性低;POST参数隐藏在请求体,相对安全。4)缓存特性:GET请求默认会被浏览器缓存;POST请求不会被缓存。5)书签与历史记录:GET请求可保存书签、留存历史记录;POST不可以。8.Servlet中如何获取客户端请求参数?常用方法有哪些?通过HttpServletRequest对象获取请求参数,核心常用方法:1)getParameter(Stringname):获取单个参数值,返回字符串,适用于普通单个参数。2)getParameterValues(Stringname):获取一组参数值,返回字符串数组,适用于复选框、多选下拉框等多值参数。3)getParameterMap():获取所有参数的Map集合,key为参数名,value为参数数组,适合批量获取参数。9.Servlet请求乱码如何解决?乱码核心原因:客户端编码格式和服务器解码格式不一致,统一为UTF-8即可解决。1.POST请求乱码在获取所有参数前,添加代码:request.setCharacterEncoding("UTF-8");该方法用于设置请求体解码格式,专门解决POST乱码。2.GET请求乱码方式一:手动转码newString(param.getBytes("ISO-8859-1"),"UTF-8");方式二:修改Tomcat配置文件server.xml,在Connector标签添加URIEncoding="UTF-8",全局解决GET乱码。3.响应乱码设置响应编码和页面解析编码:response.setContentType("text/html;charset=UTF-8");四、Servlet会话与跳转10.forward和redirect的区别?(重点)forward是服务器内部转发,redirect是客户端重定向,核心区别如下:1)跳转主体:转发是服务器内部完成跳转,浏览器无感知;重定向是服务器返回302状态码,浏览器重新发起新请求。2)地址栏变化:转发地址栏URL不变;重定向地址栏会更新为新地址。3)请求域数据:转发是一次请求,request域数据可以共享;重定向是两次独立请求,request域数据会丢失。4)跳转范围:转发只能跳转当前项目内资源;重定向可以跳转外部网站、跨项目资源。5)请求次数:转发1次请求;重定向2次请求。11.Servlet三大域对象是什么?作用域区别?Servlet三大域对象用于存储数据、实现数据共享,分别是:request、session、servletContext。1)HttpServletRequest(请求域)作用范围:仅一次请求有效,请求结束、页面跳转后数据失效。适用于单次请求的临时数据传递。2)HttpSession(会话域)作用范围:一次浏览器会话有效,同一个用户多次请求共享数据,浏览器关闭或会话超时后数据失效。适用于存储用户登录信息、购物车等用户专属数据。3)ServletContext(应用域)作用范围:整个web项目全局有效,所有用户、所有请求共享,服务器启动创建,服务器关闭销毁。适用于存储项目全局配置、全局统计数据。12.Session的工作原理?Session和Cookie的区别?Session工作原理:服务器为每个首次访问的用户创建唯一Session对象,生成唯一JSESSIONID,通过Cookie发送到浏览器保存。用户后续请求时,浏览器携带JSESSIONID,服务器根据ID匹配对应的Session,实现会话识别。Session和Cookie区别:1)存储位置:Cookie存储在客户端浏览器;Session存储在服务器端。2)安全性:Cookie数据本地可见、可篡改,安全性低;Session数据在服务端,安全性高。3)存储容量:Cookie有大小和数量限制;Session无严格容量限制。4)生命周期:Cookie可设置永久有效期;Session默认超时失效,浏览器关闭后失效。5)依赖关系:Session默认依赖Cookie,禁用Cookie后可通过URL重写实现Session追踪。五、Servlet配置与进阶问题13.Servlet的两种配置方式?1)web.xml配置(传统方式)在web.xml中通过<servlet>标签注册Servlet,指定类路径,通过<servlet-mapping>配置访问路径,适合低版本JavaEE。2)注解配置(主流方式)Servlet3.0及以上支持,直接在自定义Servlet类上添加@WebServlet("/访问路径")注解,无需配置xml,开发更简洁。14.load-on-startup的作用?load-on-startup是Servlet的启动加载参数,取值为整数。1)默认值为负数:Servlet在第一次请求时才创建实例、初始化。2)正数(0、1、2...):服务器启动时就创建Servlet实例并执行init()初始化方法,数值越小优先级越高,越先加载。适用场景:需要项目启动时提前加载资源、初始化配置的Servlet。15.什么是Servlet过滤器?作用是什么?Filter(过滤器)是JavaEE的核心组件,运行在服务器端,可拦截所有web请求(Servlet、静态资源),在请求到达目标资源之前、响应返回客户端之前做预处理和后处理。核心作用:统一处理编码、拦截未登录请求、过滤非法请求、统一权限校验、日志记录等,实现代码解耦,统一全局逻辑。过滤器生命周期:服务器启动初始化,常驻内存,项目关闭销毁,可拦截多次请求。16.Servlet的异常处理方式有哪些?1)代码手动try-catch捕获异常,自定义异常提示信息,响应给前端。2)在web.xml中配置全局异常页面,通过<error>绑定状态码或异常类型,统一跳转错误页面。3)自定义全局异常处理器,统一拦截项目所有异常,规范异常返回格式。六、实战高频面试题17.为什么不建议在Servlet中写业务代码?Servlet的核心职责是接收请求、参数校验、调度业务、响应结果,不适合写具体业务逻辑。1)不符合MVC分层思想,代码耦合度高,业务代码和请求处理代码混在一起,难以维护。2)Servlet单例多线程,业务代码写在其中容易引发线程安全问题。3)业务代码无法复用,只能通过请求触发,不方便单元测试。正确做法:Servlet只做控制器,业务逻辑抽取到Service层,数据操作交给Dao层。18.如何实现Servlet文件上传?原生Servlet3.0及以上支持文件上传,无需引入第三方jar包,核心步骤:1)在Servlet上添加注解@MultipartConfig,开启文件上传功能;2)前端表单设置enctype="multipart/form-data",提交方式为POST;3)后端通过request.getPart()获取上传文件对象;4)通过Part对象的write()方法,将文件写入服务器本地路径。实际开发中大多使用commons-fileupload工具类,简化上传代码。19.Session失效的场景有哪些?1)浏览器主动关闭,再次打开浏览器访问项目,会生成新Session;2)Session超时,默认Tomcat超时时间30分钟,无操作自动失效;3)代码手动调用session.invalidate()手动销毁会话;4)服务器重启、项目卸载,内存中的Session数据清空;5)客户端手动清空浏览器Cookie,JSESSIONID丢失导致Session无法匹配。20.简单说下Servlet的执行流程?1)客户端浏览器发起HTTP请求,携带URL地址访问服务器;2)Tomcat服务器接收请求,解析URL,匹配对应的S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加班申请审批流程指南函5篇
- (2026)新版现代企业管理试题库及答案
- 2026年理论考试无人机操作员考试题库及答案含答案
- 客户订单异常处理指示函(8篇)
- 2026年安全攻防面试题及答案
- 催办2026年全年销售任务完成情况的汇报函3篇
- 绥化市2026年海港引航员适任考试(船舶避碰)复习题及答案
- 2026年银行业务笔试模拟题与标准答案
- 技术合作协议缔结通知8篇
- 城市轨道交通行车值班员理论考试题库及答案
- 2026年沈阳鼓风机集团股份有限公司人员招聘笔试参考题库及详细答案解析
- 防止返贫动态监测帮扶培训
- (2.1)-第二章 绦虫的结构预防兽医学实验
- 2026秋新教材人教版六年级上册美术全册教案
- 2026年秋季小学道德与法治三年级上册(新教材)教学计划含教学进度表
- 2026年秋季学期人教版(新教材)初中生物学八年级上册教学计划及进度表
- 《自我保护免受伤害》教学课件 - 2026-2027 学年统编版(新教材)小学道德与法治四年级上册
- 2027年法律硕士(非法学)专业课模拟卷(两套含解析)
- (2026年)急性胰腺炎急诊诊断及治疗专家共识课件
- 2025年甘肃公务员考试《申论》试题(县乡卷)及答案
- 餐饮行业数据统计分析
评论
0/150
提交评论