SpringMVC---四大作用域

本文详细介绍了SpringMVC中的request、session、application作用域,并展示了如何在这些作用域中存储和获取数据。此外,还涵盖了返回JSON数据的方法和路径参数的使用,以及实战示例,包括表单操作、AJAX请求和购物车管理。

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

四大作用域(page,request,session,application)

  1. request
  2. session
  3. application
  4. 返回JSON数据
  5. 路径参数–入门
  6. 课后练习

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碰磕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值