Spring_MVC 一些基本注释作用和用法

本文详细介绍Spring MVC框架中如何处理和共享数据,包括不同方式接收页面数据、使用注解进行对象实例化、数据共享机制、数据库查询结果传递至JSP页面的方法、@ResponseBody注解的使用以及异步数据传输技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 接受页面数据

@RequestMapping("/add")
	public String add(Bookinfo bookinfo) {	
		//调用业务层添加bookSerice.save(bookinfo);
		System.out.println(bookinfo.getBookid());
		System.out.println(bookinfo.getBookname());
		System.out.println(bookinfo.getBookprice());
		System.out.println(bookinfo.getBookimg());
		return "index";

值得注意的是   

  1. .放到()里面的任何对象会自动实例化(new)
  2. 自动DI/IOC(相当于Servlet中写的request.getParameter("bookid"))
  3. 会自动共享数据request.setAttribute("bookinfo",bookinfo)
  4. 这个共享只会共享页面中输入进来的数据,比如你只输入了两个字段,其它字段是不共享的
  5. 如果传入的不是javabean中的对象,是基本数据类型不会自动共享

1.2 接收页面数据,以变量的方式接 页面中参数的名字与变量中保持一致

@RequestMapping("/add2")
	public String add2(String bookid,String bookname,double bookprice,String bookimg) {
		//调用业务层添加bookSerice.save(bookid,bookname,bookprice,bookimg);
		System.out.println(bookid);
		System.out.println(bookname);
		System.out.println(bookprice);
		System.out.println(bookimg);		
		return "index";
	}

1.3 接收页面数据,使用原生request,response

@RequestMapping("/add3")
	public String add3(HttpServletRequest request,HttpServletResponse response) {
		String bookid = request.getParameter("bookid");
		String bookname = request.getParameter("bookname");
		double bookprice = Double.parseDouble(request.getParameter("bookprice"));
		String bookimg = request.getParameter("bookimg");
		
		System.out.println(bookid);
		System.out.println(bookname);
		System.out.println(bookprice);
		System.out.println(bookimg);

1.4  接收页面数据,修改参数名字

@RequestMapping("/page")
	public String page(@RequestParam("page") int pageIndex) {
		System.out.println("页数:"+pageIndex);
		return "index";
	}

注意:@RequestParam("page"),指定页面参数的名字为page 例如 页面传值

如果不写@RequestParam("page") 接受参数必须写 page

2. 对象注解

@RequestMapping(value="/add4",method=RequestMethod.GET)//设定请求方式为Get,post不能访问
	public String add4(@ModelAttribute("book") Bookinfo bookinfo) {
		System.out.println(bookinfo.getBookid());
		System.out.println(bookinfo.getBookname());
		System.out.println(bookinfo.getBookprice());
		System.out.println(bookinfo.getBookimg());
		
		return "index";
//		return "redirect:../index.jsp";
	}

@ModelAttribute("book"),这个注解的意思是:request.setAttribute("book",bookinfo);
@ModelAttribute,不写默认这个注解,request.setAttribute("bookinfo",bookinfo);

默认转发 return "index"  等价于 request.getRequestDispatcher("/index.jsp").forward(request,response);

3.session共享

默认共享为request,如果想让这个bookinfo共享范围提升为session的,在类的最后面加上@SessionAttributes

4.1 从数据库中查询一个集合出来,并传到JSP页面去

@RequestMapping("/query")
	public String query(ModelMap map) {
		map.addAttribute("bookinfos", bookinfoService.getBookinfos());
		return "index";
	}

4.2 从数据库查询一个对象出来,并传到JSP

@RequestMapping("/query2")
	public String query2(ModelMap map,Bookinfo bookinfo) {
		map.addAttribute("bookinfo", bookinfoService.getBookinfoById());
		return "index";
	}

4.3从数据库查询一个对象出来,并传到JSP,用Map

@RequestMapping("/query3")
	public String query2(Map map,Bookinfo bookinfo) {
		map.put("bookinfo", bookinfoService.getBookinfoById());
		return "index";
	}

4.3 用map穿一个参数到JSP页面

@RequestMapping("/query3")
	public String query2(Map map,int pageIndex) {
		map.put("pageIndex", pageIndex);
		return "index";
	}

5. @Responsebody  注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中  (通俗来说就是传数据到HTML页面 用json接收)

使用需要导入相关架包

5.1 

传字符串到页面

@RequestMapping("/json1")
	@ResponseBody
	public String json1() {
		return "success";
	}

传对象到页面

@RequestMapping("/json2")
	@ResponseBody
	public Bookinfo json2() {
		bookinfo.setBookid("22");
		bookinfo.setBookname("mingzi");
		bookinfo.setBookprice(520.0);
		bookinfo.setBookimg("book.img");
		return bookinfo;
	}

集合到页面

@RequestMapping("/json")
	@ResponseBody
	public List<Bookinfo> json() {
		return bookServiceimpl.getBooks();
	}

页面接值

页面使用jquery需要导入相应的架包 可直接放在WebContent目录下 或者建立一个专门的文件夹

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSON的解析</title>
<script type="text/javascript" src="jquery-1.7.js"></script>
<script type="text/javascript">
  $(function() {
	//$("#aaa").html("你好呀");
	//$(".bbb").text("我很好");
	
	$("#btnMessage").click(function() {
		//alert("谁点我");
		$.ajax({
			type:"POST",
			url:"bookinfo/json2.action",
			success:function(data) {
				//alert("从服务器传来的数据为" + data.bookname);
				$("#msg").html("从服务器异步返回的数据变量是:"+data.bookname);			
			}
		})
	});
	var str=""
	$("#btnMessage1").click(function() {
		$.ajax({
			type:"POST",
			url:"bookinfo/json.action",
			success:function(data) {
				$.each(data,function(index,bookinfo){
					str +=  bookinfo.bookid+" "+bookinfo.bookname+" "+bookinfo.bookprice+" "+ bookinfo.bookimg+"<br/>";
				});
				$("#msg").html(str);
				str = ""
			}
			
		})
	})
})

</script>

</head>
<body>
	<div class="bbb" id="aaa"></div>
	<input type="button" value="点击我一下嘛" id="btnMessage"/>
	<input type="button" value="点击我一下嘛" id="btnMessage1"/>
	<div id ="msg">
	</div>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值