Servlet 高频面试题及详细答案(实战版)_第1页
Servlet 高频面试题及详细答案(实战版)_第2页
Servlet 高频面试题及详细答案(实战版)_第3页
Servlet 高频面试题及详细答案(实战版)_第4页
Servlet 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Servlet高频面试题及详细答案(实战版)一、Servlet基础概念1.什么是Servlet?Servlet是运行在服务器端的Java小程序,属于JavaWeb的核心组件,主要用于接收客户端的HTTP请求,处理业务逻辑,并且响应结果给浏览器。它是一套规范接口,由服务器(Tomcat、Jetty)负责实例化、调用和管理,开发者只需要实现对应接口、重写业务方法,就能完成web请求处理,不用自己搭建网络服务、监听端口等底层操作。2.Servlet的作用是什么?1.接收浏览器发送的HTTP请求,获取请求参数、请求头、请求方式等信息;2.处理后端业务逻辑,比如数据校验、调用Service、操作数据库;3.封装处理结果,通过响应对象返回数据、页面、跳转指令给客户端;4.实现请求转发、重定向、会话管理、权限拦截等Web基础功能。3.Servlet和普通Java类的区别?1.普通Java类需要手动main方法启动,Servlet由服务器自动创建和调用;2.普通类没有Web相关能力,Servlet内置请求、响应、会话等Web对象;3.普通类每次调用都会新建对象,Servlet默认单例,全局只创建一个实例;4.普通类无生命周期,Servlet拥有完整的初始化、服务、销毁生命周期。二、Servlet生命周期(高频必考)4.简述Servlet的完整生命周期?Servlet生命周期分为四个阶段,全程由Tomcat服务器管理:1.加载阶段:服务器启动或首次访问Servlet时,Tomcat读取web.xml或注解配置,加载Servlet字节码文件。2.初始化阶段(init()):Servlet被实例化后,仅执行一次init()方法,主要用于初始化配置、加载静态资源、创建连接池等全局操作。3.服务阶段(service()):客户端每发送一次请求,服务器都会调用service()方法。该方法会根据请求方式,自动分发doGet()、doPost()、doPut()等方法处理请求,是核心业务执行阶段,可执行多次。4.销毁阶段(destroy()):服务器关闭、项目卸载或Servlet超时销毁时,仅执行一次destroy()方法,用于释放资源、关闭连接、清理缓存等收尾操作。5.init()、service()、destroy()方法的执行次数?init():只执行一次,Servlet首次加载初始化时执行;service():执行多次,每一次客户端请求都会触发;destroy():只执行一次,Servlet销毁前执行。6.Servlet是单例还是多例?有什么线程安全问题?Servlet默认单例,整个Web项目中一个Servlet类只会创建一个对象,所有客户端请求共用这一个实例。线程安全问题:多用户并发访问时,多个线程会同时操作Servlet的全局成员变量,会出现数据覆盖、数据错乱的问题。解决方案:1.不在Servlet中定义可修改的全局成员变量;2.把变量定义在doGet/doPost方法内部,局部变量每个线程独立,互不干扰;3.必要时使用同步代码块,尽量缩小同步范围,避免影响并发性能。三、请求与响应核心对象7.HttpServletRequest和HttpServletResponse的作用?HttpServletRequest(请求对象):封装了客户端的所有请求信息,由服务器创建,传入Servlet方法中。可以获取请求参数、请求头、请求方式、客户端地址、Cookie、会话等信息,也能实现请求转发。HttpServletResponse(响应对象):封装服务端要返回给客户端的响应数据。可以设置响应头、响应状态码、响应编码、输出页面数据、实现重定向、添加Cookie等。8.get和post请求的区别?1.参数位置:GET参数拼接在URL地址栏中,POST参数放在请求体中;2.数据长度:GET受URL长度限制,无法传输大量数据;POST无长度限制,适合上传文件、提交表单;3.安全性:GET参数暴露在地址栏和历史记录中,安全性低;POST参数隐藏在请求体,相对安全;4.缓存特性:GET请求默认会被浏览器缓存,可被书签保存;POST不会缓存,无法保存书签;5.幂等性:GET是幂等请求,多次请求结果一致;POST非幂等,多次提交可能产生重复数据(如重复下单)。9.Servlet如何解决GET、POST请求乱码问题?POST乱码解决:在获取请求参数前,设置请求体编码格式,统一为UTF-8:request.setCharacterEncoding("UTF-8");GET乱码解决:1.代码层面:对获取的参数进行编码转换,newString(param.getBytes("ISO-8859-1"),"UTF-8");2.服务器配置:修改Tomcatserver.xml配置,添加URIEncoding="UTF-8",统一地址栏编码。响应乱码解决:设置响应编码和页面解析编码:response.setContentType("text/html;charset=UTF-8");四、转发与重定向(重中之重)10.请求转发(forward)和重定向(redirect)的区别?1.实现主体不同转发:服务器内部跳转,由Tomcat直接控制页面跳转,浏览器无感知;重定向:服务器返回302状态码,通知浏览器重新发起新请求,跳转由浏览器完成。2.地址栏变化转发:地址栏URL不变,保留原请求地址;重定向:地址栏更新为跳转后的新地址。3.请求次数转发:一次请求、一次响应;重定向:两次请求、两次响应。4.数据共享转发:属于同一个请求,request域数据可以共享;重定向:两次独立请求,原request数据全部失效,无法共享。5.跳转范围转发:只能跳转当前项目内的资源;重定向:可以跳转本项目、外网、其他网站任意资源。11.什么场景用转发?什么场景用重定向?用转发:需要携带请求数据、页面地址需要隐藏、访问项目内部页面、查询类业务。用重定向:表单提交增删改操作,防止用户刷新页面重复提交;需要跳转到外部链接;需要更新浏览器地址栏。五、Servlet三大域对象12.Servlet有哪些域对象?作用范围和生命周期?1.request域(请求域)范围:单次请求有效,请求结束数据销毁;场景:页面跳转传参、单次请求数据传递。2.session域(会话域)范围:单次用户会话有效,浏览器不关闭、会话未超时,数据一直存在;默认超时时间30分钟;场景:保存用户登录状态、购物车、用户临时数据。3.application域(全局域)范围:整个Web项目全局有效,服务器启动创建,服务器关闭销毁,所有用户共享;场景:保存项目全局配置、网站访问量、全局统计数据。13.session的工作原理?用户第一次访问服务器时,服务器会创建一个专属的Session对象,生成唯一的SessionID,并且通过Cookie发送给浏览器保存。后续用户每次访问时,浏览器都会携带该SessionID,服务器根据ID匹配对应的Session,从而识别同一用户,维持会话状态。如果浏览器禁用Cookie,可通过URL重写的方式传递SessionID,保证会话正常使用。14.Session失效的场景有哪些?1.浏览器关闭,本地保存的SessionID丢失,下次访问重新创建会话;2.会话超时,超过服务器默认闲置时间,自动销毁Session;3.主动调用session.invalidate()方法手动销毁会话(退出登录常用);4.服务器重启或项目重新部署,内存中的Session数据清空。六、Filter过滤器(Servlet核心组件)15.什么是Filter?作用和执行流程?Filter是Web过滤器,运行在服务器端,可拦截所有请求资源(Servlet、JSP、静态资源),是Servlet规范的重要组件。核心作用:统一权限校验、登录拦截、全局编码过滤、敏感词过滤、请求日志记录、跨域处理。执行流程:客户端请求→过滤器拦截→预处理请求/响应→放行访问目标资源→资源执行完毕→过滤器后置处理→响应返回浏览器。16.Filter的生命周期?1.init():服务器启动时执行一次,初始化过滤器配置;2.doFilter():每次请求匹配拦截规则都会执行,核心拦截逻辑,放行后访问目标资源;3.destroy():项目卸载或服务器关闭时执行一次,释放资源。七、Servlet常见实操问题17.为什么重写Servlet优先重写doGet/doPost,而不重写service?父类HttpServlet的service()方法已经完成了请求方式的分发逻辑,会自动根据GET/POST调用对应方法。如果重写service(),会覆盖父类的分发逻辑,导致doGet、doPost无法执行,需要自己判断请求方式,冗余且容易出错。所以开发中只需要重写对应请求方式的业务方法即可。18.Servlet什么时候初始化?如何设置启动时初始化?默认情况下,Servlet在第一次被访问时初始化。如果需要服务器启动就初始化,可以配置load-on-startup参数:数值越小,初始化优先级越高。注解方式:@WebServlet(loadOnStartup=1)xml方式:配置<load-on-startup>1</load-on-startup>19.Cookie和Session的区别?1.存储位置:Cookie保存在客户端浏览器,Session保存在服务端内存;2.安全性:Cookie可被篡改、窃取,安全性差;Session服务端存储,安全性更高;3.存储大小:Cookie有大小和数量限制,只能存少量字符串;Session无严格大小限制;4.生命周期:Cookie可设置持久化时间,浏览器关闭可保留;Session默认浏览器关闭失效;5.依赖关系:Session依赖Cookie保存SessionID,Cookie不依赖Session。20.简述Servlet的执行完整流程?1.客户端浏览器发送HTTP请求,携带URL、请求参数、请求头信息;2.请求到达Tomcat服务器,服务器解析U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论