SpringMVC笔记 1 简单的使用

springMVC 控制器发送参数信息到服务端

目录

前言

一、ModelAndView 代替servlet实现请求页面转发与传递参数

二、其他方式代替 ModelAndView

1.ModelMap 代替 ModelAndView

2.  Map 代替 ModelAndView

 

3. 使用 ModelAttribute 实现更改 前端传递的参数

 


前言

 在上一篇文章中简单介绍了一些关于 SpringMVC 接受前台表单传递简单数据类型, SpringMVC 支持原生servletAPI 直接将 HttpServletRequest/HttpServletResponse 作为参数传入handler的方法即可  。

MVC结构中,现在使用SpringMVC的控制器代替原生的servlet,要将接收的参数信息带入到目标页(服务端),有多种方法:ModelAndView  ModeMap  Map  Model  --数据放在request作用域        


一、ModelAndView 代替servlet实现请求页面转发与传递参数

handler 控制器的方法如下:

//handler/ModelAndView"
@RequestMapping(value="handler/ModelAndView")
public ModelAndView  getModelAndView ( Person  person) {
  //ModelAndView  类对应的对象 作为 返回值 
	ModelAndView mv = new ModelAndView( "sucess");
  mv.addObject("person_ModelAndView",person) ;
	return mv;
}

前端的页面中支持以级联的方式(address.cityAddress)将信息存储到实体类对象的参数中。但是所有的前端字段的name要与实体类(Person)的属性对应(包含对象属性) :

     <!-- ModelAndView --> <br>ModelAndView <br>
     
     <form action="handler/ModelAndView"  method="post">
         id: <input   name="id"   /> <br>
        name :  <input   name="name"   /> <br>
    provinceAdress :  <input   name="address.provinceAddress"   /> <br>
    cityAdress :          <input   name="address.cityAddress"   /> <br>
     <input type="submit" value="ModelAndView">
     </form>

 在目标的 sucess.jsp 中获取前端发出的请求中的参数(经控制器 ModelAndView 转发):

  <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"   isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
      sucess....welcome  to spring mvc  <br/>
    ==== request:<br/>
        ${requestScope.person.id } -${requestScope.person.name } -${requestScope.person.address.provinceAddress } -
        <!-- ModelAndView 接收    -->
        --${requestScope.person.address.cityAddress}<br/><br/>
        
        modelMap==== request:<br/>
         <!--     handler/modelMap  接收    -->
        ${requestScope.person_mm.id } -${requestScope.person_mm.name } -${requestScope.person_mm.address.provinceAddress } -
        
        --${requestScope.person_mm.address.cityAddress}
    
        
        
        
</body>
</html>

结果如下:

 

如果出现404错误 ...服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示  说明该项目的依赖有问题,把 spring-web.jar  spring-webmvc.jar 从项目中移除重新引入即可。

二、其他方式代替 ModelAndView

其他三种方式  ModeMap  Map  Model  使用方法基本相似,与 ModelAndView 稍有不同的是在handler 控制器中 对应的函数返回值是 String,

1.ModelMap 代替 ModelAndView

控制器handler 返回值为String类型,实体类也可以作为参数,使用put接收对象,代码如下 :

//  handler/modelMap
@RequestMapping(value="handler/modelMap")
public String testModelMap(ModelMap mm ,Person  person_mm ) { 
	mm.put("person_mm", person_mm);//request域
	return "sucess";  //view
}

显示效果如下:

 

红框中地址对应的显示效果,但是上方接收 ModelAndView 的页面也有显示,但是使用2.  Map 来转发请求(sucess.jsp没有专门写EL表达式),上方的能显示,下方的显示空白,说明控制器是按照类转发,但是接收值再判断传入数据类型接收前 如果 不是使用控制器中函数内的对象名获取传入的信息,则直接使用该类的信息表达。

2.  Map 代替 ModelAndView

基本与 ModelMap 相同,控制器代码如下:

	@RequestMapping(value="handler/Map")
	public String testMap(Map<String,Object> m,Person person_map) {
		//request域
		m.put("person_map", person_map);
		
		return "sucess";
	}

Model  与 Map ,ModelMap 使用方法没有差异,不再进行赘述。

 

3. 使用 ModelAttribute 实现更改 前端传递的参数

 如果将前端传入的参数信息更新到已有的数据库信息条目中 ,  ModelAttribute  

先模拟查询数据库中的一条数据,将该数据封装成对象,之后将查询出的信息对象写入到map中,现在要修改map中存储的对象信息 。此时就需要使用 ModeAttribute 修饰查询并封装成对象所在的类。  @RequestMapping 执行之前优先执行 @ModeAttribute  修饰的类,传入的参数需要用 @ModeAttribute 修饰该参数。

代码如下(颜群老师示例):

@ModelAttribute//在任何一次请求前,都会先执行@ModelAttribute修饰的方法
		//@ModelAttribute  在请求 该类的各个方法前 均被执行的设计是基于一个思想:一个控制器 只做一个功能
		public void queryStudentById(Map<String,Object> map) {
			//StuentService stuService = new StudentServiceImpl();
			//Student student = stuService.queryStudentById(31);
			//模拟调用三层查询数据库的操作
			Student student = new Student();
			student.setId(31);
			student.setName("zs");
			student.setAge(23);
//			map.put("student", student) ;//约定:map的key 就是方法参数 类型的首字母小写
			map.put("stu", student) ;//约定:map的key 就是方法参数 类型的首字母小写
		}
		
		//修改:Zs-ls
		@RequestMapping(value="testModelAttribute")
		public String testModelAttribute(@ModelAttribute("stu")Student student) {
			student.setName(student.getName());//将名字修改为ls
			System.out.println(student.getId()+","+student.getName()+","+student.getAge());
			return "success";
		}

  在请求 该类的各个方法前 均被执行的设计是基于一个思想:一个控制器 只做一个功能


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值