简述ServletContext生命周期ServletContext 代表整个 Web 应用的环境对象它的生命周期和Web 应用完全一致创建Web 应用启动时服务器启动 / 项目部署服务器自动创建 ServletContext 对象全局唯一。存活整个 Web 应用运行期间该对象一直存在所有 Servlet 共享使用。销毁Web 应用关闭时服务器关闭 / 项目卸载服务器销毁 ServletContext 对象释放资源。转发与重定向的比较本质区别转发request.getRequestDispatcher(地址).forward(request,response);服务器内部跳转一次请求重定向response.sendRedirect(地址);告诉浏览器重新发请求两次请求2. 地址栏转发地址栏不变重定向地址栏变成目标地址3. 数据共享转发可以共享request 域数据重定向不共享 request 数据4. 跳转范围转发只能跳转到本项目内部资源重定向可以跳转到外部网站5. 效率转发效率高重定向效率低session的原理客户端第一次请求服务器时服务器创建Session 对象并生成唯一的JSESSIONID。服务器以Cookie 形式把 JSESSIONID 发给浏览器保存。后续每次请求浏览器都会自动携带这个 JSESSIONID。服务器根据 JSESSIONID 找到对应的 Session实现会话状态保持。Session 保存在服务器端安全JSESSIONID 存在客户端浏览器。Cookie 与 Session 的区别存储位置不同Cookie 存放在客户端浏览器Session 存放在服务器端安全性不同Cookie 不安全容易被查看、篡改Session 更安全数据在服务器存储大小不同Cookie 大小有限制一般几 KBSession 存储容量更大存储类型不同Cookie 只能存字符串Session 可以存对象生命周期Cookie 可长期保存设置过期时间Session 默认会话结束关闭浏览器失效也可设置超时时间服务器压力Cookie 不占服务器资源Session 过多会占用服务器资源JSP和Servlet是什么关系本质关系JSP 本质上就是Servlet是 Servlet 的一种特殊形式。运行原理浏览器访问 JSP → 服务器先把 JSP翻译成 Java 源码再编译成class 文件最终运行的还是一个Servlet3.分工不同Servlet擅长处理逻辑、控制流程后台JSP擅长页面展示、输出 HTML前端JSP的九大隐式对象是哪九个对象名类型作用requestHttpServletRequest请求对象获取客户端请求信息参数、头信息等。responseHttpServletResponse响应对象设置响应内容、头信息、重定向等。sessionHttpSession会话对象存储与用户会话相关的数据生命周期关联浏览器会话。applicationServletContext应用对象代表整个 Web 应用全局唯一用于存储应用级数据。对象名类型作用outJspWriter输出对象用于向客户端输出内容相当于response.getWriter()。pageContextPageContext页面上下文对象获取页面所有属性、请求 / 会话 / 应用域对象管理页面资源。对象名类型作用exceptionThrowable异常对象仅在错误页面isErrorPagetrue中可用存储异常信息。pageObject页面对象代表当前 JSP 页面本身等价于this关键字很少使用。configServletConfig配置对象获取当前 JSP/Servlet 的初始化配置信息。如何防止SQL注入攻击使用预编译语句PreparedStatement这是最核心、最有效的方案。通过占位符?传递参数SQL 结构与参数分离从根本上杜绝注入。使用 MyBatis/Hibernate 等 ORM 框架框架底层自动使用预编译只需使用#{}而非${}。#{}预编译安全${}字符串拼接有注入风险对用户输入进行校验过滤过滤or、and、union、select、delete、--等敏感关键字。权限最小化数据库账号只赋予必要权限不授予删表、删库等高风险权限。避免拼接 SQL 语句严禁直接用字符串拼接方式把用户输入拼进 SQL。