【SpringMVC 框架(自学)】Day04(域对象共享数据)--2022/4/14
三、域对象共享数据
环境部署
步骤:
- 配置Pom文件,添加War包
- 在Main目录下创建webapp文件并构建其为view层后,创建web.xml配置servlet
- 配置Filter(请求与响应的字符集,请求响应的格式:Get、Method)
- 配置Servler(视图解析器的位置:SpringMVC.xml、DispathcherServlet初始化时间)
配置视图解析器(SpringMVC):
- 组件扫描器
- Thymeleaf视图解析器
向request域共享数据
使用ServletAPI向Request域对象共享数据
@Controller
public class ScopeController{
@RequestMapping("/testRequestByServlet")
public String testRequestByServlet(HttpServletRequest request){
//setAttribute是键值对的形式
request.setAttribute("testRequestScope","hello,Servlet")
return "success"
}
}
<!--success页(引入Thymeleaf)-->
<p th:text= "${testRequestScope}"></p>
使用ModelAndView向request域对象共享数据
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
ModelAndView mav = new ModelAndView();
//使用数据模型:即request域对象共享的数据
mav.addObject("testRequestScope","hello,ModelAndView");
//设置视图信息
mav.setViewName("success");
}
使用Model向request域对象共享数据
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("testRequestScope","hello,Model")
return "success"
}
使用Map向request域对象共享数据
@RequestMapping("/testMap")
public String testMap(Map<String,Object> map){
map.put("testRequestScope","hello,Map")
return "success"
}
使用ModelMap向request域对象共享数据
@RequestMApping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("testRequestScope","hello,ModelMap")
return "success"
}
Model、ModelMap、Map之间的关系
当以上这些操作执行完毕的时候,通过在控制层(Controller)里输出每个向域对象共享数据的对象时,可以得到一下输出语句:
{testRequestScope=hello,Model}
{testRequestScope=hello,Map}
{testRequestScope=hello,ModelMap}
以上的输出语句,它们的输出结构相似,所以得进一步得到它们的类名,通过反射来得到:
org.springframework.validation.support.BindingAwareModelMap
三个语句返回的class类名都是:BindingAwareModelMap,那么去看它的底层结构:
public interface Model{}
public class ModelMap extends LinkedHashMap<String,Object>{}
public class ExtendedModelMap extends ModelMap implements Model{}
public class BindingAwareModelMap extends ExtendedModelMap{}
综上所述,这就是它的底层结构,Model、ModelMap、Map的实现都与它们有关:
(Map、Model、ModelMap):首先,Model它定义的是一个接口,而ModeMap则是继承了 LinkedHashMap,打到实现的效果,然后通过class类:ExtendedModelMap,继承了ModelMap,再去实现Model,最后class类BindingAwareModelMap,因为ModelMap继承了LinkedHashMap,所以可以用Map
向Session域共享数据
通过servletAPI向session域共享数据
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAtrribute("testSessionScope","hell,session")
return "success"
}
<p th:text="${session.key}"></p>
通过Application向session域对象共享数据
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContex();
application.setAtrribute("testSessionScope","hello,application");
return "success"
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?