SpringMVC总结
Spring MVC框架
一、SpringMVC运行步骤:
1.DispatcherServlet接收客户端的请求;
2.DispatcherServlet使用HandlerMapping查找负责处理该请求的Controller处理器
3.DispatcherServlet将请求分发给对应的Controller处理器
4.Controller处理器完成业务处理后,返回ModelAndView对象
5.DispatcherServlet调用ViewResolver组件对ModelAndView中的逻辑视图名进行解析,
得到真实的视图对象
6.DispatcherServlet对模型对象Model进行视图渲染
二、web.xml配置
Web.xml中配置的DispatherServlet、ContextLoadListener有什么用?
DispatherServlet在web.xml中配置,用于拦截匹配的Request,依据规则分发给Controller处理。
DispatherServlet还可以配置url的后缀。返回响应页面给客户端
三.Controller层注解参数
0.@Controller修饰类,表明该类是属于Controller层的
Controller层可以接收请求,绑定参数,处理方法,响应到视图
1.@RequestMapping为控制器指定可以处理哪些 URL 请求
比如,@RequestMapping("/user")用于处理/user路径下的请求
2.返回的字符串对应的是视图的名称
3.@RequestParam(value="name")String name , 在Controller层的方法参数中, 相当于request.getParameter("name")
4.@ResponseBody 可以以json等格式返回对象,注解作用于方法上方
5.@RestController相当于@ResponseBody 加 @Controller
用@RestController修饰类,那么类里面的方法就相当于有了@ResponseBody,会通过Url生成json.
6.@PathVariable可以将url中占位符 { 变量 } 里面输入的数据绑定到对应的方法参数上。
7.@RequestBody 注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。可以用于方法参数。
我之前有一次在写Controller层里的某个参数为JSONObject的方法时,忘了在参数前面加上@RequestBody,结果用PostMan测试接口,一直出错。
后来在方法里面打断点,调试发现一直没有进入方法里,于是才发现是@RequestBody的坑。。
@Controller @RequestMapping("/user") public class UserController { @Resource(name = "userService") private UserServiceImpl userService; //根据用户id查询用户信息 //通过 http://localhost:8080/user/showUser?id=1访问 @RequestMapping("/showUser") public String toIndex(HttpServletRequest request, Model model){ int userId = Integer.parseInt(request.getParameter("id")); User user = this.userService.getUserById(userId); model.addAttribute("user", user); return "showUser"; } //查询所有的用户 @RequestMapping("/showUsers") public String toShowUsers(HttpServletRequest request) { List<User> userList; userList=this.userService.showUsers(); request.setAttribute("userList",userList); return "showUsers"; } //在数据库中插入表单提交的新用户数据 @RequestMapping("/insert") public String toInsert(HttpServletRequest request, Model model) { int id=Integer.parseInt(request.getParameter("userId")); String account=request.getParameter("account"); String password=request.getParameter("password"); int age=Integer.parseInt(request.getParameter("age")); User user=new User(id,account,password,age); this.userService.insertUser(user); request.setAttribute("user",user); //设置属性,便于在前端页面获取数据 return "finishRegister"; } //尝试从页面请求中获取参数到后台 @RequestMapping("/param") public String testRequestParam(@RequestParam(value="userId") Integer id, @RequestParam(value="account")String userName,
@RequestParam(value="age")int age, @RequestParam(value = "password")String password,
HttpServletRequest request){ User user=new User(id,userName,password,age); request.setAttribute("user",user); return "finishRegister"; } @RequestMapping("/test") public String toTest(){ return "test"; } @RequestMapping("/register") public String toRegister() { return "register"; } //返回json数据 @ResponseBody @RequestMapping("/json") public User getJson(){ User user=new User(); user.setAge(30); user.setId(22); user.setUserName("feng"); user.setPassword("feng"); return user; }
// url占位符输入的数据绑定到方法参数userName,比如,输入http://localhost:8080/user/lin时,userName会赋值为lin
@RequestMapping("/{account}")
public String testParam(@PathVariable("account") String useName){
System.out.println(useName);
return "test";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了