概述
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)——控制层之参数传递和数据返回所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复