SpringMVC总结

SpringMvc总结

1.springmvc框架

SpringMVC作为Java EE项目表述层首选开发,对用户的请求做整体处理调度

主要作用:控制层 controller 配置

​ 简化前端请求参数接收(用形参列表)

​ 简化数据响应(用返回值)

围绕前端控制器模式设计的,其中中央 Servlet 和 DispatcherServlet 做整体请求处理调度!

SpringMVC涉及组件理解:

  1. DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
  2. HandlerMapping : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler![秘书]
  3. HandlerAdapter : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]
  4. Handler : handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]
  5. ViewResovler : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

流程:1.配置类 2.加载类 3.controller

2.简化参数接收

2.1 路径设计

@RequestMapping (细化:@Getmapping,@PostMapping,@PutMapping,@Deletemapping…)

2.2 参数接收

path路径参数 : @RequestMapping(“/{key}/”) + handler(@PathVariable Xx x)

param参数 :@RequestParam

json参数 :@RequestBody

​ 导入jackson依赖 + @EnableWebMvc(json转换器)

2.3 请求头接收

@RequestHeader

2.4 cookie接收

handler方法中加@CookieValue

2.5 原生api

2.6 共享域

原生对象

3.简化数据响应

3.1 模板页面

视图解析器,设置前缀和后缀

3.2 转发和重定向

redirect 和 forward

3.3 json数据

导入jackson依赖 + @EnableWebMvc(json转换器) + @ResponseBody

3.4 静态资源

开启静态资源

  // 开启静态资源查找
    // dispathcherServlet -> handlerMapping找有没有对应的handler,若没有->找有没有静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

4.restful风格设计

客户端发起请求request 给后端某个功能模块, 对 路径、参数、请求方式的设计。
功能模块需要:

4.1设计路径:/user/add

​ 模块名

4.2设计参数传递 :

​ 4.2.0 查询 GET | 保存 POST | 删除 DELETE | 更新 PUT

​ 4.2.1 **没有请求体:**GET获取/查询、DELETE删除

​ path (路径传参):单一数据资源

​ 参数是id标识 使用路径传递参数,例如:根据id删除或1查询数据 -> /模块/id (emp/1)

​ param :多、集合数据资源

​ 参数不是id,是范围参数 param key=value

​ 4.2.2 **有请求体:**POST保存、PUT修改

​ json :有请求体,使用请求体传递json

4.3选择请求方式 : get / post

5.功能扩展

5.1 全局异常处理

aop思想,定义异常类@ControllerAdvice,声明异常处理方法@ExceptionHandler(异常类.class)

5.2 拦截器

springmvc 内部过滤器

定义拦截类 handler之前preHandle , handler之后postHandle, 最后 afterCompletion

config 添加拦截器

// 拦截器 
public void addInterceptors(InterceptorRegistry registry) {
        // 拦截全部handler请求
        //registry.addInterceptor(new MyInterceptor());
}

5.3 参数校验注解

JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架。
步骤:1.实体属性类添加校验注解

@RestController
@RequestMapping("user")
@Validated
public class UserController {

    /**todo:接收用户数据,用户有校验注解
     *  步骤:1.实体属性类添加校验注解
     *        2.handler(@Validated 实体类 对象)
     *          @Validated 校验注解生效
     *    注:param / json 校验注解都有效果
     *        param - @Validated
     *        json - @RequestBody
     *        -
     *  问题:如果不符合校验规则,直接向前端抛出异常
     *  解决:接收错误绑定信息,自定义返回结果,例如:参数错误 -> 返回{code:400} -> 到前端
     *     捕捉错误信息:
     *          1.handler方法中(校验对象,BindingResult result)  注:要求BindingResult必须紧挨着校验对象
     *          2.BindingResult获取绑定错误信息
     */
    @PostMapping(value = "register")
    public Object register(@Validated @RequestBody User user, BindingResult result){

        // 当有注解错误时,不直接返回异常,自定义异常信息
        if (result.hasErrors()) {
            Map data = new HashMap();
            data.put("code",400);
            data.put("msg","参数校验异常");
            return data;
        }
   	}
}

你可能感兴趣的:(Spring,spring,java,后端)