版权声明:本文为CSDN博主「闪耀太阳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16804847/article/details/116447385

1.SpringMVC

1.1重定向和转发

1.1.1 转发

概念: 由服务器内部进行页面的跳转.
说明: 一般情况下 SpringMVC内部 以转化为主.

1.1.2 重定向

说明: 当用户发起请求时,由服务器返回有效的网址信息.之后由用户再次发起请求的结构.

1.1.3 转发练习

/*** 测试转化和重定向* 1.准备一个请求 findUser请求.* 2.要求通用转发到 findDog请求中.* 3.关键字   forward: 转发的是一个请求.....* 4.特点:*      1.转发时 会携带用户提交的数据.* 5.转发的意义:*      如果直接转向到页面中,如果页面需要额外的参数处理,则没有执行.*      如果在该方法中添加业务处理,则方法的耦合性高.不方便后续维护*      所以方法应该尽可能松耦合*/@RequestMapping("/findUser")public String findUser(String name){//return 本身就是一个转发//return "user1";//return "dog"; 页面耦合性高return "forward:/findDog";}//需要将name属性返回给页面@RequestMapping("/findDog")public String findDog(String name,Model model){System.out.println("动态获取name属性值:"+name);model.addAttribute("name",name+"旺旺旺");return "dog";}

1.1.4 重定向练习

 /*** 测试转化和重定向* 1.准备一个请求 findUser请求.* 2.要求通用转发到 findDog请求中.* * 3.关键字   forward: 转发的是一个请求.....*           redirect: 多次请求多次响应* 4.特点:*      1.转发时 会携带用户提交的数据.*      2.转发时 用户浏览器的地址不会发生改变.*      3.重定向时  由于是多次请求,所以不会携带用户的数据*      4.重定向时  由于是多次请求,所以用户的浏览器的地址会发生变化** 5.实际意义: 实现了方法内部的松耦合* 6.什么时候使用转发/什么时候使用重定向*   1.如果需要携带参数 使用转发*   2.如果一个业务已经完成需要一个新的开始 则使用重定向*/@RequestMapping("/findUser")public String findUser(String name){//return 本身就是一个转发//return "user1";//return "dog"; 页面耦合性高//return "forward:/findDog";   转发到findDog请求return "redirect:/findDog";    //重定向到findDog请求}//需要将name属性返回给页面@RequestMapping("/findDog")public String findDog(String name,Model model){System.out.println("动态获取name属性值:"+name);model.addAttribute("name",name+"旺旺旺");return "dog";}

1.1.5 重定向/转发特点

1.转发时 会携带用户提交的数据.
2.转发时 用户浏览器的地址不会发生改变.
3.重定向时 由于是多次请求,所以不会携带用户的数据
4.重定向时 由于是多次请求,所以用户的浏览器的地址会发生变化

1.1.6 重定向/转发意义

意义: 实现了方法内部的松耦合
什么时候使用转发/重定向:
1.如果需要携带参数 使用转发
2.如果一个业务已经完成需要一个新的开始 则使用重定向

1.2 RestFul风格

1.2.1 RestFul入门案例

package com.jt.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class RestFulController {/*** 常规get请求:* url地址: http://localhost:8090/restFul?id=1&name=tom* get请求弊端: 如果参数有多个,则key-value的结构需要多份.* RestFul结构:*  url地址: http://localhost:8090/restFul/{id}/{name}*      1.参数之间使用/分割*      2.参数的位置一旦确定,不可更改*      3.参数使用{}号的形式进行包裹,并且设定形参*      4.在接收参数时,使用特定的注解取值@PathVariable** @PathVariable: 参数说明*      1.name/value  动态接收形参的数据  如果参数相同则省略不写*      2.必填项 required 默认为true*/@RequestMapping("/restFul/{id}/{name}")public String restFul(@PathVariable Integer id,@PathVariable String name){System.out.println("获取参数:"+id+"|"+name);return "success";}}

1.2.2 简化业务调用

需求: 按照常规说明 执行增删改查的操作,需要多个业务方法.
例子:
1.新增用户 /insertUser
2.修改用户 /updateUser
3.删除用户 /deleteUser
4.查询用户 /selectUser
说明: 上述的操作在早期这么写没有问题.但是新的请求规范规定应该让请求尽可能变成无状态的请求.(删除动词)

常见请求类型: 1.GET 2.POST 3.PUT 4.DELETE
优化:
1.新增用户 /user 请求类型: POST
2.修改用户 /user 请求类型: PUT
3.删除用户 /user 请求类型: DELETE
4.查询用户 /user 请求类型: GET

优化注解:
总结:
1.利用RestFul 可以简化get请求类型.
2.利用RestFul可以使用无状态的请求,通过不同的请求类型 控制不同的业务逻辑(较为常用)

1.3 JSON

1.3.1 JSON介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式(字符串)。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。

1.3.2 JSON格式

1.3.2.1 Object格式

对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。


JSON练习: {“key1”:“value1”,“key2”:“value2”}

1.3.2.2 Array格式

数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

JSON: [“value1”,“value2”,“value3”]

1.3.2.3 嵌套格式


关于JSON串 嵌套

[true,false,{"id":100,"name":"tomcat","hobbys":["敲代码","玩游戏","找对象",{"username":"admin","password":"123456"}]}]

1.4 SpringMVC JSON返回

1.4.1 学习的意义

现阶段一般的请求都是前后端分离的方式.ajax (jQuery/axios),一般向服务器请求的数据 通常详情下 都是采用JSON串的方式返回.

1.4.2 @ResponseBody注解

package com.jt.controller;import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class JSONController {/*** 需求: 要求根据getJSON的请求,获取User对象的JSON数据.* 用法: 如果需要返回JOSN数据则使用注解@ResponseBody* 知识点讲解:*      返回的对象之后,SpringMVC通过内部API(ObjectMapper)*      调用对象的getXXX()方法动态的获取属性和属性值.*  演化规则:*      getAge() ~~~~~去掉get首字母~~~~~Age()*      ~~~~~~首字母小写~~~~~age()~~~~获取属性age*      ~~~~~通过getAge() 动态获取属性的值**  JSON: {"age": "今年18岁!!!"}*  注意事项:*      必须添加get/set方法*/@RequestMapping("/getJSON")@ResponseBody //返回值就是一个JSON串public User getJSON(){User user = new User();user.setId(1000).setName("JSON测试");return user; //不需要执行视图解析器}
}

1.4.2 @RestController

2 SpringBoot整合其他框架

2.1 创建项目springboot_demo_4

2.2 编辑pom.xml文件

1.SpringBoot包(spring) 2.SpringMVC 3.MybatisPlus

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jt</groupId><artifactId>springboot_demo_4</artifactId><version>1.0-SNAPSHOT</version><!--引入父级工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/></parent><properties><java.version>1.8</java.version></properties><dependencies><!--thymeleaf导入模版工具类--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--SpringMVCjar包文件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--测试包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--引入jdbc包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--引入数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency></dependencies><!--负责项目打包部署--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

2.2 编辑yml配置文件

server:port: 8090spring:datasource:url: jdbc:mysql://127.0.0.1:3306/jtadmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root#整合SpringMVCthymeleaf:#设置页面前缀prefix: classpath:/templates/#设置页面后缀suffix: .html#是否使用缓存cache: falsemybatis-plus:type-aliases-package: com.jt.pojomapper-locations: classpath:/mappers/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true#添加MP日志  打印执行的sql
logging:level:com.jt.mapper: debug

2.3 编辑userList.html页面

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>用户列表数据</title>
</head>
<body><!--准备一个表格--><table border="1px" align="center" width="800px"><tr align="center"><td colspan="4"><h3>用户列表</h3></td></tr><tr align="center"><td>ID</td><td>名称</td><td>年龄</td><td>性别</td></tr><!--1.页面通过request对象 动态的获取userList数据 之后tr展现--><tr align="center" th:each="user : ${userList}"><td th:text="${user.id}"></td><td th:text="${user.name}"></td><td th:text="${user.age}"></td><td th:text="${user.sex}"></td></tr></table>
</body>
</html>

2.4 编辑UserController

/*** 查询所有的用户列表数据,在userList.html中展现数据*/@RequestMapping("/userList")public String userList(Model model){//1.查询业务层获取数据List<User> userList = userService.findAll();//2.将数据保存到Model对象中返回给页面model.addAttribute("userList",userList);return "userList";}

2.5 编辑UserService

@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAll() {return userMapper.selectList(null);}
}

2.6 编辑UserMapper

2.7 页面效果展现

2.8 RestFul策略优化

3. 作业

/*** 需求1: 利用restFul实现用户数据修改*       之后重定向到userList.html页面*       URL地址: /user/id/name** 需求2:*        利用restFul实现数据删除*        url: /user/100(id)*        之后重定向到userList.html页面** 需求3: jQuery的Ajax 预习*/

Spring-jt-Day05-重定向转发JSON其他框架相关推荐

  1. ssm框架重定向_精选 SSM 框架面试题整理

    点击上方"Java学习之道",选择"关注"公众号 每天10:24,干货准时送达! 本文作者:唐_方 链接:https://blog.csdn.net/qq_39 ...

  2. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  3. 三分钟了解Spring Cloud Gateway路由转发之自动路由

    文章目录 一.前言 二.路由配置 1. 静态路由 2. 动态路由 3. 自动路由 三.Spring Cloud Gateway 是如何实现动态路由 工作原理 源码解析 路由转发原理 路由转发源码解析 ...

  4. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...

    Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...

  5. Spring MVC页面重定向

    以下示例显示如何编写一个简单的基于Web的重定向应用程序,这个应用程序使用重定向将http请求传输到另一个页面.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framewor ...

  6. spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

    spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式   在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid" ...

  7. Spring MVC,Ajax和JSON第1部分–设置场景

    我一直在考虑在Spring,Ajax和JSON上写博客,但是我从来没有做过. 这主要是因为它非常复杂,并且所需的技术一直处于变化状态. 当我决定撰写此博客时,我在Internet上有一个侦察员,如果您 ...

  8. Spring MVC,Ajax和JSON第3部分–客户端代码

    如果您一直关注有关Spring,Ajax和JSON的简短博客系列,那么您会回想起我到目前为止已经创建了一个Spring MVC Web应用程序,该应用程序显示一个表单,该表单允许用户选择一堆项目并向服 ...

  9. Spring MVC,Ajax和JSON第2部分–服务器端代码

    在上一个博客中,我说过我将谈论Spring,Ajax和JSON,但是没有. 原因是我想使用(很少)可信的购物网站场景来设置场景. 在这种情况下,当用户单击"电子商务"页面链接时,服 ...

最新文章

  1. java 自带观察者模式_java 内置的观察者模式
  2. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard
  3. docker删除镜像、容器命令
  4. Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error
  5. Spring(二十二):Spring 事务
  6. bzoj 1044: [HAOI2008]木棍分割(二分+DP)
  7. ZooKeeper(3.4.5) - 原生 API 的简单示例
  8. java语言标识符的声明规范
  9. Unity学习日志_NGUI简介
  10. 【错题】#10兰州烧饼——思考角度的转换
  11. 开启京东自动化领京豆
  12. 星际文件系统新动作——建立存储供应商赏金委员会
  13. 宽带连接错误的处理办法
  14. Oracle 层级数据计算方式start with connect by
  15. [集卡游戏]几何分布在竞赛中的应用
  16. DOS批处理高级教程(一) 批处理基础
  17. 来自CCNet的一种创新:语义分割中的十字交叉视觉注意力
  18. android 模拟器的使用(Android模拟器介绍及创建)
  19. Epic games 一直卡在 在我们启动更新时请稍后的解决方法
  20. 3.mysql基本数据类型

热门文章

  1. 如何使用Java获取货币符号?
  2. 联想Thinkpad E470 笔记本 无声音解决方案
  3. 守护线程setDaemon的理解
  4. 【数字电路】数字电子时钟设计
  5. 设置文字样式并写入CAD
  6. DML和DDL的区别
  7. 游戏本自动掉帧_老显卡战新游戏 GTX1060游戏本 近期游戏大作画面设定指南
  8. 借微信更新说说有关版本的那些事儿
  9. 点击修改用户图像php类,php修改图像
  10. 四川企立方电商:拼多多团长是不是免费的