一,什么是SpringMVC
SpringMVC是基于Java的实现了MVC设计模式的轻量级Web框架,通过把Model,View,Controller分离,将Web层进行职责解耦
把复杂的Web应用分成逻辑清晰的几部分,简化开发,减少出错,方便开发人员之间的配合
二,什么是MVC
MVC主要的用途就是对组件之间进行隔离分层
M:数据模型
V:视图
C:控制器
三,SpringMVC执行的详细流程
1.用户发送请求至前端控制器DispatcherServlet。
2.前端控制器收到请求后调用HandlerMapping(处理器映射器)
3.处理器映射器根据URL找到具体的Hander(后端控制器),生成处理器对象及处理器拦截器,并将它返回给前端控制器
4.前端控制器调用处理器适配器HandlerAdapter去适配调用Handler(后端控制器);
5.处理器适配器经过适配调用具体的处理器(后端控制器)
6.处理器处理完业务后返回ModelAndView对象,交给处理器适配器
7.处理器适配器将返回的ModelAndView返回给前端控制器
8.前端控制器将ModelAndView传给ViewReslover(视图解析器)进行解析
9.ViewReslover解析后返回具体的View(视图)
10.前端控制器将View进行渲染视图
1.前端控制器响应给用户
四,SpringMVC的优点
1.可以支持各种视图技术,而不仅仅局限与JSP
2.与Spring框架集成
3.清晰的角色分配:前端控制器,请求到处理器映射,处理器适配器,试图解析器
4.支持各种请求资源的映射策略
五,SpringMVC的主要组件及作用
1.前端控制器【dispatcherServlet】:接受请求,相当于转发器,有了前端控制器就减少了其他组件之间的耦合度
2.处理器映射器【HandlerMapping】:根据请求的URL来查找Handler后端控制器
3.处理器适配器【HandlerAdapter】:调用具体的处理器
4.处理器【Handler】:完成业务层的判断,控制返回结果
5.试图解析器ViewResoler:进行试图的解析,根据试图逻辑名解析成真正的试图(View)
6.试图(View):它的实现类支持不同的试图类型
六,什么是DispatcherServlet
Spring的MVC框架是围绕DispatcherServlet来设计的,他用来处理所有的HTTP请求和响应
七,什么是SpringMVC框架的控制器?
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由试图呈现给用户的模型
八,SpringMVC怎么样设置重定向和转发
转发:在返回值前面加forward:就可以让结果转发
重定向:在返回值前面加redirect,就可以实现重定向
九,MVC是什么?MVC设计模式的好处
MVC是一种设计模式,模型(model)视图(view)控制器(controller),三层架构的设计模式。用户实现前端页面的展现与后端业务数据处理的分离
MVC设计模式的好处
1.分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性
2.有利于系统的并行开发,提高开发效率
十,注解的原理
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。
十一,SpringMVC常用的注解有哪些?
@RepquestMapping:用于处理请求url映射的注解,可作用于类上或方法上,用于类上则表示类中的所有响应请求的方法,都是以该地址作为父路径
@RequestBody:接受http请求携带的json数据,并将json数据转为java对象
@ResponseBody:将后端控制器返回的结果,转为json对象响应给用户
@RequestParam:用户获取http请求中携带的单个或多个值,如果名称一致,可忽略此注解
@PathVariable:用户获取url中携带的值,绑定url中的占位符
十二,SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@Controller+@RestController
十三、@Controller注解的作用
在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,@Controller 用于标记在一个类上,使用它标记的类就是一个Spring MVC Controller 对象分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解,单单使用@Controller 标记在一个类上还不能真正意义上的说它就是Spring MVC 的一个控制器类,因为这个时候Spring 还不认识它。这个时候就需要我们把这个控制器类交给Spring 来管理
十四、Spring MVC与Struts2区别
相同点
都是基于mvc的表现层框架,都用于web项目的开发。
不同点
前端控制器不一样。Spring MVC的前端控制器是servlet:DispatcherServlet。struts2的前端控制器是filter:StrutsPreparedAndExcutorFilter。
请求参数的接收方式不一样。Spring MVC是使用方法的形参接收请求的参数,基于方法的开发,线程安全,可以设计为单例或者多例的开发,推荐使用单例模式的开发(执行效率更高),默认就是单例开发模式。struts2是通过类的成员变量接收请求的参数,是基于类的开发,线程不安全,只能设计为多例的开发。
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,Spring MVC通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
与spring整合不一样。Spring MVC是spring框架的一部分,不需要整合。在企业项目中,Spring MVC使用更多一些。
十五、怎样在方法里面得到Request,或者Session?
答:直接在方法的形参中声明request,Spring MVC就自动把request对象传入。
十六、Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
十四,什么叫rest
REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
作用:从路径中获取参数,使用@PathVariable注解即可
{}中的参数名与@PathVariable中的名称一致
十五,@PathVariable和@RequestParam的区别
相同点:都是用于request中接收请求的,两者都可接收参数
不同点:@PathVariable是从url中获取参数,@RequestParam是从请求里面获取参数
获取参数格式,@PathVariable是从请求中定义一个{}里面是传回来的值名称,而@RequestParam直接总用在参数上即可