燕青老师笔记
### 知识点详解 #### 一、SpringMVC 基础知识 **1.1 什么是 SpringMVC?** SpringMVC 是 Spring 框架中的一个重要组成部分,它是一个实现了 MVC(Model-View-Controller)设计模式的轻量级 Web 框架。相比于传统的 Java Web 开发方式如 Servlet 或 JSP,SpringMVC 提供了更简洁高效的开发模式,降低了业务逻辑与 Web 层的耦合度。 **1.2 SpringMVC 框架原理** SpringMVC 的工作流程主要涉及到以下几个核心组件: - **前端控制器 DispatcherServlet**:它是整个 SpringMVC 的入口点,负责接收客户端发送过来的 HTTP 请求,并将请求分发给合适的 Handler 进行处理。 - **处理器映射器 HandlerMapping**:负责根据 URL 映射到具体的 Handler 上,即决定哪个具体的类或方法来处理这个请求。 - **处理器适配器 HandlerAdapter**:负责根据 Handler 的类型找到对应的适配器,即找到能够执行该 Handler 的适配器,通过适配器来执行相应的 Handler。 - **视图解析器 ViewResolver**:将 Controller 处理完后的视图名称解析为实际的 View,例如将逻辑视图名转换为实际的 JSP 页面路径。 #### 二、SpringMVC 入门程序 **2.1 入门程序的目标** 通过实现一个简单的 SpringMVC 应用程序,学习如何搭建基本的 SpringMVC 环境,并理解各个核心组件的工作原理。 **2.2 非注解的处理器映射器与适配器** - **非注解的处理器映射器**:在这种情况下,处理器映射器会根据配置文件中的映射关系来确定哪个处理器处理哪个请求。 - **非注解的处理器适配器**:通常会使用 SimpleControllerHandlerAdapter,它可以处理实现了 Controller 接口的处理器。 **2.3 注解的处理器映射器与适配器** - **注解的处理器映射器**:使用 @RequestMapping 注解可以指定处理器处理哪些 URL 请求。 - **注解的处理器适配器**:使用 RequestMappingHandlerAdapter 来处理带有 @RequestMapping 注解的方法。 **2.4 实现 Controller 接口** ```java public class ItemsController1 implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // 查询商品列表的业务逻辑 List<Item> itemList = new ArrayList<>(); itemList.add(new Item("商品1", "描述1", 100)); itemList.add(new Item("商品2", "描述2", 200)); // 创建 Model 对象 Model model = new Model(); model.addAttribute("itemList", itemList); // 返回 Model 和 View return new ModelAndView("itemList", model); } } ``` #### 三、SpringMVC 与 MyBatis 整合 **3.1 整合步骤** 1. **引入依赖**:在项目中引入 SpringMVC 和 MyBatis 的相关依赖。 2. **配置数据库连接**:配置数据源以及事务管理器等。 3. **创建 DAO 层**:使用 MyBatis 的映射文件或注解方式实现数据访问层。 4. **编写 Service 层**:在 Service 层调用 DAO 层进行数据操作。 5. **编写 Controller 层**:在 Controller 层调用 Service 层提供的方法,并返回相应的视图。 #### 四、SpringMVC 注解开发 **4.1 常用注解** - **@Controller**:标记当前类为控制器类。 - **@RequestMapping**:用于类或方法级别,表示该方法可以处理哪些 URL 请求。 - **@PathVariable**:用于从 URL 中获取动态参数。 - **@RequestParam**:用于从请求参数中获取数据。 - **@ModelAttribute**:用于将对象绑定到模型中。 - **@SessionAttributes**:用于将模型中的属性保存在 Session 中。 **4.2 参数绑定** - **简单类型**:可以直接通过方法参数获取。 - **POJO 类型**:可以通过方法参数直接接收 POJO 对象。 - **集合类型**:可以绑定到方法的集合参数上。 **4.3 自定义参数绑定** 自定义参数绑定允许开发者根据自己的需求自定义参数的绑定过程,例如可以实现自己的 @CustomParam 注解,然后通过 HandlerAdapter 执行相应的处理逻辑。 #### 五、SpringMVC 与 Struts2 区别 **5.1 架构差异** - **SpringMVC**:基于前端控制器的设计,所有的请求都通过 DispatcherServlet 进行统一处理。 - **Struts2**:采用拦截器机制,所有的请求都通过 ActionServlet 进行处理,然后再通过拦截器链来决定具体的处理逻辑。 **5.2 使用场景** - **SpringMVC**:更适合于企业级应用开发,可以更好地与其他 Spring 组件集成。 - **Struts2**:在某些老项目中可能仍然在使用,但其社区活跃度已不如 SpringMVC。 #### 六、SpringMVC 的高级应用 **6.1 参数绑定** - **集合类型**:可以绑定 List、Map 等类型的参数。 - **数据回显**:将表单提交的数据自动填充回表单中。 - **上传图片**:利用 MultipartResolver 来处理文件上传。 **6.2 JSON 数据交互** - 使用 Jackson 或 Gson 等库将对象转换为 JSON 格式,以便于前端和后端之间的数据交换。 **6.3 RESTful 支持** - RESTful 设计是一种构建网络应用程序的方式,使用 HTTP 协议来实现资源的获取、更新、删除等功能。 - 在 SpringMVC 中,可以使用 @RequestMapping 注解配合 HTTP 方法(GET、POST、PUT、DELETE)来实现 RESTful 风格的服务。 **6.4 拦截器** - 拦截器是 SpringMVC 提供的一种灵活的扩展点,可以在处理请求之前或之后执行特定的操作,例如权限验证、日志记录等。 通过以上详细的介绍,我们不仅了解了 SpringMVC 的基础知识,还深入学习了其实现细节及高级用法,这对于实际开发工作非常有帮助。