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中配置的DispatherServletContextLoadListener有什么用?
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";
}
 
复制代码

 



posted on   乐之者v  阅读(202)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示