SpringMVC学习总结
一:Spring MVC简介:
Spring MVC是一个基于Java的Web框架,用于构建灵活和高效的Web应用程序。
它遵循MVC(模型-视图-控制器)架构模式,将应用程序分为模型、视图和控制器三个组件。
二:组件解析和配置:
在Spring MVC中,通过@Configuration注解和@EnableWebMvc注解来配置和启用Spring MVC。
@Configuration注解用于指示配置类,其中包含了创建Bean的方法。
@EnableWebMvc注解用于启用Spring MVC的功能,例如请求映射、数据绑定等。
三:数据响应:
Spring MVC可以使用ModelAndView对象返回视图和模型数据。
ModelAndView是一个包含视图名称和模型数据的对象,它可以在控制器方法中返回。
可以使用@ResponseBody注解将方法的返回值直接作为响应的内容发送给客户端,例如纯文本或JSON格式的数据。
示例代码:
@Controller
public class MyController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView modelAndView = new ModelAndView("hello"); modelAndView.addObject("message", "Hello, Spring MVC!");
return modelAndView; }
@RequestMapping("/json")
@ResponseBody
public Map<String, String> json() {
Map<String, String> data = new HashMap<>(); data.put("message", "Hello, JSON!"); return data; } }
在上面的示例中,hello()方法返回一个名为"hello"的视图,并将"message"属性设置为"Hello, Spring MVC!"。json()方法使用@ResponseBody注解返回一个包含"message"属性的JSON对象。
四:请求处理:
Spring MVC使用@RequestMapping注解来处理请求。
可以使用value属性指定URL路径,method属性指定请求方法,params属性指定请求参数等。
控制器方法可以接受HttpServletRequest和HttpServletResponse对象作为参数,还可以接受其他类型的参数,例如路径变量、请求参数等。
示例代码:
@Controller
public class MyController {
@RequestMapping(value = "/greet/{name}", method = RequestMethod.GET)
public ModelAndView greet(@PathVariable("name") String name) {
ModelAndView modelAndView = new ModelAndView("greet"); modelAndView.addObject("message", "Hello, " + name); return modelAndView; } @RequestMapping(value = "/search", method = RequestMethod.GET)
public ModelAndView search(@RequestParam(“keyword”) String keyword) { // 处理搜索逻辑 } }
在上面的示例中,greet()方法使用@PathVariable注解接受名为"name"的路径变量作为参数。search()方法使用@RequestParam注解接受名为"keyword"的请求参数作为参数。
五:文件上传:
Spring MVC可以处理文件上传,使用@RequestParam注解和MultipartFile类型的参数来接受上传的文件。
MultipartFile是Spring提供的表示上传文件的接口,可以通过它获取文件的内容、名称、大小等信息。
示例代码:
@Controller
public class MyController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 } }
在上面的示例中,handleFileUpload()方法使用@RequestParam注解接受名为"file"的文件参数作为MultipartFile类型的参数。
六:拦截器:
Spring MVC提供了拦截器(Interceptor)来拦截请求并执行相应的逻辑。
可以通过实现HandlerInterceptor接口,并在配置类中添加拦截器来进行配置。
拦截器可以在请求处理之前或之后执行一些公共的逻辑,例如身份验证、日志记录等。
示例代码:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前执行的逻辑 }
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求处理之后执行的逻辑 } }
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()); } }
在上面的示例中,创建了一个名为MyInterceptor的拦截器,并在配置类中通过addInterceptors()方法将其添加到拦截器注册表中。
七:异常处理:
Spring MVC提供了异常处理机制,可以通过@ControllerAdvice注解和@ExceptionHandler注解来处理全局的异常。
@ControllerAdvice注解用于指示全局异常处理类,其中包含了处理不同类型异常的方法。
@ExceptionHandler注解用于指定处理特定类型异常的方法,并在方法中返回错误页面或错误消息。
示例代码:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex) {
ModelAndView modelAndView = new ModelAndView("error"); modelAndView.addObject("errorMessage", ex.getMessage());
return modelAndView; } }
在上面的示例中,handleException()方法用于处理Exception类型的异常,并返回名为"error"的视图,其中包含了错误消息。
八:注解模式:
在Spring MVC中,可以使用@RestController注解和@RequestMapping注解来创建RESTful风格的API。
@RestController注解用于指示控制器类,并表示所有的处理方法都以JSON格式作为响应内容。
@RequestMapping注解用于指定URL路径和请求方法,支持HTTP的GET、POST、PUT、DELETE等方法。
示例代码:
javaCopy Code
@RestController
@RequestMapping("/api")
public class MyRestController {
@GetMapping("/data") public String getData() {
return "Some data from the API"; } }
在上面的示例中,getData()方法使用@GetMapping注解指定了URL路径"/api/data"和HTTP的GET方法,返回一个字符串作为响应内容。