此处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的取值比较快