一、SpringMVC的三层结构:
- 服务器三层结构,数据流通方向如图所示:
- 关于MVC设计模型:
M model 模型 javabean
V View 视图 JSP
C Controller控制器 Servlet
- SpringMVC 概述:
SpringMVC 是一种基于Java实现MVC设计模型的请求驱动类型的轻量级web框架。使用Spring进行web开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2…SpringMVC已成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架,他通过一套注解,让一个简单的java类成为处理请求的控制器,而无需实现任何接口,同时它还支持RESTful编程风格的请求。
二、SpringMVC 基本注解之 @RequestParam
其作用(应用场景)为:给请求数据接收方做注解,用于解决前后端请求数据名不一致。
这里,我们通过一个具体的例子来说明:
前端代码举例如下:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/2/5
Time: 10:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/testRequestParam/test1?name=哈哈">testRequestParam</a>
</body>
</html>
后端代码举例如下:
package cn.incast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping(path = "/testRequestParam")
public class requestParamController {
@RequestMapping(path = "test1")
public String testRequestParam(@RequestParam(name = "name") String userName){
System.out.println(userName);
return "success";
}
}
这里,我们通过@RequestParam
解决了前后端请求数据名不一致的问题,jsp页面请求数据为name、但是后端接收数据为userName因此用==@RequestParam(name = “name”)==
来做标注。
三、SpringMVC-基本注解之@RequestBody
其作用(应用场景)为:
用于获取请求体内容。直接使用得到为 key=value&key=value......
结构的数据。get
请求方式不适应。
注意事项:
required:
是否必须有请求体。 默认值是true
当取值为true
时,get
请求方式会报错。如果取值时false
,get
请求得到的时null
这里,我们通过一个具体的例子来说明,举例代码如下:
public String testRequestBody(@RequestBody String Body){
System.out.println(Body);
return "success";
}
四、SpringMVC-基本注解之@PathVariable
restful编程风格:
原本方式为 :
UserController 类
path="/user/save"
save
path= "/user/update"
update
path="/user/findAll"
findAll
restfule方式为:
UserController 类
path="/user" post
save
path="/user" put
update
path="/user" get
findAll
path= "/user/{id}" get
findById(id)
localhost:8080/user get
接下来,我们列举一个具体的应用场景,参考代码如下:
@RequestMapping(path = "/testPathVariable/{id}")
public String testPathVariable(@PathVariable(value = "id") String id){
System.out.println(id);
return "success";
}
<a href="/testRequestParam/testPathVariable/10">testRequestParam</a>
编译后测试的结果如下:
五、SpringMVC-基本注解之@CookieValue
其作用(应用场景)为:
用于把制定cookie
名称的值传入控制器方法参数。
注意事项:
value
: 指定cookie
的名称。
required
: 是否必须有此cookie
接下来,我们列举一个具体的应用场景,参考代码如下:
<%-- 测试@CookieValue --%>
<a href="/testRequestParam/testCookieValue">testCookieValue</a>
@RequestMapping(path = "/testCookieValue")
public String testCookieValue(@CookieValue(name = "JSESSIONID") String cookieValue){
System.out.println(cookieValue);
return "success";
}
编译后测试的结果如下:
六、SpringMVC-基本注解之@SessionAttributes
其作用(应用场景)为:
在Session
对象中存储键值对数据,但是需要先存在Request
对象中,再添加注解@SessionAttributes(name=“键名”)
接下来,我们列举一个具体的应用场景,参考代码如下:
<%-- 测试SessionAttribute --%>
<a href="/testRequestParam/testAddSession">添加session</a>
<a href="/testRequestParam/testGetSession">获取session</a>
<a href="/testRequestParam/testDelSession">删除session</a>
@RequestMapping(path = "/testAddSession")
public String testAddSession(Model model){
model.addAttribute("学习","SpringMVC");//添加键值对到Request对象中
return "success";
}
@RequestMapping(path = "/testGetSession")
public String testGetSession(ModelMap modelmap){
System.out.println(modelmap.get("学习"));
return "success";
}
@RequestMapping(path = "/testDelSession")
public String testDelSession(SessionStatus status){
status.setComplete();
return "success";
}
编译后测试的结果如下:
特别提醒:
使用SessionAttributes
注解时,使用Model
类的addAttribute()
方法添加入Request
对象中,使用ModelMap
类的get()
方法获取,并且@SessionAttributes
注解只适用于类。