四大作用域(page,request,session,application)
- request
- session
- application
- 返回JSON数据
- 路径参数–入门
- 课后练习
request作用域
ModelAndView,ModelMap 默认都放入request里
//request作用域
@RequestMapping("/put")
public String put(ModelMap map){
map.put("food","2个披萨");
System.out.println("放入食物...");
return "success";
}
在首页通过${requestScope.food}得到数据
session作用域
与request唯一不同处,只需要在类的上方加入注释如下:
@SessionAttributes({"food1"}) //food1即session变量名
//session作用域
@RequestMapping("/put2")
public String put(ModelMap map){
map.put("food1","8个披萨");
System.out.println("放入食物...");
return "success";
}
在首页通过${sessionScope.food1}得到数据
销毁session作用域
在学springmvc前用:session.invalidate();进行销毁
springmvc销毁session作用域做法:
@RequestMapping("/logout")
public String logout(SessionStatus ss){
System.out.println("销毁session作用域成功...");
ss.setComplete(); //销毁session作用域
return "success";
}
application作用域
//application作用域
@RequestMapping("/put3")
public String put(HttpSession se){
ServletContext app=se.getServletContext();
app.setAttribute("food3","1个9寸披萨");
return "success";
}
在首页通过${applicationScope.food3}得到数据
返回JSON数据
可以创建一个统一JSON返回的类代码如下:
变量根据开发者自己需求自定义
/**
* 统一JSON返回
*/
public class JsonResult {
int code;
String msg;
Object data;
public JsonResult(int code,String msg,Object data){
this.code=code;
this.msg=msg;
this.data=data;
}
public JsonResult(int code,String msg){
this.code=code;
this.msg=msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
@Override
public String toString() {
return "JsonResult{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
创建返回JSON的测试方法
关键:@ResponseBody (json必要的注释) 返回值为上方创建的json转换类
允许跨域:@CrossOrigin
//控制器 返回JSON last:response.setContentType("application/json")
@ResponseBody
@CrossOrigin
@RequestMapping("/json")
public JsonResult json(){
List list=new ArrayList();
list.add("凯南");
list.add("剑姬");
list.add("瑞文");
JsonResult ok=new JsonResult(200,"查询成功",list);
return ok;
}
前台通过按钮ajax请求得到数据,代码如下:
不要忘了导入jquery-
<script>
$("#testjson2").click(function () {
$.ajax({
url: 'anno/json',
type: 'post',
dataType: 'json', //接收数据的类型
success: function (data) {
console.log(data)
}
})
})
</script>
<button id="testjson2">收json测试</button>
这样就可以得到数据啦~
拓展------美化路径参数传值(入门)
老式写法:
https://www.baidu.com?id=12345&question=中国
新式写法:
https://www.baidu.com/12345/中国
接下来就实现一下springmvc如何传路径参数
代码如下:
@RequestMapping("/baidu/{question}/{id}")
public String baidu(@PathVariable("id") String id,@PathVariable("question") String question){
System.out.println("你要查询的id="+id+"问题是:"+question);
return "success";
}
运行项目访问该方法并且通过/进行传值即可
课后练习
1 表单–》将一件商品放入购物车(这里是放入session域)
2 ajax查询购物车 session
3 清空购物车(清空session域)
具体实现
商品类Goods
/**
* 商品类
*/
public class Goods {
String name;
int num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", num=" + num +
'}';
}
}
购物车类Cart
/**
* 购物车
*/
public class Cart {
List<Goods> list;
Map<String,Goods> map;
public Map<String, Goods> getMap() {
return map;
}
public void setMap(Map<String, Goods> map) {
this.map = map;
}
public List<Goods> getList() {
return list;
}
public void setList(List<Goods> list) {
this.list = list;
}
@Override
public String toString() {
return "Cart{" +
"list=" + list +
", map=" + map +
'}';
}
}
购物车显示页CartMsg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>购物车详情</title>
</head>
<body>
<h1>My Cart</h1>
商品名:${sessionScope.product.list[0].name}
<br />
商品数量:${sessionScope.product.list[0].num}
</body>
</html>
购物车操作页Cart.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>购物车</title>
<script src="js/jquery.min.js"></script>
<script>
$(function () {
$("#Cartjson").click(function () {
$.ajax({
url: 'anno/Cartjson',
type: 'post',
dataType: 'json', //接收数据的类型
success: function (data) {
console.log(data)
}
})
})
})
</script>
</head>
<body>
<form action="anno/addproduct" method="post">
商品名:<input type="text" name="list[0].name" required><br/>
商品数量:<input type="number" name="list[0].num" value="1" min="1">
<input type="submit" value="AddProduct">
</form>
<button id="Cartjson">JSON查询购物车</button>
<form action="anno/clearCart">
<button id="clear" type="submit">清空购物车</button>
</form>
</body>
</html>
方法(添加商品,清空,json获取)
@Controller
@RequestMapping("/anno")
@SessionAttributes({"product"})
public class AnnoController {
//添加商品
@RequestMapping("/addproduct")
public String addproduct(ModelMap map, Cart goods){
map.put("product",goods);
return "CartMsg";
}
//查询购物车
@ResponseBody
@RequestMapping("/Cartjson")
public JsonResult Cartjson(ModelMap map){
System.out.println("购物车="+map.get("product"));
Cart product=(Cart) map.get("product");
JsonResult ok=new JsonResult(200,"查询成功",product);
System.out.println("ok="+ok);
return ok;
}
//清空购物车
@RequestMapping("/clearCart")
public String clearCart(SessionStatus ss){
ss.setComplete();
System.out.println("清空购物车...");
return "CartMsg";
}
}
练习就这样完成啦~~~~下期再见ヾ(=・ω・=)o