一、Servlet技术体系详解
1.1 Servlet容器与请求处理机制
Servlet作为Java Web的基石组件,运行在Servlet容器(如Tomcat、Jetty)中,通过生命周期管理实现请求响应。其核心流程包含:
- 初始化阶段:容器加载Servlet类并调用
init()方法,完成资源初始化 - 服务阶段:每个请求触发
service()方法,根据HTTP方法分发至doGet()/doPost()等 - 销毁阶段:容器关闭时调用
destroy()释放资源
public class DemoServlet extends HttpServlet {@Overridepublic void init() throws ServletException {// 数据库连接池初始化}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getWriter().write("Hello Servlet");}}
1.2 请求响应对象解析
-
HttpServletRequest:封装客户端请求信息,提供参数解析、头信息获取、会话管理等功能
String username = req.getParameter("user"); // 获取表单参数HttpSession session = req.getSession(); // 获取会话对象
-
HttpServletResponse:控制响应内容,支持重定向、状态码设置、内容类型定义
resp.setContentType("text/html;charset=UTF-8");resp.sendRedirect("/newPath"); // 302重定向
1.3 部署与配置管理
通过web.xml部署描述符实现Servlet映射:
<servlet><servlet-name>DemoServlet</servlet-name><servlet-class>com.example.DemoServlet</servlet-class></servlet><servlet-mapping><servlet-name>DemoServlet</servlet-name><url-pattern>/demo</url-pattern></servlet-mapping>
二、会话管理技术演进
2.1 无状态协议挑战
HTTP协议的无状态特性要求开发者自行实现会话跟踪,主流方案包括:
-
URL重写:在URL中附加会话ID(兼容无Cookie环境)
resp.encodeURL("/path?id=123"); // 自动添加jsessionid参数
-
隐藏域:通过HTML表单隐藏字段传递会话标识
<input type="hidden" name="sessionId" value="abc123">
2.2 Cookie机制深度解析
Cookie作为客户端存储方案,需注意:
- 安全属性:设置
Secure、HttpOnly、SameSite防范XSS攻击 - 生命周期控制:通过
setMaxAge()定义存活时间 - 域路径限制:
setDomain()和setPath()控制作用范围
Cookie cookie = new Cookie("theme", "dark");cookie.setHttpOnly(true);cookie.setMaxAge(3600); // 1小时resp.addCookie(cookie);
2.3 HttpSession高级应用
服务器端会话管理的核心接口,支持:
- 分布式会话:通过Redis等中间件实现集群环境共享
- 属性管理:存储用户登录状态等临时数据
- 失效策略:配置超时时间或手动失效
// 存储会话数据session.setAttribute("user", userObj);// 配置会话超时(web.xml)<session-config><session-timeout>30</session-timeout> <!-- 30分钟 --></session-config>
三、JSP动态页面技术
3.1 JSP运行原理
JSP本质是Servlet的语法糖,首次访问时经历:
- 翻译阶段:生成对应的
.java文件 - 编译阶段:编译为
.class字节码 - 执行阶段:由Servlet容器加载运行
3.2 脚本元素与表达式
- 脚本片段:
<% ... %>嵌入Java代码 - 表达式:
<%= expression %>输出计算结果 - 声明:
<%! ... %>定义成员变量/方法
<%-- 计算阶乘示例 --%><%!public int factorial(int n) {return n <= 1 ? 1 : n * factorial(n-1);}%><%int num = 5;int result = factorial(num);%><p>5! = <%= result %></p>
3.3 隐式对象与指令
九大隐式对象:
request/response:请求响应对象session:会话对象out:输出流对象pageContext:页面上下文(获取其他隐式对象)
核心指令:
<%@ page import="java.util.*" %> <%-- 导入类 --%><%@ include file="header.jsp" %> <%-- 静态包含 --%>
四、Spring MVC架构设计
4.1 核心组件协作流程
- DispatcherServlet:前端控制器,统一接收请求
- HandlerMapping:定位具体控制器方法
- Controller:处理业务逻辑,返回ModelAndView
- ViewResolver:解析视图名称
- View:渲染最终响应
4.2 注解驱动开发
@Controller@RequestMapping("/user")public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ModelAndView getUser(@PathVariable Long id) {User user = userService.findById(id);return new ModelAndView("user/detail", "user", user);}@PostMappingpublic String createUser(@ModelAttribute User user, BindingResult result) {if(result.hasErrors()) {return "user/form";}userService.save(user);return "redirect:/user/" + user.getId();}}
4.3 高级特性实现
- 数据绑定:自动将请求参数映射到对象属性
- 异常处理:
@ExceptionHandler统一处理控制器异常 - 拦截器:
HandlerInterceptor实现权限校验等横切关注点 - 文件上传:通过
MultipartFile处理多部分请求
五、技术选型建议
- 传统项目:Servlet+JSP适合轻量级应用,学习成本低
- 现代开发:Spring MVC提供更完善的MVC实现,推荐企业级应用
- 性能考量:异步Servlet(Servlet 3.0+)提升并发处理能力
- 安全实践:所有框架均需防范XSS、CSRF等常见漏洞
本指南通过理论解析与代码示例相结合的方式,系统梳理了Java Web开发的核心技术栈。开发者可根据项目需求选择合适的技术方案,建议从Servlet基础开始逐步深入,最终掌握Spring MVC等现代框架的高级特性。