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";
}
}