springMVC的传参和业务逻辑层的使用

本文介绍了SpringMVC中控制器的使用,强调了@Controller注解的重要性。详细阐述了包括匹配参数名、RequestParam、PathVariable、@RequestBody、@ResponseBody、传递List和表单序列化在内的7种参数传递方式。接着讨论了业务逻辑层(Service层),说明了@Service注解的作用,并解释了在使用JDK代理时接口和实现类的需求,以及@Resource和@Autowired注解的注入方式。

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

一·springMVC 也就是controller层,在controller一定要在类上方标记@Controller

controller总的来说还是接收页面的请求。
7种传值的要求
第1种: name=“名称” 必须和 方法的参数名一致
第2种: 若name=“名称” 和参数名不一致,则使用@RequestParam(“name的名称”)
第3种: name=“名称” 必须和 实体类的属性名一致 因为参数是实体类
第4种: 使用url传递参数值 页面 delete/10.do @RequestMapping("/delete/{id}")方法的参数 @PathVariable(“id”) int id
第5种: 使用json,页面传递json格式的数据给Controller @RequestBody Controller传递json的数据给页面 @ResponseBody
第6种:传递List 值,批量删除
第7种:表单序列化,ajax方式提交表单

//第1种: name="名称" 必须和 方法的参数名一致
    @RequestMapping(value = "/index/m1",
    method = RequestMethod.POST)
    public String m1(String uname){
        System.out.println("参数值:"+uname);
        return "a";
    }
 // 第2种: 若name="名称" 和参数名不一致,则使用@RequestParam("name的名称") 
    @RequestMapping(value = "/index/m2",
            method = RequestMethod.POST)
    public String m2(@RequestParam("uu") String uname){
        System.out.println("参数值:"+uname);
        return "a";
    }
// 第3种: name="名称" 必须和 实体类的属性名一致 因为参数是实体类
    @RequestMapping(value = "/index/m3",
            method = RequestMethod.POST)
    public String m3(User user){
        System.out.println("参数值:"+user);
        return "a";
    }
    
// 第4种: 使用url传递参数值 页面 my/m4/10.do @RequestMapping("/my/m4/{id}")方法的参数 @PathVariable("id") int id 
//@PathVariable可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中
    @RequestMapping(value = "/my/m4/{id}",
            method = RequestMethod.GET)
    public String m4(@PathVariable("id") int uid){
        System.out.println("参数uid="+uid);
        return "a";
    }
   //  第5种: 使用json,页面传递json格式的数据给Controller @RequestBody Controller传递json的数据给页面 @ResponseBody 
    @RequestMapping(value = "/my/m5",method = RequestMethod.POST)
    @ResponseBody
    public User m5(@RequestBody User user){
        System.out.println("m5执行了");
        System.out.println("接收到了页面传递的json格式的值"+user);
        return new User("2","控制其中的用户名","控制器中的密码");
    }
    
  //第6种:传递List<Integer> 值,批量删除 
    @RequestMapping(value = "/my/m6",method = RequestMethod.POST)
    @ResponseBody
    public Boolean m6(@RequestBody List<Integer> idList){
        System.out.println("m6执行了");
        System.out.println("接收到了页面传递的json格式的值"+idList);
        return true;
    }

 // 第7种:表单序列化,ajax方式提交表单
    @RequestMapping(value = "/my/m7",method = RequestMethod.POST)
    @ResponseBody
    public Boolean m7(User user){
        System.out.println("m7执行了");
        System.out.println("接收到了页面传递的json格式的值"+user);
        return true;
    }

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页面</title>
</head>
<body>
<h2>第一种:input的name属性必须和控制器中的对应方法 参数名一样</h2>
<form action="index/m1.do" method="post">
参数一:<input type="text" id="t1" name ="uname">
   <br>
    <input type="submit" value="提交">
</form>

<h2>第二种:input的name属性和控制器中的对应方法 参数名  不一样,则必须使用别名</h2>
<form action="index/m2.do" method="post">
    参数一:<input type="text" id="t2" name ="uu">
    <br>
    <input type="submit" value="提交">
</form>

<h3> 第三种:name="名称" 必须和实体类的属性名一致</h3>
<form action="index/m3.do" method="post">
   <input type="text"  name ="uid"><br>
    <input type="text" name ="uname"><br>
    <input type="text"  name ="upwd"><br>
    <input type="submit" value="提交">
</form>

<h3> 第四种:使用URL传参  方法名/值.do</h3>
<a href="my/m4/1.do">请求mycontroller中的m4
方法</a>

<h3> 第五种:传递json值</h3>
<button id="btn1">向服务器发送json参数,获取服务器响应的json数据</button>

<script src="static/js/jquery-3.3.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function(){
        $('#btn1').click(function(){
            var jsonObj={uid:"1",uname:"页面的用户名",upwd:"页面的密码"};  //传递给服务器的参数
            console.info(typeof jsonObj); // object
            var jsonStr=JSON.stringify(jsonObj);
            console.info(typeof  jsonStr); //string
            $.ajax({
                type: "POST",
                url: "my/m5.do",
                data: jsonStr,
                contentType:'application/json;charset=utf-8', //页面传递给Controller
                dataType:'json', // Controller传递给页面
                success: function(msg){
                    console.info(msg);
                }
            });
        });
    });
</script>

<h5>第6种:传递List,泛型Integer</h5>
<button id="deleteAll">批量删除</button> <br/>
<input type="checkbox" name="uid" value="1"> 1 <br>
<input type="checkbox" name="uid" value="2"> 2 <br>
<input type="checkbox" name="uid" value="3"> 3 <br>
<input type="checkbox" name="uid" value="4"> 4 <br>
<input type="checkbox" name="uid" value="5"> 5 <br>
<script type="text/javascript">
    $(function(){
        $('#deleteAll').click(function(){
            var idList=new Array(); //创建一个空数组用于存储需要删除id
            $('input[name="uid"]:checked').each(function(index,e){
                idList[index]=$(this).val();
            });
            console.info(idList);
            if(idList.length>0){
                $.ajax({
                    type: "POST",
                    url: "my/m6.do",
                    data: JSON.stringify(idList),
                    contentType:'application/json;charset=utf-8',
                    dataType:'json',
                    success: function(msg){
                        console.info(msg);
                    }
                });
            }else{
                alert("必须勾选一个,才能进行批量删除操作!")
            }
        });
    });
</script>
<h5> 第7种:表单序列化,使用ajax方式提交表单</h5>
<form id="userForm">
    <input type="text"
           id="uname" name="uname"
           placeholder="姓名"/> <br/>
    <input type="text"
           id="upwd" name="upwd"
           placeholder="密码"/>
    <br/>
    <button type="button" id="submitBtn">提交</button>
</form>
<script>
    $(function(){
        $('#submitBtn').click(function(){
            //1.获取表单中的值
            var info=$('#userForm').serialize();
            //2.发送ajax请求
            $.ajax({
                type: "POST",
                url: "my/m7.do",
                data:info,
                dataType:'json',
                success: function(res){
                    console.info(res);
                }
            });
        });
    });
</script>

(最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数
其次:GET产生一个TCP数据包;POST产生两个TCP数据包。
举个例子就是GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

二,service层 这一层是业务逻辑层:首先时必须在头上标注@Service

然后,因为我们采用JDK代理必须有被代理对象一定要实现一个接口,所以必须要定义一个接口类,
然后我们的被代理对象就是实现类。一般依赖注入都会标注@Resource 这个是通过方法的方式来识别注入的依赖,
还有@Autowaried 是通过方法名识别注入的依赖,

如果是JDK动态代理的话一般Service层分为两个部分:
一,接口类定义需要实现的方法:

public interface IXQService {
    public List<XQ> xqList();
   public  int addXQ(XQ xq);
    XQ findXQById(int xqId);
}

二,实现接口的被代理对象。(因为实现接口的原因,只能处理事务,日志,安全,权限等就不适合用JDK代理)

@Service
public class XQService implements IXQService {
    //Service依赖于mapper层
    @Resource
    public XQMapper xqMapper;
    @Override
    public List<XQ> xqList() {
        return xqMapper.selectAll();
    }
    @Override
    public int addXQ(XQ xq) {
        return xqMapper.insert(xq);
    }
    @Override
    public XQ findXQById(int xqId) {
        return xqMapper.selectOne(xqId);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值