SpringMVC框架知识点记录

什么是SpringMVC?

SpringMVC是Spring的一个模块,是基于Java实现了MVC设计模式的一个轻量级WEB框架,该框架把模型model,视图view,控制器controller分离,实现了职责解耦(前端页面的展示,业务数据的处理),简单开发,易上手。

MVC设计模式的好处:

1. 分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。

2. 有利于系统的并行开发(前后端分离),提升开发效率。

SpringMVC的主要组件有哪些?

1. 前端控制器DispatchServlet:接收请求,响应结果,相当于转发器,有了DispatchServlet就减少了其他组件之间的耦合度;

(⚠️Spring的MVC框架是围绕DispatchServlet来设计的,它用来处理所有的http请求和响应)

2. 处理器映射器HandlerMapping:根据前端请求的URL来查找Handler;

3. 处理器适配器HandlerAdater

4. 处理器Handler:需要程序员开发(Controller,后端控制器逻辑处理)

5. 视图解析器ViewResolver:进行视图解析,根据视图逻辑名解析成真正的视图view;

6. 视图View:需要程序员开发(例如JSP),View是一个接口,它的实现类支持不同的视图类型(JSP,Freemarker,PDF等)

SpringMVC框架的控制器如何理解?

控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换成一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。

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

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

SpringMVC的工作原理?

1. 客户端发送请求到DispatcherServlet 

2. DispatcherServlet查询handlerMapping找到处理请求的Controller 

3. Controller调用业务逻辑后,返回ModelAndView 

4. DispatcherServlet查询ModelAndView,找到指定视图 

5. 视图将结果返回到客户端

SpringMVC的工作流程?

1. 用户发送请求至前端控制器DispatcherServlet。 

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

3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 

4. DispatcherServlet调用HandlerAdapter处理器适配器。 

5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 

6. Controller执行完成返回ModelAndView。 

7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 

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

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

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

11. DispatcherServlet响应用户。
 

SpringMVC的优点

1. 可以支持各种视图技术,不仅仅局限于JSP;

2. 与Spring框架集成(例如IOC容器,AOP等);

3. 清晰的角色分配:前端控制器(DispatchServlet)请求到处理器映射器(HandlerMapping)处理器适配器(HandlerAdapter)视图解析器(ViewResolver);

4. 支持各种请求资源的映射策略;

5. 提供拦截器机制,可以方便的对请求进行拦截处理;

6. 提供异常机制,可以方便的异常做同一处理。

注解原理是什么?

注解本质上是一个继承了Annotation的特殊接口,其具体实现类是java运行时生成的动态代理类。

我们通过反射获取注解时,返回的是java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值,而memberValues的来源是java的常量池。

SpringMVC常用的注解有哪些?

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

2.参数注解:

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

@PathVariable:从路径中获取传参参数信息;

@RequestParam:接收静态URL请求入参;

3. @ResponseBody:注解实现将controller方法返回对象转换为json对象响应给客户;

(⚠️可以使用@ResponseBody注解或者使用包含@ResponseBody注解的@RestController注解来返回json格式)

@Controller
@RequestMapping(value="/user")
public class testController{

@RequestMapping(value="/get",method=RequestMethod.GET)
@ResponseBody
public User getUserinfo(@RequestBody User param){}

}

4. @Controller:控制器Controller负责处理由DispatchServlet分发的请求,它把用户请求的数据经过业务处理层处理后封装成一个model返回给对应的view进行展示。单单使用@Controller注解还不能说明是一个控制类,因为Spring还不认识它,那么要如何做才能使Spring认识它呢?

这个时候就需要把这个控制器交给Spring来管理,有两种方式:

(1)在Springmvc的配置文件中定义myController的bean对象

(2)在Springmvc的配置文件中告诉Spring该到哪里去找标记为@Controller的Controller控制器。

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

1. 转发:在返回值前面加"forward",例如:"forward:user.do?method4"

2.重定向:在返回值前面加上"redirect",例如:"redirect:http://www.baidu.com"

SpringMVC的异常处理?

可以把异常抛给Spring框架,由Spring框架处理,我们只需要配置简单的异常处理器,在异常处理器中添加视图页面即可。

如何拦截GET方法提交的请求?

可以在@RequestMapping注解里面配置@RequestMethod.GET。

怎么在方法里面的到Request或者session?

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

SpringMVC中函数的返回值是什么?

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

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

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

怎样把ModelMap里面的数据放入session里面?

可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

SpringMVC拦截器和Filter过滤器有什么区别?

1. 功能相同:拦截器和Filter都能实现相应的功能,谁也不比谁强

2. 容器不同:拦截器构建在SpringMVC体系中,Filter过滤器构建在Servlet容器之上

3. 使用便利性不同;拦截器提供了三个方法,分别在不同的时机执行,过滤器仅提供一个方法,当然也能实现拦截器的执行时机的效果,就是比较麻烦一些。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值