什么是MVC-02

简介: 什么是MVC-02

什么是MVC

四:总结


前言

本文为一篇MVC笔记


一:SpringMVC路径

1.1:SpringMVC支持ant风格路径

?:表示任意单个字符

*:表示任意的0个或多个字符

**:表示任意的一层或多层目录


1.2:SpringMVC支持路径中的占位符

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
1
@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){
    System.out.println("id:"+id+",username:"+username);
    return "success";
}
//最终输出的内容为-->id:1,username:admin

二:SpringMVC获取请求参数

2.1 通过ServletAPI获取

将HttpServletRequest作为控制器方法的形参,此时HTTPServletRequest类型的参数表示封装了当前请求的请求报文对象。

@RequestMapping("/testParam")
public String testParam(HttpServletRequest request){
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

2.2 通过控制器方法形参获取请求参数

在控制器的方法,设置好对应的形参,当浏览器发送请求的时候,传入对应的参数,匹配成功之后,对应的DispatcherServlet中就会将请求的参数赋值给相对应的形参。

<a th:href="@{/testParam(username='admin',password=123456)}">测试获取请求参数-->/testParam</a><br>
1
@RequestMapping("/testParam")
public String testParam(String username, String password){
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

2.3使用注解方式

2.3.1:@RequestParam注解

@RequestParam注解是将请求参数和控制器方法的形参创建映射关系。

@RequestParam注解一共有三个属性

a. value: 指定为形参赋值的请求参数的参数名

b. required:设置是否为必传参数。默认为true

c. defaultValue:当value所指定的请求参数没有传值或者传值为""时,使用默认值为形参赋值。

2.3.2:@RequestHeader注解

@RequestHeaders是将请求头信息和控制器方法的形参创建映射练习

@RequestHeaders注解一共有3个属性,value、required、defaultValue、用法通@RequestParam

2.3.3:@CookieValue 注解

@CookieValue是将cookie数据和控制器方法的形参创建映射关系

@CookieValue一共有三个属性value、required、defaultValue、用法通@RequestParam

2.4 通过POJO获取请求参数

在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类属性名一致,那么请求参数就会为此属性赋值

<form th:action="@{/testpojo}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br>
    年龄:<input type="text" name="age"><br>
    邮箱:<input type="text" name="email"><br>
    <input type="submit">
</form>
12345678
@RequestMapping("/testpojo")
public String testPOJO(User user){
    System.out.println(user);
    return "success";
}
//最终结果-->User{id=null, username='张三', password='123', age=23, sex='男', email='123@qq.com'}

三:域对象共享数据

3.1 使用servletAPI向request域对象共享数据

//对应的Controller方法
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
    request.setAttribute("testScope", "hello,servletAPI");
    return "success";
}

3.2 使用ModelAndView向request域对象共享数据

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    //        ModelAndView 拥有Model和View两个功能,Model负责向请求域共享数据,View设置视图
    ModelAndView mav  = new ModelAndView();
    //向请求域共享数据
    mav.addObject("testScope","hello,ModelAndView");
    //设置视图,实现页面跳转
    mav.setViewName("success");
    return mav;
    }

3.3 使用Model向request域对象共享数据

@RequestMapping("/testModel")
public String testModel(Model model){
    model.addAttribute("testScope", "hello,Model");
    return "success";
}

3.4 使用map向request域对象共享数据

@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
    map.put("testScope", "hello,Map");
    return "success";
}

3.5 使用ModelMap向request域对象共享数据

@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
    modelMap.addAttribute("testScope", "hello,ModelMap");
    return "success";
}

3.6 共享数据如何展示

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>demo3真的正常</h1>
<a th:href="@{/testServletAPI}">通过servletAPI向request域对象共享数据</a><br>
<a th:href="@{/testModelAndView}">通过ModelAndView向request域对象共享数据</a>
</body>
</html>
//跳转的页面,${testScope}是Controller里设置的对应的key值
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>success</h1>
<p th:text="${testScope}"></p>
</body>
</html> 

四:总结

本文主要讲述了SpringMVC的路径、请求的参数、域对象的数据共享知识。

目录
相关文章
|
4月前
|
Java 容器
mvc02
mvc02
26 0
|
20天前
|
前端开发 搜索推荐 数据格式
什么是MVC
什么是MVC
|
4月前
mvc03
mvc03
20 0
|
8月前
|
存储 前端开发
什么是mvc
什么是mvc
60 0
|
前端开发 Java
|
设计模式 前端开发 Java
|
设计模式 JavaScript 前端开发
浅析MVC
浅析MVC
97 0
浅析MVC
|
存储 开发框架 前端开发
MVC系列之开始
MVC系列之开始
130 0
MVC系列之开始
|
前端开发 程序员 设计模式
|
Web App开发 存储 前端开发