1.工作流程
(1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet拦截。
(2)DispatcherServlet拦截到请求后,会调用HandlerMapping(处理器映射器)。
(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。
(5)HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。
(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。
(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。
(8)前端控制器请求视图解析器根据逻辑视图名解析真正的视图。
(9)ViewResolver解析后,会向DispatcherServlet中返回具体的View(视图)。
(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。
(11)前端控制器向用户响应结果,浏览器将结果呈现给用户。
在上述过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行的,开发人员只需要配置DispatcherServlet,完成Controller中的业务处理并在View中展示相应信息。
2.DispatcherServlet****类
DispatcherServlet是前端控制器,是整个流程控制的中心。该类拦截了客户端的请求之后,会根据具体规则将请求交给其他组件处理,从而降低了组件之间的耦合性。
3.Controller****接口
SpringMVC将Controller接口的实现类组件名,作为请求访问的URL进行映射,进而执行handleRequest()方法中的业务逻辑代码。
4.@RequestMapping****注解
@RequestMapping注解用于建立请求URL和Handler(处理器)之间的映射关系,该注解可以标注在方法上和类上。
(1)标注在方法上时,注解内value值对应到浏览器中输入的访问地址(站点名之后URL字符串)。
请求地址:http://localhost:8080/chapter01/hello
@Controller
public class MyController {
private static final Logger logger=Logger.getLogger(MyController.class);
@RequestMapping("/hello")
public String sayHello() {
logger.info("访问到MyController!");
return "hello";
}
}
(2)
标注在类名上时,注解内value值相当于设置了本处理器类的命名空间,类中所有请求地址应为命名空间名+方法映射地址名。
请求地址:http://localhost:8080/chapter01/api/hello
@Controller
@RequestMapping("/api")
public class MyController {
private static final Logger logger=Logger.getLogger(MyController.class);
@RequestMapping("/hello")
public String sayHello() {
logger.info("访问到MyController!");
return "hello";
}
}
(3)包含的传递参数
属性名
类型
描述
name
String
可选属性,用于为映射地址指定别名。
value
String[]
可选属性,也是默认属性,用于指定请求的URL。
method
RequestMethod[]
可选属性,用于指定该方法可以处理哪种类型的请求方式。
params
String[]
可选属性,用于指定客户端请求中参数的值,必须包含哪些参数的值,才可以通过其标注的方法处理。
headers
String[]
可选属性,用于指定客户端请求中,必须包含哪些header的值,才可以通过其标注的方法处理。
consumes
String[]
可选属性,用于指定处理请求的提交内容类型(Content-type)。
produces
String[]
可选属性,用于指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
(4) 组合注解
从Spring 4.3版本开始,还可以使用组合注解完成客户端请求方式的限定。
•
@GetMapping:匹配GET方式的请求;
•
@PostMapping:匹配POST方式的请求;
•
@PutMapping:匹配PUT方式的请求;
•
@DeleteMapping:匹配DELETE方式的请求;
•
@PatchMapping:匹配PATCH方式的请求;
5.ModelAndView****类
ModelAndView类用于封装Controller的处理结果,除了包含数据之外,还包含要跳转的页面。
版权归原作者 冰芒猓 所有, 如有侵权,请联系我们删除。