1:MVC模型(Model-View-Controller)
是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的代码结构,组织的更加合理。
Model(模型)
应用程序中用于处理应用程序数据逻辑的部分,负责对数据库的存取数据。
View(视图)
负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器)
接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据交给给视图。也就是说控制器在中间起到一个调度的作
2:SpringMVC框架的核心组件以及流程
1.DispatcherServlet: 前端控制器,用来过滤客户端发送过来,想要进行逻辑处理的请求。
2.Controller/Headler: 控制器/处理器。开发人员自定义,用来处理用户请求的,并且处理完成之后返回给用户指定视图的对象。
3.HandlerMapping: 处理器映射器。DispatcherServlet接收到客户端请求的URL之后,根据一定的匹配规则,再把请求转发给对应的Handler,这个匹配规则由HandlerMapping决定。
4.HandlerAdaptor:处理器适配器。处理器适配器用来适配每一个要执行的Handler对象。通过HandlerAdapter可以支持任意的类作为处理器
5.ViewResolver:视图解析。Handler返回的是逻辑视图名,需要有一个解析器能够将逻辑视图名转换成实际的物理视图。而且Spring的可扩展性决定了视图可以由很多种,所以需要不同的视图解析器,解析不同的视图。但是一般由jsp充当视图的情况居多
3:获取参数请求
A: 无注解获取参数:参数名可以为空,但是参数名必须和HTTP请求中的参数保持一致。
B: @RequestParam 获取参数 来确定前后端参数的映射关系
C: 通过URL传递参数:通过处理器映射可以定位参数的位置和名称,@PathVariable可以通过名称来获取参数
4:数据的验证机制
A: springMVC 支持JSR-303注解验证的方式
B: 一般springBoot 会引入 Validate在前端验证
5:拦截器
DispatcherServlet根据 HandlerMapping找到对应的处理器。返回一个对象,包含处理器和拦截器。拦截器对处理器的功能拦截来增强处理器的功能。
开发拦截器:实现HandlerInterceptor (ɪntə'septə) 重写里面的三个方法
a: 处理器执行前方法 preHandle
b: 处理器执行后方法 postHandle
c: 处理器完成后方法 afterCompletion
实例: 通过拦截器获取项目的相对访问路劲
public class CommonInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String path = httpServletRequest.getContextPath();
String scheme = httpServletRequest.getScheme();
String serverName = httpServletRequest.getServerName();
int port = httpServletRequest.getServerPort();
String basePath = scheme + "://" + serverName + ":" + port + path;
httpServletRequest.setAttribute("basePath", basePath);
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
注册拦截器:这个拦截器Spring MVC 不会发现他需要注册才能拦截处理器,需要在配置文件中实现WebMvcConfigurer接口,最后覆盖器addInerceptors 进行注册拦截。
@Configuration
public class CommonInterceptorConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CommonInterceptor()).addPathPatterns("/**");
}
}
6:springmvc重定向
Redirect 就是通过各种方法将请求重新定义其他位置。