JSP面试关键知识点解析:包括Servlet、Session与Cookie

需积分: 0 3 下载量 89 浏览量 更新于2024-09-21 收藏 61KB DOC 举报
"这篇关于jsp面试的知识点涵盖了多个核心概念,包括静态include与动态include、cookie与session的区别、servlet生命周期以及forward与sendRedirect的区别。此外,还提及了符合J2EE标准的web-app目录结构、HTTP表单提交、web.xml配置、URL编码以及解决乱码问题的方法,以及Cookie和session的特性比较。" 在JSP面试中,面试官可能会关注以下几个方面: 1. **静态Include与动态Include的区别**: - 静态Include(`<jsp:include page="...">`):在编译时就将被包含页面的内容插入到主页面中,生成一个单独的Servlet类,适合包含静态内容,如头部、底部等。 - 动态Include(`<jsp:include>`与`<jsp:forward>`):在运行时动态地将被包含页面的内容插入,每次请求都会执行被包含页面的代码,适合包含动态内容。 2. **Cookie与Session的区别**: - Cookie:存储在客户端浏览器,用于跟踪用户状态,大小有限制(通常4KB),且可能被禁用或清除。 - Session:存储在服务器端,安全但占用服务器资源,每个用户会话对应一个session,可以通过sessionID追踪用户,有超时机制。 3. **Servlet生命周期**: - 创建:第一次请求时,容器创建Servlet实例并调用`init()`方法。 - 服务:每次请求,Servlet实例的`service()`方法被调用,它根据请求方法调用`doGet()`或`doPost()`。 - 销毁:应用关闭或容器清理时,调用`destroy()`方法。 4. **Forward与Redirect的区别**: - Forward(`RequestDispatcher.forward()`):内部跳转,浏览器地址栏不会改变,适合同一应用内的跳转,请求范围内的对象可以共享。 - Redirect(`Response.sendRedirect()`):外部跳转,浏览器重新发起请求,地址栏显示新URL,数据不能直接传递。 除此之外,面试中还会涉及web-app的标准目录结构,例如`WEB-INF`下包含`classes`(存放编译后的Java类)、`web.xml`(部署描述符)和`lib`(存放库文件)。 在处理HTTP表单提交时,`form`的`action`属性可以是相对路径或绝对路径,`/`通常代表应用的根路径。对于乱码问题,需要在响应头设置正确的字符集,如在Servlet中使用`response.setContentType("text/html;charset=gbk")`或在JSP页面中使用`<%@page contentType="text/html;charset=gb2312"%>`。 解决不同场景下的乱码问题,例如GET请求、POST请求、URL参数包含中文,可以通过设置服务器配置(如Tomcat的`URIEncoding`属性)或在代码中调用`request.setCharacterEncoding("GBK")`。 最后,对于Cookie和Session的特性比较: - Cookie存储在客户端,有生命周期,可以设置过期时间,但安全性较低。 - Session存储在服务器端,依赖于客户端的Cookie(通过sessionID识别),当Cookie禁用时,可通过URL重写维持Session,但会增加网络传输负担。