Spring-jt-Day05-重定向转发JSON其他框架
版权声明:本文为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其他框架相关推荐
- ssm框架重定向_精选 SSM 框架面试题整理
点击上方"Java学习之道",选择"关注"公众号 每天10:24,干货准时送达! 本文作者:唐_方 链接:https://blog.csdn.net/qq_39 ...
- 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内
背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...
- 三分钟了解Spring Cloud Gateway路由转发之自动路由
文章目录 一.前言 二.路由配置 1. 静态路由 2. 动态路由 3. 自动路由 三.Spring Cloud Gateway 是如何实现动态路由 工作原理 源码解析 路由转发原理 路由转发源码解析 ...
- Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...
Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...
- Spring MVC页面重定向
以下示例显示如何编写一个简单的基于Web的重定向应用程序,这个应用程序使用重定向将http请求传输到另一个页面.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framewor ...
- spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式
spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid" ...
- Spring MVC,Ajax和JSON第1部分–设置场景
我一直在考虑在Spring,Ajax和JSON上写博客,但是我从来没有做过. 这主要是因为它非常复杂,并且所需的技术一直处于变化状态. 当我决定撰写此博客时,我在Internet上有一个侦察员,如果您 ...
- Spring MVC,Ajax和JSON第3部分–客户端代码
如果您一直关注有关Spring,Ajax和JSON的简短博客系列,那么您会回想起我到目前为止已经创建了一个Spring MVC Web应用程序,该应用程序显示一个表单,该表单允许用户选择一堆项目并向服 ...
- Spring MVC,Ajax和JSON第2部分–服务器端代码
在上一个博客中,我说过我将谈论Spring,Ajax和JSON,但是没有. 原因是我想使用(很少)可信的购物网站场景来设置场景. 在这种情况下,当用户单击"电子商务"页面链接时,服 ...
最新文章
- java 自带观察者模式_java 内置的观察者模式
- 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard
- docker删除镜像、容器命令
- Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error
- Spring(二十二):Spring 事务
- bzoj 1044: [HAOI2008]木棍分割(二分+DP)
- ZooKeeper(3.4.5) - 原生 API 的简单示例
- java语言标识符的声明规范
- Unity学习日志_NGUI简介
- 【错题】#10兰州烧饼——思考角度的转换
- 开启京东自动化领京豆
- 星际文件系统新动作——建立存储供应商赏金委员会
- 宽带连接错误的处理办法
- Oracle 层级数据计算方式start with connect by
- [集卡游戏]几何分布在竞赛中的应用
- DOS批处理高级教程(一) 批处理基础
- 来自CCNet的一种创新:语义分割中的十字交叉视觉注意力
- android 模拟器的使用(Android模拟器介绍及创建)
- Epic games 一直卡在 在我们启动更新时请稍后的解决方法
- 3.mysql基本数据类型