SpringMVC面试题

SpringMVC是什么?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,
将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几个部分来简化开发。

Spring MVC的优点什么是?

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

Spring MVC的主要组件是什么?

前端控制器(DispatcherServlet):用于接收请求、响应结果,相当于转发器,通过DispatcherServlet 可以减少与其它组件之间的耦合度。
处理器映射器(HandlerMapping):根据请求的URL来查找Handler
处理器适配器(HandlerAdapter):按照HandlerAdapter要求的规则去编写Handler,适配器才可以正确的去执行。
处理器(Handler):主要负责处理前端请求,完成业务逻辑,生成ModelAndView对象返回给HandlerAdapter
视图解析器 (ViewResolver):进行视图的解析,根据视图逻辑名解析成真正的视图
视图(View):是一个接口, 它的实现类支持不同的视图类型,比如jsp,freemarker,pdf等等

SpringMVC的工作原理是什么?

客户端发送请求到前端控制器DispatcherServlet,DispatcherServlet查询处理器适配器HandlerAdapter,找到处理请求的控制器Controller。Controller调用业务逻辑后,返回ModelAndView对象,DispatcherServlet查询ModelAndView对象,找到指定的视图View并将结果返回到客户端。

什么是DispatcherServlet?

Spring MVC 是围绕DispatcherServlet来设计的,也就是前端控制器,它用来处理所有的HTTP请求和响应。

什么是Spring MVC框架的控制器?

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

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

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

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

SpringMVC中的控制器一般使用@Controller注解表示,也可以使用@RestController注解。
@RestController注解相当于@ResponseBody注解 + @Controller注解。除此之外,一般不用别的注解代替。

@Controller注解的作用?

在Spring MVC 中,带有@Controller注解的控制器负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个模型Model ,
然后再把该Model返回给对应的视图进行展示。

@RequestMapping注解用在类上面有什么作用?

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

请描述Spring MVC(DispatcherServlet)的工作流程?

用户的请求发送给前端控制器DispatcherServlet,DispatcherServlet收到请求后调用处理器映射器HandlerMapping,请求获取对应的处理器Handler。
HandlerMapping根据请求的URL找到具体的Handler,生成Handler对象和处理器拦截器一起返回给DispatcherServlet。
DispatcherServlet 调用处理器适配器HandlerAdapter,HandlerAdapter 经过适配调用具体的后端控制器Controller。
Controller执行完成后,返回一个ModelAndView对象,HandlerAdapter将Handler执行结果生成的ModelAndView对象返回给DispatcherServlet。
DispatcherServlet将ModelAndView对象传给视图解析器ViewResolver进行解析,ViewResolver解析完成后返回具体的视图View。
DispatcherServlet对View进行渲染,将数据模型填充到视图中,最后由DispatcherServlet响应用户的请求。

MVC是什么?MVC设计模式的好处有哪些?

mvc是一种模型-视图-控制器组成的三层架构的设计模式,用于实现前端页面的展现与后端业务数据处理的分离。
mvc设计模式的好处
分层设计,实现了系统中各个组件之间的解耦,有利于系统业务的扩展和维护。
.有利于系统的并行编程,提升开发效率。

Spring MVC常用的注解有哪些?

@RequestMapping注解:用于处理请求地址的映射,可用于类或方法上
@RequestBody注解:接收Http请求的Json数据,将Json转换为java对象。
@ResponseBody注解:将Conreoller方法返回的对象,转化为Json对象响应给客户端。

@ResponseBody注解的作用

该注解用于将Conreoller方法返回的对象,转化为Json对象响应给客户端。

@PathVariable注解和@RequestParam注解的区别?

@PathVariable注解:用来获得请求的URL中的动态参数,从路径中获取变量。
@RequestParam注解:从请求里面获取参数

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

解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,并设置编码为utf-8
get请求中文参数出现乱码解决方法:在tomcat配置文件添加与项目工程编码一致的编码类型

Spring MVC怎么进行异常处理?

1:可以将异常抛给Spring框架来处理;
2:配置简单的异常处理器同时添加视图页面。

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

直接在方法的形参里面声明这个参数,但名称必须和传过来的参数名称一样。

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

直接在方法中声明这个对象,Spring MVC会自动把属性值赋予这个对象。

怎么样在方法里面得到request(session)?

直接在方法的形参中声明request(session),Spring MVC就会自动把request(session)对象传入

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

在返回值前面加forward,可以让结果转发,在返回值前面加redirect,可以让返回值重定向

Spring MVC中函数的返回值是什么?

SpringMVC中函数的返回值有String, ModelAndView。ModelAndView类把视图和数据合并一起,一般用String比较好。

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

Model 对象或ModelMap对象,前台通过el表达式获取数据

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

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

这是第一种根据key放入值的方式。

@SessionAttributes(value = { "key" })
@Controller
public class HelloWorld {
 
	private static final String JSP = "success";
 
	@RequestMapping("/helloworld")
	public String hello(Map<String, Object> map) {
 
		map.put("key", "adsadasdads");
 
		return JSP;
	}
 
}

第二种,根据类型放入session域的方法

@SessionAttributes(types = { String.class })
@Controller
public class HelloWorld {
 
	private static final String JSP = "success";
 
	@RequestMapping("/helloworld")
	public String hello(Map<String, Object> map) {
 
		map.put("key", "adsadasdads");
		map.put("key1", "frgrgt");
		map.put("key2", "ddddd");
 
		return JSP;
	}
 
}

SpringMVC中有个把视图和数据都合并在一起的,叫什么?

ModelAndView

posted @ 2021-11-15 11:13  佛祖让我来巡山  阅读(671)  评论(0编辑  收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网