天问的私人面试宝典03 框架

本文详细介绍了SpringMVC框架的注解使用,包括@Controller、@RequestParam、@ResponseBody等,以及SpringMVC的工作原理。接着,探讨了Spring框架的核心概念IOC和注解,如@Service、@Repository、@Component,以及SpringMVC的JSON返回处理。此外,文章还对比了过滤器、拦截器和监听器的区别。最后,涉及了Spring Boot的@SpringBootApplication核心注解以及自动配置的原理。
摘要由CSDN通过智能技术生成

一、SpringMVC 框架

        Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

        从springmvc2.5开始引入注解方式,特别到了3.0就全面引入注解方式,号称xml零配置。spring3.0配置注解引入后也就是这个点成为了它和struts2的分水岭。随着springmvc的成熟,struts2开始落幕,趋于被市场淘汰。

注解整理

        @RequestMapping注解拦截用户请求 实现业务调用

        @Controller 将该类交给spring容器管理,同时开启SpringMVC机制。对应前后端不分离的情况

        @RequestParam  参数说明    1.name/value 接收参数的名称

                                                        2.required 默认值为true,该数据为必填项

                                                        3.defaultValue 设定数据默认值,如果参数为null则设定默认值

                                       功能:为参数设定默认值;当提交参数名称与接收参数不一致时使用

        @Accessors(chain = true)

        @Date

        @PathVariable   参数说明:1.name/value动态接收形参的数据,如果参数相同则省略不写                                                           2.必填项 required  默认为 true

        @ResponseBody  返回一个JSON串 (必须添加 get/set方法)

        返回对象之后,SpringMVC通过内部API (ObjectMapper)调用对象的getXXX()方法动态获          取属性和属性值     演化规则:getAge()~~~去掉get~~~Age()~~~首字母小写~~~age()~~~获          取属性age~~~通过getAge()动态获取属性值

        @RestController 该类中所有方法的返回值都是JSON串  =@Controller+@Responsebody

        @CrossOrigin(origins = "*")  允许跨域的注解

         将一个类声明为Spring的bean的注解4个

        @Controller 用来标识Controller层的代码 相当于将对象交给Spring管理
        @Service 用来标识Service层代码
        @Repository 用来标识持久层
        @Component 万用注解

        @Configuration 标识我是一个配置类,相当于 application.xml

        @ComponentScan("com.cy")设定包扫描路径,如果注解中只有value属性,可以省略不写

        @Bean通过该注解,可以将业务数据实例化之后,交给Spring容器管理. 但是@Bean注解应该写到配置类中.

SpringMVC注解

@RequestMapping

是一个用来处理请求地址映射的注解,可用在方法上也可用在类上,用在类上会将一个特定请求映射到控制器之上,
表示类中的所有响应请求的方法都是以该地址为父路径;方法的级别上该注解表示进一步指定到处理方法的映射关系。有两个常用属性
value:指定请求的实际地址。method:指定请求的method类型,GET、POST等

@ResponseBody

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。即将返回的数据格式转换为JSON格式。

@RequestParam

是从 Request 里获取参数值  

参数说明                                          1.name/value 接收参数的名称

                                                        2.required 默认值为true,该数据为必填项

                                                        3.defaultValue 设定数据默认值,如果参数为null则设定默认值

                                       功能:为参数设定默认值;当提交参数名称与接收参数不一致时使用

@RequestBody

用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 JSON 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用。@RequestBody 注解用于 POST 请求上,接收 JSON 实体参数。

@RestController
相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面了。

@PathVariable

主要用来获取 URL 参数

Spring MVC调用原理

Servlet作用

说明: servlet是浏览器与服务器(tomcat) 进行交互的一种机制.
核心对象: 1.Request 包含了用户的所有的请求相关信息(参数…协议…地址…)
                2.Response 包含了服务器相关的信息(服务器地址,返回的数据)

缺点:接收的所有参数都是String类型

SpringMVC调用步骤

1.当用户发起请求时,被SpringMVC框架中的前端控制器拦截DispatcherServlet.
2.由于前端控制器,并不清楚哪个方法与请求对应,所以查询处理器映射器HandlerMapping.
3.当tomcat服务器启动,则处理器映射器会加载所有的@RequestMapping注解,将其中的路径与方法进行绑定. Map</请求路径,包名.类名.方法名(参数)>,将查找到的方法信息回传给前端控制器 进行后续调用.
4.秉承着松耦合的思想,前端控制器将查询得到的方法, 请求处理器适配器(mvc针对不同的配置文件有专门的处理器(运行程序的机制))挑选合适的处理器去执行(程序内置的规则 无需人为干预)
5.当挑选合适的处理器之后,程序开始真正的执行业务方法. Controller-Service-Mapper(Dao),执行业务. 当业务执行成功之后.返回统一的ModelAndView对象.
其中包含2部分数据 1-Model(服务器数据) 2.View(页面逻辑名称)
6.当前端控制器获取ModelAndView对象之后,交给视图解析器 解析View对象的逻辑名称. 动态的拼接前缀 + 页面逻辑名称 + 后缀. 最终形成了用户展现页面的全路径.
7.将Model数据填充到页面中的过程,叫做视图渲染. 渲染之后,将数据交给前端控制器处理.
8.将得到的完整页面 响应给用户进行展现
 

SpringMVC 用法

1.@RequestParam

2.同名提交问题

SpringMVC中对于页面要求应该保证name属性尽可能唯一,但是如果遇到复选框操作时 重名问题将不能避免

3.对象的方式接参

        大量的页面的提交数据,,如果采用单独的参数接收,必然导致Controller方法结构混乱,不便于理解.所以采用对象的方式封装.

 /**
     * 请求路径: http://localhost:8090/addUser
     * 请求参数: id: 100  name: 张三
     * request/response对象说明  只要用户调用就会自动的赋值
     * servlet缺点:  接收的参数都是String类型
     * @param model
     * @return
     */
    @RequestMapping("/addUser")
    public String addUser(HttpServletRequest request){
        //利用工具API进行类型转化
        Integer id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        System.out.println("参数:"+id+":"+name);
        return "success";
    }
 

        对象赋值的原理:

        当用户提交数据之后,利用对象的set方法为属性赋值。要求:POJO对象中必须有set方法

        内部根据 request.getParameter(“id”)方式获取数据

4.为对象的引用赋值

        说明: 有时可能会遇到 name属性重复的问题. 由于业务需要不得不写一个重复的名称.那么这时采用对象的引入赋值.

        Dog     属性    id   name        User    private String  name;          private  Dog dog;

5.简化ModelAndView(简单参数传递)

 @RequestMapping("/hello")
    public String hello(Model model){

        model.addAttribute("name", "简化mvc结构");
        return "hello";
    }
 

SpringMVC 转发 和 重定向

转发

概念: 由服务器内部进行页面的跳转.
说明: 一般情况下 SpringMVC内部 以转化为主.

关键字 :forward   转发的是一个请求  return “forward:/findDog”;

重定向

当用户发起请求时,由服务器返回有效的网址信息.之后由用户再次发起请求的结构

关键字: redirect    多次请求多次响应  return “redirect:/findDog”;

重定向/转发特点

1.转发时 会携带用户提交的数据.
2.转发时 用户浏览器的地址不会发生改变.
3.重定向时 由于是多次请求,所以不会携带用户的数据
4.重定向时 由于是多次请求,所以用户的浏览器的地址会发生变化

重定向/转发意义

意义: 实现了方法内部的松耦合
什么时候使用转发/重定向:
1.如果需要携带参数 使用转发
2.如果一个业务已经完成需要一个新的开始 则使用重定向

RestFul

请求类型

        get      查询    弊端:如果参数有多个,则key/value的结构需要多份

        post     新增

        put       更新

        delete   删除

RestFul结构: 

        1.参数之间用   /  分割

        2.参数位置一旦确定,不可更改

        3.参数使用 { } 号的形式进行包裹,并且设定形参

        4.在接收参数时,使用特定的注解取值@PathVariable  @PathVariable   参数说明:                                                          1.name/value动态接收形参的数据,如果参数相同则省略不写                                                           2.必填项 required  默认为 true

SpringMVC JSON返回

        Object格式:对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

JSON练习: {“key1”:“value1”,“key2”:“value2”}

        Array格式:数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

JSON: [“value1”,“value2”,“value3”]

        现阶段一般的请求都是前后端分离的方式.ajax (jQuery/axios),一般向服务器请求的数据 通常详情下 都是采用JSON串的方式返回.使用

@ResponseBody  返回一个JSON串 (必须添加 get/set方法)

        返回对象之后,SpringMVC通过内部API (ObjectMapper)调用对象的getXXX()方法动态获          取属性和属性值     演化规则:getAge()~~~去掉get~~~Age()~~~首字母小写~~~age()~~~获          取属性age~~~通过getAge()动态获取属性值

过滤器、拦截器、监听器的区别?

过滤器 Filter、拦截器 Interceptor、监听器Listener

  1. 范围不同:过滤器是Servlet规范规定的,只能用于Web程序中,而拦截器既可以用于Web程序,也可以用于Application、Swing程序中
  2. 规范不同:过滤器是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的
  3. 深度不同:过滤器只能在Servlet前后起作用,而拦截器能够深入到方法前后、异常抛出前后等,因为拦截器的使用具有更大的弹性,在Spring框架中优先使用拦截器
  4. 机制不同:过滤器是基于函数回调的,而拦截器是基于Java的反射机制
  5. 拦截器只能对controller请求起作用,而过滤器则可以对几乎所有的请求起作用
  6. 拦截器可以访问controller的上下文、值栈里的对象,而过滤器不能访问
  7. 在controller的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
  8. 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

二、Spring框架

        Spring是一种轻量级开发框架,旨在提高开发人员的开发效率和代码的可维护性。

         Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

核心容器Spring Core

核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。

     2.

Spring上下文

Spr

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值