【SpringMVC 框架(自学)】Day04(域对象共享数据)--2022/4/14

三、域对象共享数据

环境部署

步骤:

  • 配置Pom文件,添加War包
  • 在Main目录下创建webapp文件并构建其为view层后,创建web.xml配置servlet
  • 配置Filter(请求与响应的字符集请求响应的格式:Get、Method)
  • 配置Servler(视图解析器的位置:SpringMVC.xmlDispathcherServlet初始化时间)

配置视图解析器(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"
}

posted @   VVS,冷漠的心  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?

囚鸟该如何超越今生?

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