知识点总结
- MVC设计模式
Spring MVC是基于MVC设计模式实现的框架,MVC设计模式将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。
- 模型:负责存储和处理数据,通常与数据库交互。
- 视图:负责UI的展示,通常是HTML页面或者JSP页面。
- 控制器:负责接收用户的请求并对请求进行处理,通常与业务逻辑交互。
通过MVC设计模式,Spring MVC清晰地分离了业务逻辑和UI展示,提高了代码的可维护性和灵活性。
- Spring MVC工作流程
Spring MVC的工作流程如下:
- 发送请求:用户发起一个请求到服务器。
- 前端控制器DispatcherServlet接收请求:DispatcherServlet是Spring MVC的核心控制器,负责接收所有请求并将请求路由到对应的处理器处理。
- 处理器映射器HandlerMapping映射处理器:HandlerMapping负责根据请求的URL和其他信息将请求映射到对应的处理器。
- 处理器适配器HandlerAdapter执行处理器:HandlerAdapter负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。
- 视图解析器ViewResolver解析视图:ViewResolver负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。
- 响应结果:根据最终选择的视图来生成相应的响应结果。
- Handler映射与适配器
HandlerMapping和HandlerAdapter是Spring MVC中的重要组件,它们负责将请求路由到对应的处理器进行处理,并将处理结果返回给前端控制器。
- HandlerMapping:负责根据请求的URL和其他信息将请求映射到对应的处理器。常见的HandlerMapping有RequestMappingsHandlerMapping和AnnotationMethodHandlerMapping。
- HandlerAdapter:负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。常见的HandlerAdapter有HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。
- 控制器(Controller)
在Spring MVC中,控制器负责处理用户的请求并返回响应结果。Controller的设计需要根据具体的业务场景进行优化,尽量保持简洁易懂、易于扩展和维护。
常见的控制器有:
- 基于注解的Controller:使用注解声明控制器类和请求处理方法,可以更直观地描述请求的处理过程。
- 基于XML的Controller:使用Spring XML配置文件来声明控制器和请求处理方法,可以统一管理控制器和请求处理方法。
- Restful风格的Controller:使用Restful风格的URL结构来处理请求,使得URL更加简洁明了,方便其他系统的接入和调用。
- 视图解析器(ViewResolver)
在Spring MVC中,视图解析器负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。常见的视图解析器有:
- InternalResourceViewResolver:通过字符串拼接的方式返回JSP页面的名称,实现简单。
- JstlView:基于JSTL实现的视图解析器。
- VelocityViewResolver:基于Velocity模板实现的视图解析器。
- 数据绑定与数据校验
数据绑定指的是将请求参数绑定到相应的对象属性上。Spring MVC通过DataBinder来实现数据绑定,将请求参数绑定到指定的Java Bean对象属性上。
数据校验是验证请求参数是否符合规定的校验规则。Spring MVC中通过Validator来实现数据校验,使用注解来声明校验规则。
- 异常处理
Spring MVC的异常处理方式比较丰富,可以定制化地实现异常处理逻辑。常见的异常处理方式有:
- 定义全局的异常处理器:通过在@ControllerAdvice注解的类中定义异常处理方法,实现全局的异常处理逻辑。
- 定义局部的异常处理器:通过在@Controller或@RequestMapping注解的方法中定义异常处理方法,实现局部的异常处理逻辑。
- 使用统一错误页面:在Spring MVC的配置文件中配置通用的错误处理页面,使得系统出现异常时能够返回通用的错误页面给用户。
- 文件上传
Spring MVC支持通过多种方式实现文件上传,如Servlet 3.0的标准API、Commons FileUpload和Spring MVC的Multipart Request API。同时,Spring MVC还提供了方便的上传进度监控和文件下载功能。
代码演示
Spring MVC作为基于MVC设计模式实现的框架,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。在Spring MVC中,Controller负责处理用户的请求并返回响应结果。下面详细介绍其中的工作流程:
- 发送请求
在Spring MVC中,用户发起一个请求到服务器。请求可以通过浏览器输入URL、点击链接或者通过Ajax等方式发起。
- 前端控制器DispatcherServlet接收请求
DispatcherServlet是Spring MVC的核心控制器,负责拦截所有的请求并将请求路由到对应的处理器处理。在Web.xml文件中配置DispatcherServlet:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 处理器映射器HandlerMapping映射处理器
HandlerMapping负责将请求路由到对应的处理器进行处理,并返回处理结果。在Spring MVC中,常见的HandlerMapping有RequestMappingHandlerMapping和AnnotationMethodHandlerMapping。下面是通过注解方式来实现RequestMappingHandlerMapping:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String listUsers(Model model) {
//处理请求
return "userList";
}
}
- 处理器适配器HandlerAdapter执行处理器
HandlerAdapter负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。在Spring MVC中,常见的HandlerAdapter有HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。下面是通过注解方式来实现AnnotationMethodHandlerAdapter:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String listUsers(Model model) {
//处理请求
return "userList";
}
}
- 视图解析器ViewResolver解析视图
ViewResolver负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。在Spring MVC中,常见的视图解析器有InternalResourceViewResolver、JstlView和VelocityViewResolver等。下面是通过InternalResourceViewResolver来实现视图解析:
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
- 数据绑定与数据校验
数据绑定指的是将请求参数绑定到相应的对象属性上。Spring MVC通过DataBinder来实现数据绑定,将请求参数绑定到指定的Java Bean对象属性上。同时,为了保证数据的有效性,Spring MVC提供了数据校验的机制。下面是实现数据绑定和数据校验的示例代码:
@RequestMapping(value = "/saveUser", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("user") @Valid User user, BindingResult result, Model model) {
if (result.hasErrors()) {
return "userForm";
} else {
//处理请求
return "redirect:/user/list";
}
}
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.addValidators(new UserValidator());
}
其中,@ModelAttribute用于将表单数据绑定到User对象中,@Valid用于开启数据校验,BindingResult用于存储校验失败的结果,@InitBinder用于注册数据校验器。
- 异常处理
Spring MVC的异常处理方式比较丰富,可以定制化地实现异常处理逻辑。常见的异常处理方式有定义全局的异常处理器、定义局部的异常处理器和使用统一错误页面等。下面是通过@ControllerAdvice和@ExceptionHandler实现全局的异常处理:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", ex);
mv.setViewName("error");
return mv;
}
}
其中,@ControllerAdvice用于指定处理所有Controller中的异常,@ExceptionHandler用于指定处理特定类型的异常。
- 文件上传
在Spring MVC中,文件上传可以使用Servlet 3.0的标准API、Commons FileUpload和Spring MVC的Multipart Request API等多种方式。下面是通过Spring MVC的Multipart Request API实现文件上传:
@RequestMapping(value="/uploadFile", method=RequestMethod.POST)
public String uploadFile(@RequestParam("file") MultipartFile file) {
//处理请求
return "redirect:/user/list";
}
其中,@RequestParam用于获取请求中的上传文件,MultipartFile是Spring MVC提供的文件上传对象。
文章评论