springMvc

SpringMVC

在这里插入图片描述

1 什么是springMVC

springMVC基于java实现的MVC的设计模式,通过把model,view,controller分离,将web层进行解耦,将复杂的逻辑清晰化,简化代码开发,方便开发人员之间的配合.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjgXi86v-1573720869970)(image/springmvc流程.jpg)]

  1. 用户向服务器发开请求,请求被SpringMVC 前端控制器 DispatcherServlet 捕获;

  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器()。

  3. DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用
    HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应
    的拦截 器),最后以 HandlerExecutionChain 对象的形式返回;

  4. DispatcherServlet 根据获得的 Handler,选择一个合弁的 HandlerAdapter;(附注:如果成功获得
    HandlerAdapter 后,此时将开始执行拦截器的 preHandler(true或者false) 方法)

  5. 提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller)。 在填充 Handler
    的 入参过程中,根据你的配置,SpringMVC 将帮你做一些额外的工作:

    1 HttpMessageConveter: 将请 求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。

    2 数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等。

    3 数据根式化:对请求消息进行数据格式 化。 如将字符串转换成格式化数字或格式化日期等。

    4数据验证: 验证数据的有效性(长度、格式 等),验证结果存储到 BindingResult 或 Error 中。

  6. Handler 执行完成后,向HandlerAdapte返回一个 ModelAndView 对象;

  7. HandlerAdapter将根据返回的 ModelAndView(必须是已经注册到 SpringMVC 容器中的ViewResolver)返回给 DispatcherServlet;

  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

  9. ViewReslover解析后返回具体View。

  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。

2 SpringMVC 的注解

  1. @Controller @Controller 用于标记在一个类上,使用它标记的类就是一个 SpringMVC Controller 对
    ​ 象。
  2. @RequestMapping @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用
    ​ 于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  3. @Resource 和@Autowired
    ​ @Resource 和@Autowired 都是做 bean 的注入时使用,其实@Resource 并不是 Spring 的注解,它的包是
    ​ javax.annotation.Resource,需要导入,但是 Spring 支持该注解的注入。
    ​ 相同点:两者都可以写在字段和 setter 方法上。两者如果都写在字段上,那么就不需要再写 setter 方
    ​ 法。
    ​ 不同点:
    ​ @Autowired 为 Spring 提供的注解,需要导入包
    ​ org.spring.framework.beans.factory.annotation.Autowired;
    ​ @Autowired 注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如
    ​ 果允许
    ​ null 值,可以设置它的 required 属性为 false。如果我们想使用按照名称(byName)来装配,可
    ​ 以结合
    ​ @Qualifier 注解一起使用。如下:
    ​ public class TestServiceImpl {
    ​ @Autowired
    ​ @Qualifier(“userDao”)
    ​ private UserDao userDao;
    ​ }
    ​ @Resource
    ​ @Resource 默认按照 ByName 自动注入,由 J2EE 提供,需要导入包
    ​ javax.annotation.Resource。
    ​ @Resource 有两个重要的属性:name 和 type,而 Spring 将@Resource 注解的 name 属性解析
    ​ 为 bean 的名字,而 type 属性则解析为 bean 的类型。
    ​ 所以,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type属性时则使用
    ​ byType 自动注入策略。如果既不制定 name 也不制定 type 属性,这时将通过反射机制使用
    ​ byName 自动注入策略。
    ​ 注:最好是将@Resource 放在 setter 方法上,因为这样更符合面向对象的思想,通过 set、get 去
    ​ 操作属性,而不是直接去操作属性。
  4. @ModelAttribute 和 @SessionAttributes @ModelAttribute 该 Controller 的所有方法在调用前,先执
    ​ 行此@ModelAttribute 方法,可用于注解和方法 参数中,可以把这个@ModelAttribute 特性,应用在
    ​ BaseController 当中,所有的 Controller 继承 BaseController,即可实现在调用 Controller 时,先执
    ​ 行@ModelAttribute 方法。 @SessionAttributes 即将值放到 session 作用域中,写在 class 上面。
  5. @PathVariable 用于将请求 URL 中的模板变量映射到功能处理方法的参数上,即取出 uri 模板中的变量
    ​ 作为参数。
  6. @requestParam @requestParam 主要用于在 SpringMVC 后台控制层获取参数,类似一种是
    ​ requestgetParameter(“name”), 它有三个常用参数:defaultValue = “0”, required = false, value =
    ​ “isApp”;defaultValue 表示设置默认值, required 通过 boolean 设置是否是必须要传入的参数,
    ​ value 值表示接受的传入的参数类型。
  7. @ResponseBody 作用:该注解用于将 Controller 的方法返回的对象,通过弁当的
    ​ HttpMessageConverter 转换为指定格式后, 写入到 Response 对象的 body 数据区。 使用时机:返回
    ​ 的数据不是 html 标签的页面,而是其他某种格式的数据时(如 json、xml 等)使用;
  8. @Component 相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。
  9. @Repository 用于注解 dao 层,在 daoImpl 类上面注解。

3 SpringMVC组件解析

  1. 前端控制器:DispatcherServlet
    用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由
    它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
  2. 处理器映射器:HandlerMapping
    HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的
    映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  3. 处理器适配器:HandlerAdapter
    通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
    器进行执行。
  4. 处理器:Handler (程序员开发)
    它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
    Handler 对具体的用户请求进行处理。
  5. 视图解析器:View Resolver
    View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。比如 Jsp
  6. 视图:View (程序员开发)
    SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

4**.常用注解**

@Component 标记在类上,表明是spring的一个组件,会进入IOC容器,如果没有指定id,就会是类的名称首字母小写
@Controller Service Repository
@RequestMapping 是一个用来处理请求地址映射的注解
@RequestParam 将指定的请求参数赋值给方法中的形参,请求参数和方法中的参数名称不一样是
@PathVariable 获取URL中的动态参数resutfull风格,
@RequestBody 读取Request请求的body部分数据
@ResponseBody 将controller方法返回的对象转为json响应给客户端
@RestController 是@Controller 和@ResponseBody 加在一起

@Transactional 写在类上 或者方法上

5 springmvc和struts2的区别

springmvc入口是servlet struts2入口filter

springmvc 是单例 (效率高) struts2 是双例的

6 springmvc三大组件

处理器映射器

处理器适配器

视图解析器

7 springMVC的优点

  • 可以支持各种视图技术,不仅仅是jsp
  • 与spring框架集成,(如IOC容器,和aop)
  • 清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
  • 支持各种请求资源的映射策略

8 SpringMVC怎么样设定重定向和转发的?

  • 转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
  • 重定向:在返回值前面加**“redirect:”**,譬如"redirect:http://

9 、SpringMvc怎么和AJAX相互调用的?

  • (1)加入Jackson.jar
  • (2)在配置文件中配置json的映射
  • (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

10 如何解决POST请求中文乱码问题,GET的又如何处理呢?

  • 解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

  • get请求中文参数出现乱码解决方法有两个

tomcat配置文件添加编码与工程编码一致

11 SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。

12 SpringMVC常用的注解有哪些?

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

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

13 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?

一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。

14 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

可以在@RequestMapping注解里面加上method=RequestMethod.GET

1 5 怎样在方法里面得到Request,或者Session?

直接在方法的形参中声明request,SpringMvc就自动把request对象传入

16 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

17 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

18 SpringMvc中函数的返回值是什么?

返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

19 SpringMvc用什么对象从后台向前台传递数据的?

通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。

20 springMVC可以获取的参数类型?如何获取?

  • 基本类型、或者string
  • 实体类
  • 实体类关联对象
  • 实体类关联对象集合类型
  • 或者json格式加@requestbody
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页