0. 基础

基本概念


知道Spring MVC框架,大家就一定要了解Controller, Controller是MVC的核心,它负责处理所有客户端发过来的请求,并对请求进行处理,并转发给浏览器。

Controller中Action的返回值

Action是Controller中处理具体请求的方法,Action的返回值有以下几种类型,String, ModelAndView, Void, Map等。

  @RequestMapping(value = "index")
  public String Index() {
      System.out.print("123");
      return "index";
  }

  @RequestMapping(value = "viewone")
  public ModelAndView viewone() {
      ModelAndView mv = new ModelAndView();

      mv.setViewName("viewone");//设置返回模板名称
      mv.addObject("name", "Hello World");//设置参数值,在前台页面可以通过获取到
      return mv;
  }

  @RequestMapping(value = "viewtwo")
  public String viewtwo() {
      System.out.print("viewtwo");
      return "redirect:/Home/viewone";
  }


  @RequestMapping(value = "viewthree")
  public void viewthree() {
      System.out.print("viewthree");
  }

  @ResponseBody()
  @RequestMapping(value = "viewfour")
  public Map<String, String> viewfour() {
      System.out.print("viewfour");
      Map<String, String> map = new HashMap<String, String>();
      map.put("id", "1");
      map.put("age", "20");

      return map;
  }

Spring Mvc请求参数传递

1. 常规参数属性设置

//http://localhost:8080/test?id=1
@RequestMapping(value="test")
public String Detail3(HttpServletRequest request)
{
	System.out.print(request.getParameter("id"));
	return "test";
}
//http://localhost:8080/test?id=1
@RequestMapping(value="test")
public String Detail(int id)
{
	// id必须传值,而且必须是数字,负责会报异常 页面URL格式如下,从URL中获取id,
	System.out.print(id);
	return "test";
}

2. 注解配置

  • @RequestParam
  • @RequestMapping
      @RequestMapping(value="ProductIndex",params={"id=1","code","!name"},method={RequestMethod.GET})
  • @PathVariable

@ModelAttribute属性和@SessionAttribute属性

@ModelAttribute属性和@SessionAttribute属性主要用来在不同控制器和模型之间共享数据.默认情况下,map的信息只是在request当前请求有效,如果想在一个controller中共享数据,可以使用这两个属性。

1. @ModelAttribute @ModelAttribute可以用在action方法上,也可以用在Controller上,一个Controller中标记@ModelAttribute的方法在其他方法执行前先执行。在调用所有方法之前先执行@ModelAttribute标记的方法

@Controller
@RequestMapping("/User")
public class UserController {

	@RequestMapping(value="userdetail")
	public String userdetail(){
		return "userdetail";
	}
	@ModelAttribute("username")
	public String GetUserName(){
		//访问controller之前,先执行@ModelAttribute标记的方法,可以在前台页面访问到共享数据
		return "公用账户";
	}
}

2. @SessionAttributes 使用SessionAttributes可以将map中的信息放置到session中共享,通常情况下SessionAttributes主要标记在controller上,指定哪些信息需要存放到session中,下面的代码我们将id存放到session中

@Controller
@RequestMapping("/User")
@SessionAttributes("id")
public class UserController {
	@RequestMapping(value="userdetail")
	public String userdetail(ModelMap model){
		model.addAttribute("id", "0001");
		return "userdetail";
	}

	@ModelAttribute("username")
	public String GetUserName(){
		//访问controller之前,先执行@ModelAttribute标记的方法,可以在前台页面访问到共享数据
		return "公用账户";
	}
}

区别:

  • 使用SessionaAttributes标记的属性主要把信息放到session中,主要标记在Controller上。
  • 使用ModelAttribute标记的主要用在方法上,然后在Action的方法参数里面加上ModelAttribute标记可以访问到。