SpringMVC(4)形参使用pojo会自动创建一个pojo对象到这次请求响应中

核心代码

controller层

package controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pojo.Student;

//@Controller标注是一个类是Web控制器,
//url可以对这个类进行访问
@Controller
public class TestController {
	
	//因为web.xml里面定义了“映射路径.do”
	//所以,URL路径为t9.do
	@RequestMapping("t9")
	public String test9(Student stu) {//pojo自动传递参数到页面
		//测试路径:http://localhost:8080/testSpringMVC0/t9.do?name=zhangsan&age=10
		//返回值类型是String,因为在SpringMVC中配置了前缀和后缀,
		//所以,默认跳转到 “前缀+映射路径+后缀”页面,即/WEB-INF/returnString2.jsp页面
		
		/*
		 * 注意:这里pojo是Student,Model会自动在addAttribute方法中创建student的对象,并携带student数据
		 * 即,即使什么也不写,只要使用了pojo(这里pojo是Student),就会自动创建一个m.addAttribute("student",stu);
		 * 
		 * pojo会自动调用addAttribute(name,value)方法,创建一个和类名相同首字母小写的name,value是pojo对象
		 */
		
		return "returnString";//默认转发
	}
	
	@RequestMapping("t10")
	public ModelAndView test10(Student stu) {//pojo自动传递参数到页面
		//测试路径:http://localhost:8080/testSpringMVC0/t9.do?name=zhangsan&age=10
		//返回值类型是String,因为在SpringMVC中配置了前缀和后缀,
		//所以,默认跳转到 “前缀+映射路径+后缀”页面,即/WEB-INF/returnString2.jsp页面
		
		/*
		 * 注意:这里pojo是Student,ModelAndView会自动在addObject()方法创建student的对象,并携带student数据
		 * 即,即使什么也不写,只要使用了pojo(这里pojo是Student),就会自动创建一个mv.addObject("student",stu);
		 */
		
//		ModelAndView mv = new ModelAndView();//创建ModelAndView集合对象
//		mv.setViewName("returnModelAndView");//指定要转发的View的名称,这里是“前缀+指定name+后缀”
		
		//简化上面两步的写法
		ModelAndView mv =new ModelAndView("returnModelAndView");//创建ModelAndView对象,并指定要跳转到的View路径

		return mv;//默认转发
	}
}

returnString.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 是否忽略EL表达式 如果值为ture 那么 像 ${..}这样的直接会原样输出,不会进行EL表达式运算 --%>
<%@ page isELIgnored="false" %>
<!-- 下面报错,说明缺少jstl包,需要在pom.xml里面导入包的坐标-->
<!-- prefix="c"定义的是前缀的名字,通常用c,但也可以使用别的-->
<%-- <c:forEach ...> --%>
<%-- prefix="x"   <x:forEach ...>--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>欢迎进入t9页面</h2>
${student.age}
${student.getName()}
</body>
</html>

关键注释

在t9路径下,返回String,自动调用Model对象

  • 注意:这里pojo是Student,Model会自动在addAttribute方法中创建student的对象,并携带student数据
  • 即,即使什么也不写,只要使用了pojo(这里pojo是Student),
    就会自动创建一个m.addAttribute(“student”,stu);
  • m.addAttribute(“pojo类名首字母小写”,pojo对象);
    pojo会自动调用addAttribute(name,value)方法,创建一个和类名相同首字母小写的name,value是pojo对象

补充

  • 这个原理是在代码调用过程中发现的,如果有大神知道原理,敬请告知
  • 下面是关键部分截图

在这里插入图片描述


版权声明:本文为wgx_0504原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。