一·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);
}
}