资讯中心

《Java 100 天进阶之路》第72篇:JavaWeb面试高频题(2026版)

📅 2026/8/9 22:00:07
《Java 100 天进阶之路》第72篇:JavaWeb面试高频题(2026版)
第72篇JavaWeb面试高频题2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第71篇HTTP协议详解 |➡️ 下一篇第73篇Spring IoC容器待发布️ 本文阅读地图3 分钟速览第68~71篇搞定了Servlet、JSP/EL、Cookie/Session、HTTP协议本篇是JavaWeb专题的收官之作——把专题中所有高频面试考点集中梳理形成一份完整的面试突击清单模块核心问题一句话回答转发 vs 重定向两者有什么区别转发是服务器内部行为1次请求重定向是客户端行为2次请求getParameter vs getAttribute两个方法怎么选getParameter拿客户端参数StringgetAttribute拿服务端属性ObjectFilter vs Interceptor过滤器和拦截器有什么区别Filter是Servlet规范回调函数Interceptor是Spring特有反射/AOPServlet生命周期Servlet从生到死经历什么加载→实例化→初始化init→服务service→销毁destroyJSP vs Servlet两者什么关系JSP本质就是ServletJSP侧重视图Servlet侧重控制逻辑JSP九大内置对象有哪些可以直接用request/response/out/session/application/pageContext/config/page/exceptionJSP四大作用域数据存在哪里page request session application跨域是什么怎么解决前后端分离必考题浏览器同源策略限制主流方案CORSWeb安全常见攻击与防护XSS、CSRF、SQL注入三大威胁一、核心知识点1. JavaWeb面试考什么JavaWeb是Java后端开发的地基。无论你用Spring Boot还是微服务底层都跑在Servlet容器上都基于HTTP协议通信。面试官考JavaWeb本质是在考三件事你懂不懂底层原理——Servlet怎么工作的HTTP请求怎么处理的你清不清楚关键区别——转发和重定向什么区别Filter和Interceptor什么区别你有没有踩坑经验——Session共享怎么解决跨域怎么处理面试真相面试官问JavaWeb不是为了考你背八股文而是想确认——你写的代码出了问题能不能快速定位到是Web层的哪个环节出了问题。2. 高频考点全景图二、通俗讲解1分钟开心学把JavaWeb面试想象成餐厅后厨面试HTTP协议你和顾客之间的对话规则——说什么、怎么说Servlet后厨的总厨——接单、分配任务、出菜Filter过滤器后厨门口的安检员——所有进后厨的都要过一遍编码、日志、权限Interceptor拦截器灶台前的质检员——只检查要下锅的菜Controller层的请求转发Forward总厨内部派活——“小王这个单你来做”URL不变重定向Redirect总厨让顾客去隔壁窗口——“这个窗口不做你去隔壁”URL变了Cookie顾客手里的取餐号小票Session后厨的订单记录本——按取餐号查订单详情三、核心对比题面试必考3.1 转发Forwardvs 重定向Redirect这是JavaWeb面试中出现频率最高的对比题之一。对比维度转发Forward重定向Redirect本质服务器内部行为客户端行为请求次数1次请求2次请求URL变化不变改变数据共享共享同一个request不共享两次请求不同request速度更快较慢使用场景转发到JSP展示数据登录后跳转、表单提交后重定向代码示例// 转发Forward—— 服务器内部跳转request.getRequestDispatcher(/success.jsp).forward(request,response);// 重定向Redirect—— 客户端跳转response.sendRedirect(/login.jsp);记忆口诀转发是内部调岗URL不变、1次请求、数据共享重定向是顾客去隔壁窗口URL变了、2次请求、数据不共享。3.2 getParameter() vs getAttribute()这是笔试题常客两个方法都在HttpServletRequest上但用途完全不同。对比维度getParameter()getAttribute()数据来源客户端POST/GET传递的参数服务端通过setAttribute设置的属性返回值类型StringObject是否需要先set不需要直接拿客户端传过来的需要必须先setAttribute再get有无set方法无setParameter()方法有setAttribute()方法典型场景获取表单提交的数据、URL参数Servlet向JSP传递数据代码示例// getParameter —— 拿客户端传过来的参数Stringusernamerequest.getParameter(username);// 从 ?usernamezhangsan 获取// getAttribute —— 拿服务端存进去的数据request.setAttribute(user,user);// 先存Useruser(User)request.getAttribute(user);// 再取记忆口诀Parameter是顾客递进来的StringAttribute是后厨自己存的Object。3.3 Filter过滤器vs Interceptor拦截器这是区分Servlet容器和Spring框架理解深度的关键题。对比维度Filter过滤器Interceptor拦截器技术归属Servlet规范Java EE/Jakarta EESpring MVC框架特有实现原理基于函数回调回调机制基于Java反射机制AOP动态代理是否依赖容器依赖Servlet容器Tomcat等不依赖Servlet容器作用范围几乎所有的请求包括静态资源只对Controller的请求起作用执行时机Servlet容器层面先于Interceptor执行Spring MVC层面在Filter之后执行核心方法doFilter()preHandle()/postHandle()/afterCompletion()执行顺序图请求 → Filter.doFilter() → Interceptor.preHandle() → Controller ↓ 响应 ← Filter.doFilter() ← Interceptor.afterCompletion() ← 视图渲染 ↑ Interceptor.postHandle()视图渲染前记忆口诀Filter是门卫所有请求都要过Interceptor是专检只查Controller的请求。3.4 JSP vs Servlet对比维度ServletJSP本质Java类本质上就是Servlet被翻译成Servlet代码形式纯Java代码HTML Java混合MVC角色Controller控制器View视图适合场景业务逻辑处理页面展示四、高频独立题4.1 Servlet生命周期Servlet有良好的生存期定义包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由init()、service()、destroy()三个方法表达。五个阶段阶段方法执行次数说明① 加载与实例化构造函数1次容器加载Servlet类创建实例② 初始化init()1次初始化准备工作③ 服务service()多次处理客户端请求根据请求方法调用doGet/doPost④ 销毁destroy()1次容器关闭时释放资源实例化时机Servlet默认是懒加载——第一次访问时才实例化。如果在web.xml中配置了load-on-startup正数则在容器启动时实例化。4.2 JSP九大内置对象JSP在被翻译成Servlet时容器自动创建了9个内置对象开发者可以直接使用对象名类型作用requestHttpServletRequest封装客户端请求responseHttpServletResponse封装服务器响应outJspWriter输出响应内容sessionHttpSession用户会话数据applicationServletContext全局应用数据pageContextPageContext获取其他对象、操作域configServletConfigServlet配置信息pageObject当前JSP页面本身相当于thisexceptionThrowable异常信息仅错误页面可用4.3 JSP四大作用域数据存储的四个抽屉范围从小到大作用域对象生命周期使用场景pagepageContext当前页面页面内临时数据requestrequest一次请求请求间传递数据sessionsession一次会话用户登录状态、购物车applicationapplication整个应用全局配置、统计数据查找顺序page → request → session → application从小到大。4.4 跨域问题与解决方案什么是跨域浏览器同源策略限制——协议、域名、端口任意一个不同就是跨域浏览器会拦截前端异步请求。主流解决方案方案说明推荐度CORS跨域资源共享后端配置响应头允许指定来源访问⭐⭐⭐⭐⭐ 首选网关统一跨域在网关层统一配置CORS⭐⭐⭐⭐前端代理开发环境用Webpack代理转发⭐⭐⭐JSONP仅支持GET请求已过时⭐Spring Boot中配置CORSConfigurationpublicclassCorsConfig{BeanpublicWebMvcConfigurercorsConfigurer(){returnnewWebMvcConfigurer(){OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry.addMapping(/**).allowedOrigins(https://example.com).allowedMethods(GET,POST,PUT,DELETE).allowCredentials(true);}};}}4.5 Web安全三大威胁攻击类型原理防护措施XSS跨站脚本攻击注入恶意JavaScript脚本输入过滤、输出转义、CSP防护CSRF跨站请求伪造伪造用户请求Token校验、Referer校验SQL注入拼接恶意SQL语句预编译SQLPreparedStatement、参数绑定防SQL注入铁律永远不要用字符串拼接的方式写SQL永远使用PreparedStatement。五、避坑要点错误/误区后果正确做法用重定向传递数据数据丢失两次请求request不同用转发共享数据或用Session/URL参数混淆getParameter和getAttribute取不到值或类型转换异常客户端参数用getParameter服务端属性用getAttribute认为Filter和Interceptor可以互换功能范围错配全局通用逻辑用FilterController专属用Interceptor生产环境不配置CORS前端无法调用接口正确配置CORS允许指定来源忽略SQL注入风险数据库被拖库永远用PreparedStatement分布式部署仍用内存Session用户频繁被登出改用Spring Session Redis六、面试高频考点20问速查编号面试题核心答案关键词详见1HTTP和HTTPS的区别明文 vs 加密、80 vs 443、无证书 vs 有证书第71篇2GET和POST的区别参数在URL vs Body、有大小限制 vs 无限制第71篇3转发Forward和重定向Redirect的区别1次请求 vs 2次、URL不变 vs 变、数据共享 vs 不共享本文4getParameter()和getAttribute()的区别String vs Object、客户端 vs 服务端本文5Filter和Interceptor的区别Servlet规范 vs Spring、回调 vs 反射/AOP本文6Servlet的生命周期加载→实例化→init→service→destroy本文7JSP的本质是什么本质上就是Servlet第69篇8JSP的九大内置对象有哪些request/response/out/session/application/pageContext/config/page/exception第69篇9JSP的四大作用域page request session application第69篇10Cookie和Session的区别客户端 vs 服务端、不安全 vs 安全第70篇11禁用Cookie后Session还能用吗能URL重写第70篇12分布式Session怎么解决Spring Session Redis第70篇13JWT和Session怎么选需要踢人下线用Session不需要主动作废用JWT第70篇14什么是跨域怎么解决同源策略限制、CORS是主流方案本文15XSS攻击是什么怎么防注入恶意脚本、输入过滤输出转义本文16CSRF攻击是什么怎么防伪造用户请求、Token校验本文17SQL注入怎么防PreparedStatement预编译本文18Tomcat是什么Web应用服务器第68篇19Tomcat如何创建Servlet实例反射机制实例化第68篇20什么是会话Session客户端与服务器的不中断请求响应序列第70篇 面试官追问陷阱加分题追问1“既然转发比重定向快为什么登录成功后不都用转发” 这是一个典型的陷阱题。转发虽然快但刷新页面会重复提交表单——用户登录后F5刷新转发会再次执行登录逻辑可能造成重复提交。重定向虽然慢一点但刷新页面只是重新请求跳转后的页面不会重复提交。这就是Post/Redirect/GetPRG模式——表单提交后用重定向避免重复提交。追问2“Filter能做的事Interceptor都能做吗”不能。Filter工作在Servlet容器层面能拦截所有请求包括静态资源如CSS、JS、图片。Interceptor只工作在Spring MVC层面只能拦截进入Controller的请求。如果需要做全局的字符编码过滤、跨域处理、静态资源访问控制必须用Filter。如果只需要在Controller方法前后做日志、权限校验用Interceptor更合适。追问3“getParameter()能拿到POST请求的JSON数据吗”不能。getParameter()只能获取application/x-www-form-urlencoded格式的参数表单提交和URL参数。如果POST请求的Content-Type是application/json需要用RequestBody或通过request.getInputStream()手动读取。这是很多初学者容易踩的坑。七、练习题简答题转发Forward和重定向Redirect在请求次数、URL变化、数据共享三个方面有什么区别代码题写一个Filter实现所有请求的字符编码统一为UTF-8。分析题用户登录成功后跳转到首页刷新页面发现重复提交警告。请分析原因并给出解决方案。 你的学习进度当前第72篇 / 共108篇 ·进阶篇JavaWeb核心技术第68~72篇✅ 专题收官✅ 已完成基础篇44篇 第45~72篇 正在学第72篇⏳ 待学习第73~108篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第73篇Spring IoC容器》内容简介Spring框架核心——IoC控制反转与DI依赖注入、BeanFactoryvsApplicationContext、容器启动流程、Configuration与Bean原理。Spring全家桶专题正式开启从IoC开始拿下Spring《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送