一、什么是Spring MVC ?简单介绍下你对springMVC的理解?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

二、Springmvc的优点:

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

2、与Spring框架集成(如IoC容器、AOP等);

3、清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。

4、 支持各种请求资源的映射策略。

三、Spring MVC的主要组键?

1、前端控制器 DispatcherServlet(不需要程序员开发)

作用:接收请求、响应结果 相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的URL来查找Handler

3、处理器适配器HandlerAdapter

注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

4、处理器Handler(需要程序员开发)

5、视图解析器 ViewResolver(不需要程序员开发)

作用:进行视图的解析 根据视图逻辑名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

四、Spring MVC的工作原理

1.客户端(浏览器)发送请求,直接请求到DispatcherServlet。

2.DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。

3.解析到对应的Handler(也就是我们平常说的Controller控制器)。

4.HandlerAdapter会根据Handler来调用真正的处理器来处理请求和执行相对应的业务逻辑。

5.处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是逻辑上的View。

6.ViewResolver会根据逻辑View去查找实际的View。

7.DispatcherServlet把返回的Model传给View(视图渲染)。

8.把View返回给请求者(浏览器)

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

(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu"

六、 SpringMVC常用的注解有哪些?

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

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

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

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

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

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

单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影.

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

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

(1)加入Jackson.jar

(2)在配置文件中配置json的映射

(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

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

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

十一、怎么样把某个请求映射到特定的方法上面?

直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径。

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

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

十三、怎么样在方法里面得到Request,或者Session?
直接在方法的形参中声明request,SpringMvc就自动把request对象传入。

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

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

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

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

十六、SpringMvc中函数的返回值是什么?

返回值可以有很多类型,有String, ModelAndView,但一般用String比较好。

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

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

十八、SpringMvc中有个类把视图和数据都合并的一起的,叫什么?

叫ModelAndView。

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

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

二十、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?

要加上@ResponseBody注解。

二十一、Spring MVC的异常处理 ?

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

更多推荐

SpringMVC常见面试题及答案