Spring MVC(看这一篇就够了)

导入 jar
<!--JSON依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>

Spring MVC 常用注解
使用注解前应扫包并开启注解
<!--自动扫描的包名,只扫描@Controller -->
<context:component-scan base-package="com.hz.controller" >
<!--开启注解-->
<mvc:annotation-driven/>

@Controller
标注一个普通的 JavaBean 成为可以处理请求的控制器
@RequestMapping
通过请求 URL 进行映射
//标识在类上
@RequestMapping("/index")
public class IndexController{
//在方法上
@RequestMapping(value="/ts",method = RequestMethod.GET)
public ModelAndView index(){
.....
}
method:
RequestMethod.GET 必须以GET方式进入 @GetMapping
RequestMethod.POST 必须以POST方式进入 @PostMapping
params:
{ "param1=value1" , "param2" , "!param3" }
请求参数的映射条件,指定请求的URL地址需要带那些参数
@RequestParam
参数传递
public ModelAndView index(@RequestParam(value = "name1",required = false)
String user_name)
{
.......
}
value:属性名,如:xxxx?name1=...
required:是否必须 false为否
defaultValue:默认值

通过实体类接收参数
传入参数名必须与实体类对应 , 一般用于添加,修改类中多个属性时
@RequestMapping(value="/ts1")
public String index1(User user)
{
System.out.println(user.getUser_name());
return "user";
}

参数传递
ModelAndView
包含视图信息和模型数据信息
public ModelAndView index1(){
//返回页面 转发
ModelAndView mav = new ModelAndView("视图名");
或
ModelAndView mav = new ModelAndView();
mav.setViewName("视图名");
//存入值 Request作用域
mav.addObject("键","值");
return mav;
}

Model
Map 方式进行存储,用于向作用域中存值
public String index1(Model model)
{
model.addAttribute("user_name","张三");
return "user"; //返回user.jsp页面
}
注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key
Map
Map 方式进行存储,用于向作用域中存值
public String index1(Map<String ,Object> map)
{
map.put("user_name","123");
return "user";
}

@ModelAttribute
@RequestMapping(value="/ts1")
public String index1(@ModelAttribute("user") User user)
{
user.setUser_name("张三");
System.out.println(user.getUser_name());
return "user";
}

@SessionAttributes
只能定义在类上 , 作用是将指定的 Model 中的键值对添加至 session
//类中定义user_name存入session作用域
@SessionAttributes(value = {"user_name"})
public class IndexController {
@RequestMapping("/ts")
public ModelAndView index(){
ModelAndView mav = new ModelAndView("user");
//存入Request作用域和Session作用域
mav.addObject("user_name",user_name);
....
}
}
@SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。
@SessionAttributes(value={“user1”, “user2”}) 会将model中属性名为user1和user2的属性添
加到会话中。
@SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 User和Dept
的属性添加到会话中。
@SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为
user1和user2以及类型为Dept的属性添加到会话中。

servlet 方式
引入 servlet-api.jar
<!--servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
public String cs(HttpServletRequest request, HttpServletResponse response,
HttpSession session){
session.setAttribute("username","123");
return "user";
}

重定向与转发
public String index1(User user)
{
.....
return "redirect:/user.jsp";//重定向
return "forward:页面";//转发
}

@ResponseBody
返回 JSON 数据 一般用于方法上
引入JSON依赖包
<!--JSON依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
​
@ResponseBody
@RequestMapping("/testjson")
public User jsons(@RequestParam long user_id){
User user = this.userService.getUserById(user_id);
return user;//直接返回对象
}

​对象中添加:
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
表示属性为null不返回

@RestController

标注该类中所有的方法都返回 JSON 用于类中。无须在写 @Controller
@DateTimeFormat
用户对象属性,控制入参时日期类型转换
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date user_login_endtime;

@RequestHeader
获取请求头中的参数
@ResponseBody
@RequestMapping(value = "/index",method = RequestMethod.POST)
public User index(@RequestHeader(value = "token",defaultValue = "1",required =
false) int tokenid){
......
}

@JsonFormat
返回 JSON 数据时日期类型处理
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date user_login_endtime;

REST 风格
@RequestMapping(value="/ts1/{user_id}.html")
public String index1(@PathVariable("user_id") Long user_id)
{
System.out.println("id======"+user_id);
return "user";
}
请求路径为:.../ts1/参数.html
如:..../ts1/1.html或..../ts1/10.html

Spring MVC 框架特点
清晰地角色划分
灵活的配置功能
提供了大量的控制器接口和实现类
真正做到与 View 层的实现无关( JSP Velocity Xslt 等)
国际化支持
面向接口编程
Spring 提供了 Web 应用开发的一整套流程,不仅仅是 MVC ,他们之间可以很方便的结合一起
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值