From f3ac3b02d06e8654d7762f3aca880e653b844d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B7=AF=E7=8E=B2?= <1516489926@qq.com> Date: Mon, 1 Jan 2024 23:44:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...345\212\240\345\210\235\345\255\246mvc.md" | 260 ++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 "29 \350\267\257\347\216\262/20231229 \345\244\215\344\271\240\345\212\240\345\210\235\345\255\246mvc.md" diff --git "a/29 \350\267\257\347\216\262/20231229 \345\244\215\344\271\240\345\212\240\345\210\235\345\255\246mvc.md" "b/29 \350\267\257\347\216\262/20231229 \345\244\215\344\271\240\345\212\240\345\210\235\345\255\246mvc.md" new file mode 100644 index 0000000..2305f85 --- /dev/null +++ "b/29 \350\267\257\347\216\262/20231229 \345\244\215\344\271\240\345\212\240\345\210\235\345\255\246mvc.md" @@ -0,0 +1,260 @@ +## 笔记 + +## SpringMVC 5大核心组件 + + + +![img](https://pic2.zhimg.com/80/v2-73b71f6dd41ec2cd9217795b3239beb5_720w.webp) + + + +## 1.前端控制器 DispatcherServlet + +DispatcherServlet本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相应的Handler中进行处理,获取到数据和视图后,在使用相应视图做出响应。 + +## 2.处理器映射器 HandlerMapping + +HandlerMapping本质上就是一段映射关系,将访问路径和对应的Handler存储为映射关系,在需要时供前端控制器查阅。 + +## 3.处理器适配器 HandlerAdapter + +本质上是一个适配器,可以根据要求找到对应的Handler来运行。 + +由于 Handler 涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发 Handler。 + +## 4.视图解析器(ViewResolver) + +本质上也是一种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。 + +## 5.视图渲染(View) + +View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)。 +本质上就是将handler处理器中返回的model数据嵌入到视图解析器解析后得到的页面中,向客户端做出响应。 + +## SpringMVC5大组件关系 + +- DispatcherServlet 控制器入口 负责分发请求 +- HandlerMapping 负责根据请求 找到对应的控制器 +- Controller 真正处理请求的控制器 +- ModelAndView 封装数据信息和视图信息的 +- ViewResolver 视图处理器 通过处理找到对应的页面 + + + +![img](https://pic2.zhimg.com/80/v2-01b29b38cff1c7ae130ed558bb67e811_720w.webp) + + + +DispatcherServlet收到请求后,依据HandlerMapping的配置,调用相应的Controller来处理,Controller将处理结果封装成ModelAndView对象,返回给DispatcherServlet,DispatcherServlet依据ViewResolver的解析,调用相应的视图对象,(如jsp)来生成相应的页面。 + +一言概之,request请求到中央控制器——>传到映射处理器——>转发到指定controller——>获取数据和view ,组成成ModelAndView组件——>通过ViewResolver返回到特定的前台页面。 + +## 作业 + +mvc雏形,pom.xml + +```xml + + 4.0.0 + com.xxu + mvc + war + 1.0-SNAPSHOT + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + org.springframework + spring-webmvc + 5.2.9.RELEASE + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + + 886 + / + + + + + +``` + +user的增加删除修改 + +再之前的app的基础上加一个service的包,在这里创建UserService接口 + +```java +package com.mdd.service; + +import com.mdd.domain.User; + +import java.util.List; + +public interface UserService { + //查询所有用户 + List findAll(); + + //按照id查询某个用户 + User findById(int id); + + //按照id删除某个用户 + void deleteById(int id); + + //按照某个用户 + void update(User user); + + //新增用户 + void insert(User user); + + +} + +service +``` + +在service包下,再创建一个包impl + +```java +package com.mdd.service.impl; + +import com.mdd.domain.User; +import com.mdd.mapper.UserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserService implements com.mdd.service.UserService { + + @Autowired + private UserMapper userMapper; + + @Autowired + public List findAll(){ + System.out.println("业务开始"); + return userMapper.findAll(); + + } + + @Override + public User findById(int id) { return userMapper.findById(id);} + + @Override + public void deleteById(int id) {userMapper.deleteById(id);} + + @Override + public void update(User user) {userMapper.update(user);} + + @Override + public void insert(User user) {userMapper.insert(user);} + + + +} +``` + +在测试test下创建一个com.mdd.test.UserTest + +```java +package com.mdd.test; + +import com.mdd.config.SpringConfig; +import com.mdd.domain.User; +import com.mdd.mapper.UserMapper; +import com.mdd.service.UserService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = SpringConfig.class) +public class UserTest { + + @Autowired + private UserMapper userMapper; + + @Autowired + private UserService userService; + + @Test + public void test01(){ + System.out.println("-------------查询所有---------------"); + List all = userMapper.findAll(); + System.out.println(all); + } + + @Test + public void test02(){ + System.out.println("--------------根据id查询-------------------"); + User byId = userMapper.findById(1); + System.out.println(byId); + + } + + @Test + public void test03(){ + System.out.println("------------------根据id删除--------------------"); + userMapper.deleteById(3); + System.out.println("删除成功!!!"); + + } + + @Test + public void tets04(){ + System.out.println("----------------------修改用户--------------------------"); + //模块浏览器传参 + String Username = "王鹤棣"; + String gender = "男"; + int age = 18; + int id = 3; + + User user = new User(id,userName,age,gender); + userMapper.update(user); + System.out.println("修改成功"); + } + + @Test + public void test05(){ + System.out.println("--------------------新增用户----------------"); + //模块浏览器传参 + String Username = "张万森"; + String gender = "男"; + int age = 18; + + User user = new User(null, userName, age, gender); + userMapper.insert(user); + System.out.println("添加成功"); + + } + + @Test + public void test06(){ + List all02 = userService.findAll(); + System.out.println(all02); + } + + + + +} + +``` + -- Gitee