Java面试——SpringMVC

一、基础理解

1、SpringMVC运行流程

1)tomcat启动;
2)解析web.xml;{如果有:listener配置,创建spring容器[父]};
3)dispatcherServlet实例化
4)dispatcherServlet对象,通过init(),创建Spring容器[子];{如果有父容器,子容器通过.setParent()方法简历和父容器的关系}
5)接收请求。
在这里插入图片描述

2、SpringMVC中的父子容器

1)如果设置了多个dispatcherServlet、多个spring容器[子],对于一些单一功能的类,在各个spring容器中都要放入bean对象,这就很浪费资源,例如下边这样的service类,它创建多个bean对象有什么用?

class AService{
	public void test(){
		sout("12345");
	}
}

在这里插入图片描述
这种情况下,才有创建父容器的必要;父容器把单一功能的类的bean对象收入其中,而不同的controller等类则放入对应的dispatcherServlet中的spring子容器。当执行请求时需要调用父容器的bean对象了,直接从父容器取即可。这样,整个系统就减少了很多冗余的bean对象。
在这里插入图片描述
在这里插入图片描述

2)spring父容器不是必须的,springMVC官网也说,一般一个项目有一个容器就足够了;但springMVC官网给了父子容器的配置方法,有些老项目作了借鉴、也这样配,实际并无必要。
实际上,除了有多个dispatcherServlet、多个spring子容器的项目,其余情况、一律建议只用一个spring容器;尤其那种一个子容器、一个父容器的项目,完全没有必要。

3、springMVC的“零配置”

web.xml文件,就是在创建一个dispatcherServlet对象,然后再往dispatcherServlet里放一个spring容器,再设置一个匹配路径;
spring.xml文件更简单,创建bean,设置扫描路径。
而这些xml的配置,完全可以用Java的方式实现,这种把xml配置文件的功能,用Java类实现,从而把xml配置文件完全替换掉的操作,有人也称之为“零配置”。
其实不是零配置,只是换了一种配置形式而已。
因为现在新项目,都在做JavaConfig的替换。
在这里插入图片描述
在这里插入图片描述

X、一些面试问题

0、SpringMVC提供的注解有哪些?

@RestController = @Controller + @ResponsBody(告知springmvc返回值为json,而不是MV对象);
@RequestMapping;
@PostMapping/Get…/Put…/Delete…

1、什么是Spring MVC?

Spring MVC是一款基于Java实现MVC设计模式的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解构,把复杂的web应用分成逻辑清晰的几部分,简化开发,也方便组内开发人员之间的配合。

2、Spring MVC的优点有那些?

1)可以支持各种视图技术,而不仅仅局限于JSP;
2)与Spring框架集成(如IoC容器、AOP等);
3)清晰的角色分配:
前端控制器(dispatcherServlet) ;
处理器映射(handlerMapping);
处理器适配器(HandlerAdapter);
视图解析器(ViewResolver)。
4)支持各种请求资源的映射策略。

3、Spring MVC的主要组件?

1)DispatcherServlet:
中央控制器,把请求给转发到具体的控制类
2)HandlerMapping:
映射处理器,负责映射中央处理器转发给controller时的映射策略
3)Controller:
具体处理请求的控制器
4)ModelAndView:
服务层返回的数据和视图层的封装类
5)ViewResolver:
视图解析器,解析具体的视图
6)Interceptors :
拦截器,负责拦截我们定义的请求然后做处理工作

4、MVC是什么?

MVC是一种设计模式:
模型(model)
视图(view)
控制器(controller)
三层架构的设计模式,用于实现前端页面的展现与后端业务数据处理的分离。

5、MVC设计模式的好处有哪些?

分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。
有利于系统的并行开发,提升开发效率。

6、Spring MVC常用的注解有哪些?

@RequestMapping+@Post/GetMapping:
用于映射一个url到一个类或方法上。

@RequestBody:
接收请求体的参数。

@RequestParam:
接收请求路径的参数。

@PathVariable:
接收路径参数。

@ResponseBody:
把返回对象转化为json对象响应给客户。

一般用@Controller注解定义控制器
也可以使用@RestController它相当于@ResponseBody + @Controller

7、Spring MVC怎么样设定重定向和转发的?

转发:
在返回值前面加"forward:"
如:“forward:user.do?name=method4”

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

8、SpringMVC的返回值类型

1)ModelAndView:跳转页面,同时传输数据给前端

2)String

3)void …(HttpServletResponse resp)
重定向
try {
resp.sendRedirect(url);
} catch () {

}
4)自定义类型对象

9、SpringMvc的Controller是不是单例模式?如果是,有什么问题?怎么解决?

答:是单例模式,所以在多线程访问时会有线程安全问题。解决方案是尽量不要在Controller中写字段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值