
📃个人主页:编程的一拳超人
⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞
于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 ——《人民日报》
文章目录
第三章 框架篇
3.1 Struts1运行原理与核心组件
Struts1是早期MVC框架,基于Servlet API构建,核心流程围绕ActionServlet
和ActionForm
展开。
3.1.1 核心处理流程
- 请求分发:
- 所有请求由
ActionServlet
(前端控制器)接收,根据struts-config.xml
匹配ActionMapping
。
<!-- struts-config.xml配置示例 --> <action-mappings> <action path="/login" type="com.example.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/success.jsp" /> </action> </action-mappings>
- 所有请求由
- 表单验证:
- 使用
ActionForm
封装请求参数,重写validate()
方法进行校验。
public class LoginForm extends ActionForm { private String username; private String password; // getters/setters public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (username == null || username.length() < 3) { errors.add("username", new ActionMessage("error.username.required")); } return errors; } }
- 使用
3.1.2 局限性与演进
- 线程安全:
Action
为单例,依赖ActionForm
线程不安全,需避免实例变量。 - 与Struts2对比:Struts1依赖
ActionForm
,而Struts2支持POJO接收参数,更灵活。
3.2 Struts2运行原理与拦截器机制
Struts2基于WebWork重构,核心是拦截器链和OGNL表达式,支持POJO动作类。
3.2.1 拦截器链执行流程
- 请求拦截:
- 请求进入
StrutsPrepareAndExecuteFilter
,触发17个默认拦截器(如params
、validation
)。
<!-- struts.xml配置拦截器 --> <package name="default" extends="struts-default"> <action name="userAction" class="com.example.UserAction"> <interceptor-ref name="defaultStack" /> <result name="success">/user.jsp</result> </action> </package>
- 请求进入
- OGNL表达式:
- 访问请求参数:
user.name
,支持对象图导航。
// Action类 private User user; public String execute() { System.out.println("用户名:" + user.getName()); return SUCCESS; }
- 访问请求参数:
3.2.2 最新版本特性
- Struts 2.6+:支持HTTP/2,优化拦截器性能,增强安全性(防止OGNL注入攻击)。
3.3 Hibernate运行原理与持久化技术
Hibernate是ORM框架,将对象映射到数据库表,核心是会话管理和缓存机制。
3.3.1 核心接口与生命周期
- 五大核心接口:
Configuration
:加载配置(hibernate.cfg.xml
或注解),创建SessionFactory
。SessionFactory
:线程安全,创建Session
(相当于JDBC的Connection
)。Session
:非线程安全,提供get()
、load()
、save()
等CRUD方法。
// 注解配置示例 @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; }
3.3.2 缓存机制升级
- 二级缓存:
- 集成
Ehcache
或Hazelcast
,配置hibernate.cache.use_second_level_cache=true
。
<!-- ehcache.xml配置 --> <cache name="userCache" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="300" />
- 集成
- 查询缓存:缓存
Query.list()
结果,减少SQL执行。
3.4 Spring核心原理与依赖注入
Spring框架以IOC(控制反转)和AOP(面向切面)为核心,简化企业级开发。
3.4.1 IOC容器与依赖注入
- 注入方式:
- 构造器注入:适合必填依赖。
public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } }
- @Autowired注解:按类型注入,支持
@Qualifier
指定Bean。@Autowired @Qualifier("mysqlUserRepository") private UserRepository userRepository;
- 构造器注入:适合必填依赖。
3.4.2 AOP实战与表达式
- 切点表达式:
- 匹配所有Service类的方法:
execution(* com.example.service.*.*(..))
。
@Aspect public class LogAspect { @Around("execution(* com.example.service.*.*(..))") public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object result = joinPoint.proceed(); System.out.println("方法执行耗时:" + (System.currentTimeMillis() - start) + "ms"); return result; } }
- 匹配所有Service类的方法:
3.4.3 Spring Boot自动配置
- Starter依赖:
spring-boot-starter-web
自动配置Servlet、SpringMVC、Tomcat。spring-boot-starter-data-jpa
自动配置Hibernate和DataSource。
3.5 SpringMVC运行原理与RESTful支持
SpringMVC是Spring的MVC模块,支持RESTful API开发,核心是DispatcherServlet
和注解驱动。
3.5.1 请求处理流程
- 处理器映射:
@RequestMapping
、@GetMapping
等注解匹配请求路径。
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.getUserById(id); } }
- 数据绑定:
@RequestParam
获取查询参数,@RequestBody
解析请求体JSON。
3.5.2 响应式支持(Spring 5+)
- WebFlux:
- 响应式编程模型,支持Reactive Streams,适合高并发场景。
@GetMapping("/reactive-users") public Flux<User> getReactiveUsers() { return userRepository.findAll(); }
3.5.3 性能优化
- 视图渲染:
- 使用
@ResponseBody
返回JSON,避免JSP渲染开销。 - 集成Thymeleaf模板引擎,支持服务端渲染(SSR)。
- 使用
3.6 框架对比与选型建议
框架 | 优势 | 适用场景 | 最新版本特性 |
---|---|---|---|
Struts2 | 简单易用,标签库丰富 | 传统Web项目,表单驱动开发 | 2.6.23,增强安全防护 |
SpringMVC | 与Spring生态集成,RESTful友好 | 现代Web应用,微服务架构 | 6.0+,支持Kotlin和响应式 |
Hibernate | 全自动ORM,简化SQL编写 | 复杂数据模型,JPA标准兼容 | 6.2+,支持Panache Kotlin API |
MyBatis | 灵活控制SQL,性能优异 | 性能敏感项目,SQL优化需求高 | 3.5.10,支持动态SQL和插件 |
选型建议:
- 新项目优先选择Spring Boot + SpringMVC + MyBatis Plus,兼顾灵活性与开发效率。
- 复杂ORM场景使用Hibernate JPA,结合Spring Data JPA简化仓储层开发。
通过以上拓展,第三章详细解析了主流Java框架的核心原理、最新特性及实战应用,涵盖Struts、Hibernate、Spring全家桶的深度知识点,结合代码示例和选型建议,适合应对框架相关的面试问题和实际项目开发。