springMVC 面试题

1.简单介绍下你对springMVC的理解?


是基于java的轻量级MVC框架,

通过对Model、view、Controller分离,把web应用分成逻辑清晰的几部分,简化了开发,方便了开发人员的配合。

2.说一说SpringMVC的重要组件及其作用


前端控制器(DispatcherServlet): 接收请求、响应结果,降低了组件之间的耦合性
处理器映射器(HandlerMapping): 根据url去查找对应的处理器(Handler)。
处理器适配器(HandlerAdapter): 执行处理器(Handler)。
处理器(Handler): 处理业务逻辑的类,程序员编写。
视图解析器(ViewResolver): 将逻辑视图名称解析为实际的视图对象。它根据视图名称查找对应的视图实现,并将其返回给DispatcherServlet以便呈现给客户端。
视图(View): 是一个接口,它的实现类支持不同类型的视图,jsp,pdf等。

3.SpringMVC的工作原理或流程


①用户发送请求,前端控制器接到请求。
②前端控制器把请求分发给处理器映射器。
③处理器映射器根据url去找对应的处理器。
④获取处理器,返回给处理器映射器。
⑤处理器映射器返回给前端控制器。
⑥前端控制发给处理器适配器,请求执行处理器。
⑦处理器适配器通知处理器执行业务逻辑。
⑧然后处理器返回ModelAndView。
⑨处理器适配器把ModelAndView返回给前端控制器。
⑩前端控制器发给视图解析器,视图解析器根据视图名称去查询视图。
⑪返回真正的视图。
⑫渲染视图。
⑬返回视图,给前端控制器。
⑭然后响应用户的请求。

4.SpringMVC的优点


①支持各种视图。JSP、PDF等
②可以与spring集成。
③各个组件分工明确。解耦。

5.SpringMVC常用注解


@RequestMapping:用于处理请求的URL,可以用于方法或类。
@RequestBody:接受请求的json数据,转换成java对象。
@ResponseBody:将controller返回对象,转成json响应回去。
@RestController:相当于@Controller和@ResponseBody。
@PathVariable:用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值

6.SpringMVC和struts2的区别


①SpringMVC入口是servlet(前端控制器),struts2入口是过滤器。
②SpringMVC基于方法开发,struts2基于类开发。

7.怎么实现SpringMVC拦截器


①实现HandlerInterceptor接口。
②继承适配器类。

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


是单例模式,

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

9.在 SpringMVC 中拦截器的使用步骤是什么样的?


定义拦截器类: 创 建 一 个 类 实 现 HandlerInterceptor接口,重写接口中的抽象方法。这个接口包含了三个主要的方法:preHandle、postHandle和afterCompletion。
preHandle 方法: 在调用处理器之前调用该方法,如果该方法返回 true 则请 求继续向下进行,否则请求不会继续向下进行,处理器也不会调用。
postHandle 方法: 在调用完处理器后调用该方法 。
afterCompletion 方法: 在前端控制器渲染页面完成之后调用此方法。


2. 注册拦截器
拦截器创建完成后,需要在Spring MVC的配置中注册这个拦截器。这可以通过Java配置或XML配置来完成。

3. 使用拦截器
拦截器配置完成后,它将在指定的路径上拦截请求并执行相应的任务。

10.说一下SSM和SSH都代表哪些框架?


SSM:SpringMVC,Spring,Mybatis。
SSH:struts,Spring,Hibernate。

11.什么是DispatcherServlet(前端控制器)

SpringMVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

12.注解原理是什么

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。
我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注
解的方法,会最终调用AnnotationInvocationHandlerinvoke方法。该方法会从memberValues
这个Map中索引出对应的值。而memberValues的来源是Java常量池。

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

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

14. @Controller注解的作用

@Controller注解在Spring MVC中用于标记一个类作为控制器,使其能够处理HTTP请求,并与Spring容器进行集成,实现请求的映射、处理和视图的解析等功能。

15. @RequestMapping注解的作用

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

16.  @ResponseBody注解的作用

@ResponseBody作用是将控制器(Controller)层中的方法返回的对象,通过适当的转换器(如HttpMessageConverter)转换为指定的格式(如JSON、XML等),然后将这些转换后的数据写入到HTTP响应体(ResponseBody)中。

17. @PathVariable@RequestParam的区别

@PathVariable:用于获取URL路径中的变量值。在Spring MVC中,通常会使用RESTful风格的URL来处理请求,URL中可能包含一些占位符(如/users/{id}),其中{id}就是一个占位符,用来表示一个参数。@PathVariable注解就是用来处理这种情况的,它将URL中的模板变量映射到方法的参数上。
@RequestParam:用于获取请求参数的值。这些参数通常出现在URL的查询字符串中(即?后面的部分),或者作为POST请求的表单数据。@RequestParam注解可以将请求中的参数值绑定到方法的参数上。

18.Spring MVC怎么样设定重定向和转发的?

1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
2)重定向:在返回值前面加"redirect:",譬如"redirect:www.baidu.com"

19. Spring MVC怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
1)加入Jackson.jar
2)在配置文件中配置json的映射
3)在接受Ajax方法里面可以直接返回Object,List,但方法前面要加上@ResponseBody注解。

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

1)解决post请求乱码问题:
web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8
2get请求中文参数出现乱码解决方法有两个:
1、修改tomcat配置文件添加编码与工程编码一致,如下:
2、另外一种方法对参数进行重新编码:

21。Spring MVC的异常处理?

答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异

常处理器中添视图页面即可。

22. 怎样在方法里面得到Request,或者Session

答:直接在方法的形参中声明request,Spring MVC就自动把request对象传入。

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

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

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

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

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

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

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

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

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

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

### 关于Spring MVC的常见面试题 以下是关于Spring MVC的一些高频面试问题及其解答: #### 1. **什么是Spring MVC?** Spring MVC 是一种基于Java的轻量级Web开发框架,它是Spring Framework的一部分。它遵循MVC(模型-视图-控制器)设计模式,用于构建清晰分离的应用程序结构[^1]。 #### 2. **Spring MVC中的DispatcherServlet是什么?** `DispatcherServlet` 是Spring MVC的核心组件之一,作为前端控制器负责接收所有的HTTP请求并将其分发到相应的处理器(Handler)。通过配置文件或注解方式定义映射规则来实现这一过程[^1]。 #### 3. **Spring MVC如何处理请求流程?** 当客户端发起一个请求时,该请求会被转发给 `DispatcherServlet` 。随后按照如下顺序执行: - 调用合适的 HandlerMapping 来找到对应的 Controller; - 执行目标方法并将结果交给适配器进行解析; - 将最终的数据与逻辑视图名称返回至 DispatcherServlet ,再由其渲染实际页面后响应用户[^1]。 #### 4. **Spring Bean默认作用范围是什么?如果存在状态怎么办?** 在Spring容器中,默认情况下所有Bean都是以Singleton形式创建出来的。然而对于那些具有内部状态的对象来说可能会引发线程安全性方面的问题。因此建议要么让此类对象无状态化;要么考虑改变它们的作用域为Prototype从而每次注入新实例[^2]。 #### 5. **Spring MVC支持哪些类型的返回值?哪种更推荐使用?为什么?** 返回值可以是多种类型,包括但不限于String、ModelAndView等。其中较为常用的是String表示跳转路径名或者视图名字串。而 ModelAndView 则允许我们同时指定模型(Model)以及试图(View),不过通常为了简化代码书写习惯上还是倾向于采用字符串形式更好一些[^3]。 #### 6. **怎样向Session存储数据并通过Spring MVC管理生命周期?** 可以通过@SessionAttributes 注解读取特定属性保存进HttpSession 中直到超时期间结束为止。例如下面例子展示了如何利用Map接口参数自动绑定request scope内的键值对,并且还能把这些信息存入session里供后续访问[^4]: ```java @Controller @SessionAttributes(names={"key"}) // 或者 types={SomeType.class} public class ExampleController { @RequestMapping("/example") public String exampleMethod(@RequestParam String param, Map<String,Object> model){ model.put("attributeName","valueToBeStoredInSession"); return "viewName"; } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值