1.Spring MVC框架有什么用?
Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开发灵活且松散耦合的Web应用程序。
MVC模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑和UI逻辑,同时在所有这些元素之间提供松散耦合。
2.Spring MVC和Struts2的区别?
主要有以下几点区别:
1、Spring MVC是基于方法的拦截,即一个方法映射一个URL,是单例模式;而Struts2是基于类的拦截,每次请求就会创建一个Action,是多例模式。
2、Spring MVC 的入口是 Servlet,即:DispatcherServlet,而 Struts2 的入口Filter,即:StrutsPrepareAndExecuteFilter。
3、Spring MVC(Spring 3.0)可以做到0配置文件,而Struts2则不行。
4、SpringMVC开发效率、性能、安全性都要远高于Struts2。
3.Spring MVC 工作流程?
a.用户发送请求至前端控制器DispatcherServlet
b.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
c.处理器映射器根据请求url找到具体的处理器,生成处理器执行链 HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
d.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
e.执行处理器Handler(Controller,也叫页面控制器)。
f.Handler执行完成返回ModelAndView
g.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
h.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
i.ViewReslover解析后返回具体View
j.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
k.DispatcherServlet响应用户。
4.Spring MVC有哪些处理组件?
前端控制器(DispatcherServlet):主要负责捕获来自客户端的请求和调度各个组件。
处理器映射器(HandlerMapping):根据url查找后端控制器Handler。
处理器适配器(HandlerAdapter):执行后端控制器(Handler),拿到后端控制器返回的结果ModelAndView后将结果返回给前端控制器DispatcherServlet。
后端控制器(处理器)(Handler):主要负责处理前端请求,完成业务逻辑,生成ModelAndView对象返回给HandlerAdapter。
视图解析器(ViewResolver):主要负责将从DispatcherServlet中拿到的ModelAndView对象进行解析,生成View对象返回给DispatcherServlet。
5.Spring MVC的HandlerMapping 作用?
Spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。
HandlerMapping主要有三部分组成:HandlerMapping映射注册、根据url获取对应的处理器、拦截器注册。
6.Spring MVC的HandlerAdapter作用?
处理适配器:调用具体的方法对用户发来的请求来进行处理
7.HandlerMapping、HandlerAdapter 关系?
HandlerMapping是负责找到请求URL对应的控制器类(controller)
HandlerAdapter是负责找到控制器类(Controller)对应的方法。
8. Spring MVC怎么获取当前request?
主要用的有两种方法:
1.直接定义方法参数 HttpServletRequest
2.直接注入对象(不会有线程安全问题)
@Autowired
private HttpServletRequest request;
@RequestMapping("/user/login")
public String login(HttpServletRequest request){
}
Response/Session对象的获取方式同上。
9.Spring MVC怎么映射一个控制器类?
有两种处理方式:
1、正常跳转情况下使用@Controller注解。
2、如果整个类的请求方法是要在http body中输出结果,可以使用@RestController注解,相当于@Controller+@ResponseBody。
10.Spring MVC控制器是单例模式吗?
Spring MVC中的控制器(Controller)是单例模式,正常使用不会有问题,但不要使用全局成员变量,不然会造成线程安全问题。
11. Spring MVC控制器(Controller) 是线程安全的吗?怎么保证并发安全性?
Spring MVC控制器(Controller) 默认是单例模式,所以不是线程安全的,不要在Controller 中
定义及共享成员变量,否则会出现变量值错乱。
解决方法:
1)可以使用ThreadLocal线程副本包装一下;
2)将Controller改为多例模式:
@Scope(" prototype" )
12.Spring MVC常用的注解有哪些?
常用的的一些 Spring MVC注解:
@Component:创建一个普通的 Springbean。
@Controller:标识一个Web应用程序控制层。
@RestController:标识一个 Web 应用程序控制层,用于从 http body返回数据,相当于@Controller+ @ResponseBody
@Service:标识为服务层。
@Repository:标识为DAO层。
@RequestMapping:映射一个 URL的访问路径
@GetMapping:映射一个Get URL的访问路径。
@PostMapping:映射一个Post URL的访问路径
@ResponseBody:以http body响应数据。@PathVariable:将变量映射到URL路径上。
@RequestParam:接收指定名称的请求数。
@RequestBody:表示从http body接收参数。
13.Spring MVC可以用在控制器上的注解有?
可以用在控制器类上的注解举例:
1)@Controller
2)@RestController
3)@ResponseBody
4)@RequestMapping
5)@ControllerAdvice
6)@RestControllerAdvice
7)@SessionAttributes
8)@SessionAttribute
。。。
14. Spring MVC可以用在方法上的注解有?
@RequestMapping、@GetMapper(以此类推)、@ResponseBody
@ModelAttribute、@ExceptionHandler
15.Spring MVC可以用在方法参数上的注解有?
@PathVariable、@RequestParam、@RequestHeader、@RequestBody
@ModelAttribute
16.Spring MVC@RequestMapping有啥用?
1.映射URL路径,将http的请求地址映射到控制器(controller)类的处理方法上。
2、@RequestMapping注解可以定义在控制器类上,也可以定义在类里面的方法上。
17.Spring MVC获取请求参数有哪些方式?
1.使用HttpServletRequest获取
2.自动注入Bean属性(参数为对象,表单name值对应对象属性)
3.通过@PathVariable获取路径中的参数
4.@ModelAttribute获取POST请求的FORM表单数据
eg:public String processSubmit(@ModelAttribute(“pojo”) Pojo pojo) {}
18.Spring MVC怎么进行请求转发?
关键字:forward
如:
19.Spring MVC怎么进行请求重定向?
关键字:redirect
如:
20.Spring MVC怎么只接收POST请求?
方法上使用@PostMapping注解
21.Spring MVC怎么限制请求数据格式?
指定consumes参数,
eg:@RequestMapping(consumes = MediaType.APPLICATION_JSON_VALUE):只能接受处理Content-Type为“application/json”数据格式的请求。
22.Spring MVC怎么指定响应数据格式?
指定produces参数,
eg:@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE):只能接受处理Content-Type为“application/json”数据格式的请求。
23.Spring MVC怎么返回JSON格式数据?
方法一:方法上@ResponseBody注解
方法二:类上@RestController注解 = ResponseBody+Controller
24. Spring MVC怎么向前台页面传递数据?
1.request.setAttribute()方法
2.使用ModelAndView类
3.方法参数用Model、ModelMap、Map
25.Spring MVC怎么解决请求乱码问题?
使用springMVC提供的CharacterEncodingFilter字符集编码过滤器:
同时配置Tomcat server配置文件: