spring:详解spring MVC

spring MVC

SpringMVC是一种基于Java的MVC(Model-View-Controller)Web开发框架,通过将业务逻辑、数据和界面分离,使得开发人员能够更高效地管理和维护代码,提高应用的可扩展性和可维护性。

SpringMVC核心概念

  1. Controller:Controller是SpringMVC的核心,负责接收和处理用户请求。Controller通过解析请求并将处理结果传递给相应的View来响应用户操作。
  2. Model:Model代表应用程序的数据和业务逻辑,是应用程序的核心。在SpringMVC中,Model通常由JavaBean或POJO(Plain Old Java Object)实现。
  3. View:View负责呈现用户界面,通常是HTML页面。在SpringMVC中,View可以通过JSP(Java Server Pages)、Thymeleaf等模板引擎来实现。

spring MVC常用注解

以下是一些常用的Spring MVC注解:

  1. @Controller:用于标记一个类作为Spring MVC控制器。该类负责处理用户请求并返回视图。
  2. @RequestMapping:用于映射Web请求到特定的控制器方法。它可以用于类级别和方法级别。
  3. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:这些注解用于映射HTTP请求方法到特定的控制器方法。它们是@RequestMapping的快捷方式。
  4. @PathVariable:用于绑定URL路径变量到控制器方法的参数。
  5. @RequestParam:用于绑定请求参数(query parameters或form data)到控制器方法的参数。
  6. @RequestBody:用于绑定请求体(POST或PUT请求的数据)到控制器方法的参数。
  7. @ResponseBody:用于指示控制器方法返回的数据应直接写入HTTP响应体中,而不是通过视图进行渲染。
  8. @ModelAttribute:用于将表单提交的数据绑定到Java对象,或者将额外的数据添加到模型中。
  9. @SessionAttributes:用于将模型数据存储到HTTP会话中,以便在不同的请求之间保持状态。
  10. @RequestHeader:用于绑定HTTP请求头到控制器方法的参数。
  11. @CookieValue:用于绑定Cookie到控制器方法的参数。
  12. @InitBinder:用于自定义数据绑定的方法,例如自定义日期格式化。
  13. @ExceptionHandler:用于处理控制器方法抛出的异常,并返回相应的视图或响应。
  14. @Autowired、@Resource、@Qualifier:这些注解用于在控制器中注入依赖项,例如数据访问对象(DAO)或其他服务类。
    这些是常用的Spring MVC注解,但还有其他注解可用于处理更高级的功能,如拦截器、参数校验、文件上传等。

注解举例

java 复制代码
@Controller  
public class UserController {  
    // controller methods and logic here  
}
java 复制代码
@Controller  
@RequestMapping("/users")  
public class UserController {  
    @RequestMapping("/list")  
    public String listUsers(Model model) {  
        // handle logic for user list  
        return "users/list";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @GetMapping("/users")  
    public String listUsers(Model model) {  
        // handle logic for GET request  
        return "users/list";  
    }  
}
java 复制代码
@Controller  
@RequestMapping("/users/{userId}")  
public class UserController {  
    @GetMapping  
    public String getUser(@PathVariable("userId") Long userId, Model model) {  
        // handle logic for specific user  
        return "users/detail";  
    }  
}
java 复制代码
@Controller  
@RequestMapping("/users")  
public class UserController {  
    @PostMapping("/update")  
    public String updateUser(@RequestParam("name") String name, @RequestParam("email") String email, Model model) {  
        // handle logic for updating user information  
        return "users/update";  
    }  
}
java 复制代码
@Controller  
@RequestMapping("/users")  
public class UserController {  
    @PostMapping("/create")  
    public String createUser(@RequestBody User user, Model model) {  
        // handle logic for creating a new user  
        return "users/create";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @GetMapping("/users/{userId}")  
    @ResponseBody  
    public User getUser(@PathVariable("userId") Long userId) {  
        // handle logic for specific user  
        return user;  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @ModelAttribute("user")  
    public User createUser(@RequestParam String name, @RequestParam String email) {  
        // create user object and set properties  
        User user = new User();  
        user.setName(name);  
        user.setEmail(email);  
        return user;  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @GetMapping("/login")  
    public String login(Model model) {  
        // handle login logic and set user data in session  
        HttpSession session = request.getSession();  
        session.setAttribute("user", userData);  
        return "login";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @GetMapping("/users")  
    public String getUsers(@RequestHeader("Authorization") String authorizationHeader, Model model) {  
        // handle logic for getting users based on authorization header  
        return "users/list";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @GetMapping("/logout")  
    public String logout(@CookieValue("USER_TOKEN") String token) {  
        // handle logic for logout based on user token cookie  
        return "logout";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @InitBinder  
    public void initBinder(WebDataBinder binder) {  
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        dateFormat.setLenient(false);  
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @ExceptionHandler(UserNotFoundException.class)  
    public String handleUserNotFoundException(UserNotFoundException e, Model model) {  
        // handle logic for handling user not found exception and set error message in model  
        model.addAttribute("errorMessage", "User not found.");  
        return "error";  
    }  
}
java 复制代码
@Controller  
public class UserController {  
    @Autowired  
    private UserDao userDao;  
    // or  
    @Resource(name = "userDao")  
    private UserDao userDao;  
    // or  
    @Qualifier("userDao")  
    private UserDao userDao;  
}
相关推荐
cfm_29147 分钟前
Spring AI Tool 调用架构全解
java·人工智能·spring
sun༒19 分钟前
Spring @Scheduled 定时任务详解:Cron表达式、执行顺序、优先级与并行调度
java·后端·spring
一次旅行29 分钟前
DeepSeek‑V4‑Flash‑Vision‑Exp 小白入门实战|3种传图方式、完整可跑代码、避坑排障
java·前端·人工智能
野生技术架构师1 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
java·spring boot·后端
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
奥莱维1 小时前
KNX酒店方案_KNX专用线与高端酒店技术逻辑
java·服务器·前端·数据库
工业一体机老司机1 小时前
Linux工业一体机自启动服务配置:systemd服务单元编写与开机优化实战
java·linux·服务器
weixin_538601972 小时前
智能体测开Day56
java
杨丰玮4182 小时前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(五)
java·python·游戏·游戏引擎·图形渲染·动画·贴图
莫得感情 o2 小时前
踩坑 - 压测三轮后 502:一个默认 10 的连接池如何拖垮整个服务
java