SpringMVC中在Controller层将内容保存至request域和session域中的常用方法

request域的存值方法:

package com.lcz.controller;

import com.lcz.pojo.Car;
import com.lcz.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.Map;

@Controller
public class EmpController {

    /* 将内容存至request域中有4中方法
     1、使用map集合,方法的参数为map集合,在put添加时自动存放到request域中*/
    @RequestMapping("/setRequest01")
    public String setRequest01(Map<String, Object> map) {
        map.put("empId", 123);
        map.put("empName", "张三");//存到域里面的值,名就是key,值就是value
        return "/userList.jsp";
    }

    /*2、使用Model的addAttribute方法*/
    @RequestMapping("setRequest02")
    public String setRequest02(Model model) {
        model.addAttribute("empName", "王五");
        Car car = new Car();
        car.setCarNum(123);
        car.setCarName("保时捷");
        model.addAttribute("car", car);//也可以将pojo类型存到域中
        /*默认存到request域中的名字是:对应类首字母小写 Car类--->car  String-->string*/
        model.addAttribute(car);
        return "/userList.jsp";
    }

    /*3、使用ModelMap的put或者addAttribute方法*/
    @RequestMapping("/setRequest03")
    public String setRequest03(ModelMap modelMap) {
        /*ModelMap更像是保留了map集合的特性和model的特性,两个的方法都可以调用,都可以存到request域中*/
        modelMap.put("empName", "赵六");
        modelMap.addAttribute("empId", 1234);
        return "/userList.jsp";
    }

    /*4、使用ModelAndView,一般作为方法的返回值,好处,不仅可以给request域赋值,也可以设置跳转路径*/
    @RequestMapping("/setRequest04")
    public ModelAndView setRequest04(){
        ModelAndView modelAndView =new ModelAndView();
        modelAndView.addObject("empName","田七");
        Car car =new Car();
        car.setCarNum(234);
        car.setCarName("法拉利");
        modelAndView.addObject("carMax",car);
        /*如果没有写名,那么默认的名也是对应类首字母小写*/
        //ModelAndView的一大优势:
        //也可以设置跳转路径
        modelAndView.setViewName("/userList.jsp");
        return modelAndView;
    }

    /*扩展:方法的形参若是pojo类型的,则在接收完请求的数据(pojo)后也会自动存入request域中*/
    @RequestMapping("/setRequest05")
    public String setRequest05(Car car){//在拿到car后,会自动存入request域中
        return "/userList.jsp";
    }
}

session域的存取值方法:

package com.lcz.controller;

import com.lcz.pojo.Emp;
import com.lcz.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;

import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.Objects;

@Controller
//指的是当键为userName1或者userName3时,在进入request域之后会自动进入session域中
//@SessionAttributes(value = {"userName1","userName3"})
/*
这里指的是value:通过键名选择指定的名进入session域   types:通过类型选择指定的类型会进入session域
如果两个都写的话,是两个都生效
*/
@SessionAttributes(value = {"userName1", "userName3"}, types = {User.class, Emp.class})
public class EmpSessionController {
    @RequestMapping("/index")
    public String index(Map<String, Object> map) {
        map.put("userName1", "张三");
        map.put("userName2", "李四");
        map.put("userName3", "王五");
        return "/userList.jsp";
    }

    /*
    问题:使用SpringMVC的方式,这样把内容存到session域的时候总是要经过request域的存储才可以
    使用原有的方式直接可以把内容存到session域中
    */
    @RequestMapping("/testSeesion")
    public String testSession(HttpSession session) {
        session.setAttribute("userName", "张三");//这样的存储方式不需要经过request域的存储
        return "/userList.jsp";
    }

    /*那么使用SpringMVC的方式如何通过session去取值呢*/
    /*使用注解:SessionAttribute-->取指定名字的session域中存储的值*/
    @RequestMapping("/getSessionInfo")
    public String getSessionInfo(@SessionAttribute("userName3") String name) {//方法的形参名可以随意写,因为是根据注解中的名字来取的值
        System.out.println("userName3:" + name);
        return "/userList.jsp";
    }
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值