Java工程师面试Web篇(二)
Java Web 面试常把 JSP / Servlet / Session / 过滤器 / 监听器 串成一条线:浏览器请求怎么落到页面、九大内置对象各自管什么、转发和重定向差在哪。下面按这条线把图和要点摊开,JavaScript 总复习可另看 这篇总结。
这组笔记对应面试「Web 篇」:先看全景图,再逐块对照。
一、JSP 页面生命周期
用户访问 index.jsp 时,Tomcat 的 JSP 引擎先判断是不是第一次碰到这份资源。

-
第一次:JSP 转成 Servlet(本质是 Java 类)→ 编译成字节码 → 调 jspInit→ 再进jspService处理请求。 -
不是第一次:直接走已生成的字节码,同样进入 jspService。 -
jspService专门处理本次请求;页面销毁时才轮到jspDestroy。
二、JSP 九大内置对象

| 对象 | 类型 | 要点 |
|---|---|---|
| out | JspWriter |
向客户端写内容最常用的出口 |
| request | HttpServletRequest |
封装一次请求;请求结束前一直有效(请求域) |
| response | HttpServletResponse |
本次页面响应;页面作用域,这次访问有效 |
| session | HttpSession |
第一次访问自动创建;用来认出是不是同一个人 |
| application | ServletContext |
全局共享;服务器启动到关闭 |
request 常用方法
response 常用方法
转发 vs 重定向: 重定向是客户端行为,response.sendRedirect() 等于两次请求,上次 request 不保留,地址栏会变;转发是服务器行为,request.getRequestDispatcher().forward() 仍是一次请求,对象还在,地址栏不变。
什么是会话: 从打开浏览器连上服务器,到关掉浏览器结束,算一次会话。用户在多个页面间跳,服务端必须知道是不是同一个人,所以才有 session。
application 上的同一属性,不同用户、前后连接都能碰到;任何地方改它,都会影响到别人。
三、指令、动作与 Session 生命周期
三个编译指令:page、include、taglib。七个动作:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty。

include 指令 和 include 动作 的差别:

Session 的「活动」边界

-
同一次会话里,超链接打开的新页仍属这次会话。 -
当前会话页没全关时,再开窗口访问同一项目,还是同一次会话。 -
所有页都关了再访问 JSP/Servlet,会建新会话;旧 SessionId 可能还躺在服务端,只是再也没客户端带着它来校验。

四、过滤器与 Servlet 生命周期


Web 容器启动时过滤器就已经加载;实例化只发生一次,容器里这份过滤器实例复用。


-
先看 Servlet 实例在不在,在就直接响应。 -
初始化:创建实例后调 init。 -
响应:调 service(),再按提交方式走doGet/doPost。 -
终止:服务器关闭时调 destroy。

五、Web 监听器

监听器是 Servlet 规范里的特殊类,能听客户端请求和服务端操作,对象包括 ServletContext、HttpSession、ServletRequest。

三类域对象监听器
HttpSession 事件:

ServletContext 事件:

ServletRequest 事件:

三类分别实现图里 1..N 个接口,接口方法就是用途入口。
绑定到 Session 域的对象状态:

用户一多,把 session 全堆在内存里开销很大。钝化就是把暂时不用的 session 序列化到文件,要用时再反序列化回来。
六、Model1 与 Model2

Model1 是较早的分层:JSP + JavaBean。写起来快,可维护性和扩展性都一般。

-
JSP 向 Servlet 提交请求。 -
控制层实例化或调用模型层。 -
模型层访问数据库。 -
结果回到控制层。 -
控制层按结果挑不同 JSP 给用户看。
一句话总结:Web 面试把请求链路讲清楚:JSP 先编译再 service,九大对象分清作用域,转发一次请求、重定向两次,过滤器随容器起、Servlet 按 init/service/destroy 走,监听器盯三个域,Model2 用 Servlet 把视图和模型拆开。
转载请注明来源:Java工程师面试Web篇(二)








