软件工程应用与实践(10)——控制层之参数传递和数据返回

本文详细介绍了Spring MVC中参数传递的三种方式:逐个参数接收、使用@RequestParam校正参数名以及对象参数接收,并展示了数据返回的三种常见方式:ModelAndView、String和void。针对AJAX响应,讲解了如何接收并返回JSON数据。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

一、参数传递

将请求中的参数传递到controller(控制层)类型类的对应方法中,该方法获取并处理完参数后将传递给service(业务逻辑层)类型类中的方法,service类型类中的方法会完成相应业务并将数据传递给dao层(数据访问层)类中的方法,dao层类中的方法最终会访问数据库,完成相应的数据操作后返回结果。

控制层类型类中的处理方法(处理器方法)可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用。
➢ HttpServletRequest
➢ HttpServletResponse
➢ HttpSession
➢ 请求中所携带的请求参数
以下为参数接收的几种方式:

1,逐个参数接收

只要保证请求参数名与该请求处理方法的参数名相同即可。

前端请求:

<form action="test/register.do" method="POST">
	姓名: <input type="text" name="name"/><br>
	年龄: <input type="text" name="age" /><br>
	<input type="submit" value=”注所/>
</form>

参数接收:

@Controller
@RequestMapping( "/test")
public class MyController {
	@RequestMapping(value="/register.do" )
	public ModelAndView register(string name, int age){
		ModelAndView mv = new ModelAndView();
		mv.addObject( "myname" , name);
		mv.addObject( "myage", age);
		mv.setViewName( "show");
		return mv;
	}
}

2,校正请求参数名@RequestParam

所谓校正请求参数名,是指若请求 URL 所携带的参数名称与处理方法中指定的参数名不相同时,则需在处理方法参数前,添加一个注解@RequestParam(“请求参数名”),指定请求 URL 所携带参数的名称。该注解是对处理器方法参数进行修饰的。value 属性指定请求参数的名称。

前端请求:

<form action="test/register.do" method="POST">
	姓名: <input type="text" name="rname"/><br>
	年龄: <input type="text" name="rage" /><br>
	<input type="submit" value=”注所/>
</form>

参数接收:

@Controller
@RequestMapping( "/test")
public class MyController {
	@RequestMapping(value="/register.do" )
	public ModelAndView register(
		@RequestParam(value="rname") string name,
		@RequestParam(value="rage") int age){
			ModelAndView mv = new ModelAndView();
			mv.addObject( "myname" , name);
			mv.addObject( "myage", age);
			mv.setViewName( "show");
			return mv;
	}
}

3,对象参数接收

将处理器方法的参数定义为一个对象,只要保证请求参数名与这个对象的属性同名即可。

定义实体类:

public class User {
	private int id;
	private String name;
	//set,get方法
}

参数接收:

@Controller
@RequestMapping( "/test")
public class MyController {
	@RequestMapping(value="/register.do" )
	public ModelAndView register(User user){
			ModelAndView mv = new ModelAndView();
			mv.addObject( "user" , user);
			mv.setViewName( "show");
			return mv;
	}
}

二、数据返回

使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
➢ 第一种:ModelAndView
➢ 第二种:String
➢ 第三种:无返回值 void
➢ 第四种:返回自定义类型对象
根据不同的情况,使用不同的返回值。

1,返回 ModelAndView

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。当然,若要返回 ModelAndView,则处理器方法中需要定义 ModelAndView 对象。
在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),此时若返回 ModelAndView,则将总是有一部分多余:要么 Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。

2,返回 String

处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址。

@Controller
@RequestMapping( "/test")
public class MyController {
	@RequestMapping(value="/register.do" )
	public ModelAndView register(HttpServletRequest request,User user){
			request.setAttribute( "user", user);
			return "/WEB-INF/jsp/welcome.jsp";
	}
}

3,返回 void

对于处理器方法返回 void 的应用场景:
AJAX 响应;
若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void;

以 AJAX 响应为例:

步骤a:搭建AJAX环境

maven 加入 jackson 依赖:由于本项目中服务端向浏览器传回的是 JSON 数据,需要使用一个工具类将字符串包装为 JSON 格式,所以需要导入 JSON 的依赖。
引入 jQuery 库:由于本项目要使用 jQuery 的 ajax()方法提交 AJAX 请求,所以项目中需要引入 jQuery 的库。在 WebRoot 下新建一个 Folder(文件夹),命名为 js,并将 jquery-1.11.1.js 文件放入其中。

步骤b:前端请求页面
<script type="text/javascript" src="js/jquery-1.11.1-min.js"></script>
<script type="text/javascript">
	$(function(){
		$("button").click(function(){
			$.ajax({
				ur1:"myajax.do",
				data:{
					name:"zs",
					age:"24"
				}
				type:"post",
				dataType:"json",
				success:function(resp){
					alert( "resp: "+resp.name+" "+resp.age);
				}
			})
		})
	})

<!--**************************-->
<body>
	index.jsp <br>
	<button>发起Ajax请求</button>
</body>
步骤c:定义实体类
public class User {
	private int id;
	private String name;
	//set,get方法
}
步骤d:接收ajax请求并返回数据
@RequestMapping(value=" /myajax.do")
public void doSome(Integer age,string name,HttpServletResponse response) throws IOException){
	//将数据转换成一个对象进行储存
	User user = new User();
	user.setName(name);
	user.setAge(age);
	//使用jackson工具库,把user对象转为json对象
	ObiectMapper mapper = new ObiectMapper();
	String json = mapper.writeValueAsString(user);
	system.out.println( "json: "+json);
	//使用HttpServletResponse输出数据到浏览器
	Printwriter pw =response.getwriter();
	pw.print(json);
	pw.flush();
	pw.close();
}

3,返回对象 Object

处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,String,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。
返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。
具体实现:略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值