我是靠谱客的博主 纯真帆布鞋,最近开发中收集的这篇文章主要介绍软件工程应用与实践(10)——控制层之参数传递和数据返回,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2021SC@SDUSC

文章目录

    • 一、参数传递
      • 1,逐个参数接收
      • 2,校正请求参数名@RequestParam
      • 3,对象参数接收
    • 二、数据返回
      • 1,返回 ModelAndView
      • 2,返回 String
      • 3,返回 void
        • 步骤a:搭建AJAX环境
        • 步骤b:前端请求页面
        • 步骤c:定义实体类
        • 步骤d:接收ajax请求并返回数据
      • 3,返回对象 Object

一、参数传递

将请求中的参数传递到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)——控制层之参数传递和数据返回的全部内容,希望文章能够帮你解决软件工程应用与实践(10)——控制层之参数传递和数据返回所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部