Java面试中的关键知识点涵盖了Web开发中的核心概念,尤其是关于请求处理、状态管理和安全性。以下是对这些知识点的详细解释:
1. **转发与重定向的区别**:
- **转发(Forward)**:发生在服务器端,一次HTTP请求就能完成,它将请求从一个Servlet传递到另一个Servlet或者JSP页面,浏览器的URL不会改变。转发在同一个应用内部进行,不能跨应用或服务器。
- **重定向(Redirect)**:实际上是两个HTTP请求,浏览器收到服务器的重定向响应后,会发起新的请求到指定URL,浏览器地址栏的URL会显示新的地址。重定向可以是跨应用、跨服务器的。
2. **状态管理**:
- **状态管理**是为了跟踪用户在Web应用中的行为,保持用户的会话状态。常见的方法有两种:**Cookie**和**Session**。
- **Cookie**:数据存储在客户端,每次请求时都会自动发送到服务器。通过`set-cookie`响应头设置,`cookie`请求头获取。限制包括大小(通常4KB)、数量以及安全问题。
- **Session**:数据存储在服务器端,通过一个唯一标识(sessionID)关联客户端。服务器通过检查请求头中的`JSESSIONID`来识别用户。Session适用于存储大量数据或需要长期保持的状态,但会增加服务器内存负担。
3. **代码解析**:
- `request.getCookies()`:获取当前请求携带的所有Cookie对象数组。
- `currCookie.getName()`:获取Cookie的名称。
- `currCookie.getValue()`:获取Cookie的值。这段代码用于遍历并打印所有请求中的Cookie。
4. **使用Session验证防止非法访问**:
- **Session验证**是防止未登录用户访问受保护页面的一种常见策略。
- **步骤1**:在用户成功登录后,将用户信息绑定到Session,如`session.setAttribute("user", user);`。
- **步骤2**:在受保护页面的Servlet或控制器中,检查Session中是否存在用户信息,如`Object obj = session.getAttribute("user");`,若不存在则重定向到登录页面。
- **步骤3**:在JSP页面中也可以直接使用Session,因为JSP页面默认被转换为Servlet,可以访问Session。
- **测试**:未登录用户尝试访问受保护页面会被重定向,登录后访问正常。即使关闭浏览器再打开,如果Session未过期,用户仍能访问,展示了Session在会话管理中的作用。
掌握这些基础概念对于Java Web开发者至关重要,它们涉及到Web应用的核心流程和安全机制。在面试中,能够深入理解并正确运用这些知识,可以展示出对Web开发的扎实基础和实践经验。