SpringMVC-框架技术

SpringMVC

MVC

  • M : Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
  • V:View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
  • C: Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。

SpringMVC项目架构图

下图和描述取自博客:https://blog.csdn.net/u014191220/article/details/81387596
在这里插入图片描述

  1. 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
  2. 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
  3. HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
  4. DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
  5. 执行处理器
  6. 处理器会返回一个ModelAndView对象给HandlerAdapter
  7. 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
  8. 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
  9. 返回视图对象到前端控制器。
  10. 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
  11. 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。

SpringMVC核心类和接口

1. DispatcherServlet 前置控制器

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据响应的规则分发到目标Controller来处理,是配置spring MVC的第一步

2. HandlerMapping 处理请求映射

-.SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller

-.DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上

3. HandlerAdapter接口 处理请求的映射

-.AnnotationMethodHandlerAdapter类 通过注解,把一个URL映射到Controller类的方法上

4.Controller接口 – 控制器

-.一般我们使用 @Controller 注解代替实现Controller接口的工作

5.HandlerInterceptor接口 拦截器

-. 一般我们 自定义类来实现 HandlerInterceptor 来完成拦截工作

6.ViewResolver接口 视图
-. 一般我们在springmvc配置文件中配置bean 类为.InternalResourceViewResolver 通过配置前缀后缀 把视图名拼接起来交给View处理

SpringMVC核心注解

1. @Controller

  • 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

2. @RequestMapping

  • RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

3. @Autowired

  • 自动注入,spring会根据Type去自动注入

4. @PathVariable

  • 用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。 一般搭配RestFul风格使用
@Controller
public class HelloControllerRestFul {

    //原来的访问路径:http://localhost:8080/add?a=2&b=3
    //RestFul的访问路径:http://localhost:8080/add/1/2
    //两种都是传递参数

    //value属性 就是请求的url地址+参数
    //method属性 就是限制用什么请求方式访问
    @RequestMapping(value="/add/{a}/{b}",method = RequestMethod.GET)
    public String add(@PathVariable int a, @PathVariable String b, Model model){
         //@PathVariable 路径变量 将参数绑定到url模板上
        String result = a + b;
        model.addAttribute("msg","结果:" + result);
        return "hello";
    }
}

5. @ResponseBody

  • 配置该注解的方法不会走视图解析器

  • 作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

  • 使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

6. @Service

  • 用于注解Service层 ,写在ServiceImpl实现类上

7. @Repository

  • 用于注解Dao层 ,写在DaoImpl实现类上

8. @Component

  • 可以说是通用的注解,用于不知道的类的归属层
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值