JavaWeb-17-SpringMVC的响应返回数据

 

Table of Contents

 

一:如何将数据带回到前端

1:可以在方法处传入Map、或者Model或者ModelMap。

2:方法的返回值可以变为ModelAndView类型;

二:向Session中保存数据

1:@SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性

2:利用原生Api(Http)

三:利用@ModelAttribute隐含模型

1:当前台传送一个对象时,没传的值就为空

2:解决方法:希望有个方法可以直接先从数据库中查出来这个值;然后放在更新方法上

3:@ModelAttribute注解实例代码;


一:如何将数据带回到前端

1:可以在方法处传入Map、或者Model或者ModelMap。

 

给这些参数里面保存的所有数据都会放在请求域中。可以在页面获取
 *   关系:
 *      Map,Model,ModelMap:最终都是BindingAwareModelMap在工作;
 *      相当于给BindingAwareModelMap中保存的东西都会被放在请求域中;

代码:

    @RequestMapping("/res01")
    public String res01(Map map){

        map.put("msg","hello1");
        return "success";
    }

    @RequestMapping("/res02")
    public String res02(Model model){

        model.addAttribute("msg","hello2");
        return "success";
    }

    @RequestMapping("/res03")
    public String res03(ModelMap modelMap){

        modelMap.addAttribute("msg","hello3");
        return "success";
    }

 前端页面展示:

    <h1>成功!</h1>

    <h1>pageScope:${pageScope.msg}</h1>
    <h1>requestScope:${requestScope.msg}</h1>
    <h1>sessionScope:${sessionScope.msg}</h1>
    <h1>applicationScope:${applicationScope.msg}</h1>

2:方法的返回值可以变为ModelAndView类型;

/**
     * 返回值是ModelAndView;可以为页面携带数据,也可以指定视图名
     * @return
     */
    @RequestMapping("/res04")
    public ModelAndView res03(){
        之前的返回值我们就叫视图名;视图名视图解析器是会帮我们最终拼串得到页面的真实地址;
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        mv.addObject("msg","hello4");
        return mv;
    }

结果与上述相同;ModelAndView也是将数据放在请求域中

二:向Session中保存数据

1:@SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性

若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。

@SessionAttributes(value = "msg")

当给map中保存的数据,或者给ModelAndView中保存的数据,同同时,都给Serssion中保存一份;

@SessionAttributes(value = {"msg","haha"})

可以向session中存储多个值

  • @SessionAttributes(types={String.class})

可以按照字段类型向session中存储值

2:利用原生Api(Http)

导包:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

代码:

    @RequestMapping("/res05")
    public ModelAndView res05(){

        javax.servlet.http.HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
        session.setAttribute("msg","123");

        //之前的返回值我们就叫视图名;视图名视图解析器是会帮我们最终拼串得到页面的真实地址;
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        mv.addObject("msg","hello4");
        return mv;
    }

或者:

    @RequestMapping("/res06")
    public ModelAndView res06(HttpServletRequest httpServletRequest){
       httpServletRequest.getSession().setAttribute("msg","456");

        //之前的返回值我们就叫视图名;视图名视图解析器是会帮我们最终拼串得到页面的真实地址;
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        mv.addObject("msg","hello4");
        return mv;
    }

三:利用@ModelAttribute隐含模型

1:当前台传送一个对象时,没传的值就为空

2:解决方法:希望有个方法可以直接先从数据库中查出来这个值;然后放在更新方法上

3:@ModelAttribute注解实例代码;

1:可以定义在参数上:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了 @ModelAttribute 的方法。

2:可以定义在方法上:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参

实例代码:

@Controller
public class ModelAttributeController {

    @RequestMapping(value = "/moda01",method = RequestMethod.POST)
    public String mod01(@ModelAttribute("book") Book book,Model model){

        System.out.println("book:"+book);
        return "success";
    }

    @ModelAttribute
    public void modelAttribute(String name, Model model){
        System.out.println("name:"+name);
        Book book = new Book(name,1,"aaa");
        System.out.println("book:"+book);
        model.addAttribute("book",book);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java EE 项目的目录结构可以根据具体的需求进行灵活设计,但一般情况下,推荐使用以下的标准目录结构: ``` project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ ├── controller │ │ │ ├── dao │ │ │ ├── entity │ │ │ ├── service │ │ │ └── util │ │ ├── resources │ │ │ ├── mapper │ │ │ └── db.properties │ │ └── webapp │ │ ├── WEB-INF │ │ │ ├── classes │ │ │ ├── lib │ │ │ └── web.xml │ │ ├── css │ │ ├── js │ │ ├── images │ │ └── index.jsp │ └── test │ ├── java │ └── resources ├── target ├── pom.xml └── README.md ``` 其中,各个目录的作用如下: - `src/main/java`:存放项目的 Java 源代码,按照包名分层,一般包括 `controller`、`dao`、`entity`、`service` 和 `util` 等包; - `src/main/resources`:存放项目的配置文件和资源文件,一般包括数据库连接配置文件 `db.properties`、MyBatis 的 mapper 文件等; - `src/main/webapp`:存放 Web 应用的 Web 资源,包括 JSP 页面、CSS 样式表、JavaScript 脚本等; - `src/test/java`:存放项目的测试代码; - `src/test/resources`:存放测试代码所需要的资源文件; - `target`:存放编译后的 .class 文件、打包后的 .war 文件等; - `pom.xml`:Maven 项目管理工具的配置文件; - `README.md`:项目说明文件。 以上是一种常见的 Java EE 项目目录结构,但并不是唯一的标准。在实际开发中,可以根据项目的具体需求进行合理的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值