介绍
what:
- 是一种轻量级开发框架
- 包含多种视图技术,例如JSP (JavaServer Pages)、Velocity等
- 百度
mvc:
- model模型 JavaBean对象
- view视图 jsp技术
- controller控制器 servlet技术(接收请求)
优点
- 通过一套注解,无须实现任何接口,
- 支持restful编程风格的请求
原理
- DispatcherServlet表示前置控制器,是SpringMVC的控制中心,接受并拦截用户发出的请求。
- 例如:
- 一个为http://localhost:8080/SpringMVC/hello的URL地址表示请求位于本地服务器8080端口上的SpringMVC站点的hello控制器地址
- HandlerMapping为处理器映射。前置控制器调用HandlerMapping时,HandlerMapping会根据请求的Url查找HandlerExecution ↓ ↓ ↓
- HandlerExecution表示具体的执行者,作用是根据url查找控制器,例如hello
- HandlerExecution将解析后的信息传递给前置控制器
- 前置控制器通过HandlerAdapter(处理器适配器)找到具体的Controller执行
- Controller进入service,dao将处理好的具体执行信息(ModelAndView)返回给HandlerAdapter
- HandlerAdapter将ModelAndView返回给前置控制器
- 前置控制器调用视图解析器ViewResolver来解析HandlerAdapter传递的逻辑视图名
- 视图解析器ViewResolver将解析好的逻辑视图view传给前置控制器
- 前置控制器根据视图解析器传递的视图结果,调用具体的视图显示给用户。
举个栗子:
注解-@controller
/**
* @Controller 表示当前类是一个控制器
*/
戳我☞ @Controller和@RequestMapping的区别
注解-@RequestMapping
/**
* @RequestMapping("/app/home")
* 表示在SpringMVC中注册一个控制器,请求地址是http://**/工程名/app/home
*/
栗子
@Slf4j
@RestController
@RequestMapping("/app/home") //此类的共同路径
public class HomeController extends AbstractController {
@Reference(version = "1.0.0")
private HomeApi thirdHomeApi;
@ApiOperation("获取信息")
@GetMapping("/info/{homeId}") //此类中,此方法的路径
public CommonResponse getHomeAllInfo(@PathVariable String homeId) {
List<InfoVo> Info = thirdHomeApi.getInfo(homeId);
return objectResponse(ResponseCodeEnum.SUCCESS,Info);
}
}
常见面试题
1、在配置SpringMVC的时候,一般会配哪些东西呢?
- 在springMVC的主配置文件中配置Controller扫描包,配置springMVC的三大组件,并且在web.xml中配置前端控制器
2、springMVC的三大组件是什么
- 处理器映射器HandlerMapping、处理器适配器HandlerAdapter、视图解析器ViewResolver
3、在class上添加RequestMapping(url)有什么用?
- 指定通用请求前缀,限制此类下的所有方法请求url必须以请求前缀开头。 (统一请求父路径)
4、 @ResponseBody注解的作用是什么?
- @ResponseBody注解实现将Controller方法返回的java对象转换为JSON数据格式响应给客户端。
5、在发送Post请求时,经常会出现乱码的问题,是如何解决的?
- web.xml中配置一个过滤器。
<!-- 解决post乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>