SpringMVC框架解析

SpringMVC
三层架构
用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构

表现层: Controller 用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型
业务层: Service 处理具体的业务逻辑
持久层: Respository 操作数据库
MVC模型
Model View Controller 模型视图控制器,每个部分各司其职

Model:数据模型 ,JavaBean的类,用来进行数据封装。

View:指JSP、HTML用来展示数据给用户,thymeleaf

Controller:用来接收用户的请求,整个流程控制器。用来进行数据校验等。

SpringMVC的概述
是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供 了构建 Web 应用程序的全功能 MVC 模块。

SpringMVC在三层架构中的位置 ,表现层框架

案例的执行过程分析
1.当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象, 就会加载springmvc.xml配置文件

2.开启了注解扫描,那么HelloController对象就会被创建

3从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到执行的具体方法

4.根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件

5.Tomcat服务器渲染页面,做出响应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZBpOdbT-1606131392746)(https://cdn.jsdelivr.net/gh/lijin1998/image/03.bmp)]

六个组件分析
前端控制器 DispatcherServlet 指挥中心,控制其他五个组件工作,接收请求和发回响应

处理映射器 HandlerMapping 接收请求,映射相应的HandlerAdapter

处理器适配器 HandlerAdapter 接收请求,找到合适的Handler

处理器 Handler(Controller)接收请求,返回视图ModelAndView真正工作的组件,其他只是为他服务

视图解析器 View Resolver 将接收到视图进行解析,返回视图View

视图 View 接收视图,渲染,将数据填充到视图中,最后DispatcherServlet给浏览器response

Controller常用注解
@RequestMapping
建立请求URL和处理方法之间的对应关系,可以作用在方法和类上

属性

path:指定请求路径的url

value:value属性和path属性是一样的

mathod:请求方式 get @GetMapping ,post @PostMapping

params:指定限制请求参数的条件

headers:发送请求中必须包含的请求头

@RequestParam
把请求中的指定名称的参数传递给控制器中的形参赋值

属性

value:请求参数的名称

required:请求参数中是否必须提供此参数,默认值是true,必须提供

@RequestBody
用于获取请求体的内容,一般是json

属性

required

@PathVariable
有绑定url中的占位符,与RequestParam唯一区别是占位符delete/{id}

属性

value:指定url中的占位符名称

Restful风格的URL

请求参数的绑定
绑定的机制

表单提交的数据都是k=v格式的 username=haha&password=123
SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
要求:提交表单的name和参数的名称是相同的
支持的数据类型

基本数据类型和字符串类型
实体类型(JavaBean)
集合数据类型(List、map集合等)
视图模型对象model
响应数据和结果视图
字符串
Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

无返回值void
如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找页面没有找到。

可以使用请求转发或者重定向跳转到指定的页面

转发 forward

重定向 sendRedirect

ModelAndView对象
ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图

SpringMVC框架提供的转发和重定向
forward请求转发 返回String类型 ,return “forward:/user/findAll”
redirect 重定向返回String类型,return “redirect:/admin/blogs”;
请求转发是在服务器内的,一次请求一次响应,在请求转发目录可以将请求转发到WEB-INF目录下的资源

重定向是在浏览器和服务器之间,2次请求,获取2次请求,浏览器地址栏发生变化

SpringMVC框架中的拦截器
拦截器也是AOP思想的一种实现方式

拦截器是SpringMVC框架独有的

过滤器配置了/*,可以拦截任何资源

拦截器只会对控制器中的方法进行拦截

ControllerExceptionHandler

package com.lj.handler;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * @author lj
 * @date 2020-10-01 17:13
 * @QQ 851477108
 */
//拦截有Controller注解的控制器
@ControllerAdvice
public class ControllerExceptionHandler {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 定义异常处理
     * @param request
     * @param e
     * @return
     * @throws Exception
     */
    @ExceptionHandler(Exception.class)
    public ModelAndView exceptionHander(HttpServletRequest request, Exception e) throws Exception {
        logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);
//        当标识了状态码的时候就不拦截
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("url",request.getRequestURL());
        mv.addObject("exception", e);
        mv.setViewName("error/error");
        return mv;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值