学无先后,达者为师

网站首页 编程语言 正文

springmvc中的model和HttpServletRequest的区别详细分析

作者:码农研究僧 更新时间: 2022-01-06 编程语言

前言

写代码的时候经常遇到model传值或者HttpServletRequest传值发现都可以
那两种的区别在于哪里呢

此处push出代码展示区别何在

//实现登判断,并进行相应的跳转
@RequestMapping("/login")
public String login(String name , String pwd, HttpServletRequest request){

    Admin admin = adminService.login(name,pwd);
    if(admin != null){
        request.setAttribute("admin",admin);
        //登录成功
        return "main";
    }else{
        //登录失败
        request.setAttribute("errmsg","用户名或密码不正确!");
        return "login";
    }

}

以及通过model书写的代码模块

//实现登判断,并进行相应的跳转
@RequestMapping("/login")
public String login(String name , String pwd, Model model){

    Admin admin = adminService.login(name,pwd);
    if(admin != null){
        model.addAttribute("admin",admin);
        //登录成功
        return "main";
    }else{
        //登录失败
        model.addAttribute("errmsg","用户名或密码不正确!");
        return "login";
    }

}

可以看到两者的区别在于函数名字不同而已
那其中蕴涵的原理又是如何

1. 定义

1.1 HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息

具体其功能函数有如下:

函数 功能
getRequestURL 返回客户端请求时的完整URL
getQueryString 返回请求行中的参数部分
getPathInfo 返回请求URL中的额外路径信息
getRemoteAddr 返回发出请求的客户机的IP地址
getRemoteHost 返回发出请求的客户机的完整主机名
getRemotePort 返回客户机所使用的网络端口号
getLocalAddr 返回WEB服务器的IP地址
getLocalName 返回WEB服务器的主机名

1.2 model

关于model的这个类

  • 只传输数据而不会自动寻址,由于model的每次请求会自动创建对象,所以不用new

ModelAndView会自动寻址,就会链接到WebCotent下的view,modelandview请求不会自动创建对象,每次使用都要new

关于ModelAndView这个类可以看我之前的文章
SpringMVC之ModelAndView类详细分析(全)

srpingMVC内部机制决定的,请求处理方法执行完成后,最终返回一个 ModelAndView 对象。

model数据最终还是写到HttpServletRequest属性中,只是model的写法更体现了MVC思想减少各层间耦合

2. 总结

  • Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中;
  • ModelAndView包含model和view两部分,使用时需要自己实例化,利用ModelMap用来传值,也可以设置view的名称

关于其写法的具体展示
具体如下:

  • 1.request.setAttribute("name","manongyanjiuseng");//把值存到request
    其取值具体是通过request.getAttribute(“manongyanjiuseng”)
  • 2.modelMap.addAttribute("name","manongyanjiuseng");//把值存到modelMap
    其取值具体是通过${manongyanjiuseng}
  • 3.model.addAttribute("name","manongyanjiuseng");//把值存到model
    其取值具体是通过${manongyanjiuseng}
  • 4.request.getSession.setAttribute("name","manongyanjiuseng");//先获取,在把值存到Session
    其取值具体是通过request.getSession().getAttribute(“manongyanjiuseng”)

以上取值中${manongyanjiuseng}这种方式是最快的
也就是model和HttpServletRequest,model的取值比较快

原文链接:https://blog.csdn.net/weixin_47872288/article/details/122362891

栏目分类
最近更新