【Java-SpringBoot+Vue+MySql】Day3.1-SpringBoot Web开发

news2024/9/29 1:23:13

目录

前期回顾——SpringBoot与Maven

一、web入门 

1、知识点密集区

  (1)spring web依赖

  (2)控制器

​    (3)路由映射

  (4)URL映射

  (5)Method匹配​编辑

  (6)参数传递 

​2、代码示例区

 (1)GET请求1-页面显示字符串

 (2)GET请求2-使用URL传递参数

 (3)参数传递2

 (4) POST请求传递参数

 (5) POST请求传递参数2

 使用url传参

使用请求体传参

         (6) POST请求传递参数3

         (7) POST请求传递参数4

        (8)通配符匹配

 二、web进阶

1、上传文件

2、拦截器

(1) 创建拦截层

 (2)创建配置层

资源分享 


前期回顾——SpringBoot与Maven

 

 

 

 

一、web入门 

1、知识点密集区

(1)spring web依赖

  

 新建项目时添加sprin web依赖

 (2)控制器

适用于前后端不分离的项目与本项目无关。 

 (3)路由映射

  @RequestMapping(value=,method)

 (4)URL映射

 

 (5)Method匹配

(6)参数传递 

 2、代码示例区

(M=模型V=视图C=控制器)

(1)GET请求1-页面显示字符串

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.GET)//等价于 @GetMapping("/hello")
    
    //视图函数
    public String hello(){
        return "hello";
    }
}

 

(2)GET请求2-使用URL传递参数

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.GET)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(String name){  //url传参:http://localhost:8080/hello?name=zhansan
        return "hello,"+name;
    }
}

 

 

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.GET)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(String name,int age){  //url传参:http://localhost:8080/hello?name=zhansan&age=18
        String sage = String.valueOf(age);
        return "name="+name+" "+"age="+sage;
    }
}

 

 

 (3)参数传递2

@RequestParam("name")指定的变量必须传参,否则无法调用函数
package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.GET)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(@RequestParam("name") String name, int age){  //url传参:http://localhost:8080/hello?name=zhansan&age=18
        String sage = String.valueOf(age);
        return "name="+name+" "+"age="+sage;
    }
}

http://localhost:8080/hello?age=18

 

(4) POST请求传递参数

由于还没有写前端部分,所以我们下载APIPost做前端post接口测试

 

 输入代码,启动项目

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.POST)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(){
        return "This is a POST请求";
    }
}

 

 (5) POST请求传递参数2

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.POST)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(String name,String password){
        return "name="+name+",password="+password;
    }
}

 使用url传参

 

使用请求体传参

 

 (6) POST请求传递参数3

创建实体层,添加User类

 

package com.example.bilibili_demo01.entity;

public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}


 控制层

package com.example.bilibili_demo01.controller;

import com.example.bilibili_demo01.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.POST)//等价于 @GetMapping("/hello")

    //视图函数
    public String hello(User user){
        return ""+user;
    }
}

 接口测试 

 (7) POST请求传递参数4

 

使用json格式传参

 代码:

package com.example.bilibili_demo01.controller;

import com.example.bilibili_demo01.entity.User;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.POST)//等价于 @GetMapping("/hello")
    //视图函数
    public String hello(@RequestBody User user){
        System.out.println(user);
        return ""+user;
    }
}

 

 (8)通配符匹配

package com.example.bilibili_demo01.controller;

import com.example.bilibili_demo01.entity.User;
import org.springframework.web.bind.annotation.*;

@RestController//标志控制器
public class HelloController {
    //路由映射
    //url访问:http://localhost:8080/hello
    @RequestMapping(value = "/hello",method = RequestMethod.POST)
    //视图函数
    public String hello(@RequestBody User user){
        System.out.println(user);
        return ""+user;
    }
    @RequestMapping(value = "test/*",method = RequestMethod.GET)//http://localhost:8080/test/111
    public String test(){
        return "通配符匹配";
    }
}

 二、web进阶

1、上传文件

在static目录下存放一张测试图片

在url中添加路径就可在浏览器访问

 统一管理资源路径

 

 在application.properties中添加代码


spring.mvc.static-path-pattern=/images/**

将默认资源路径改为/images/,再访问就必须在路径加上images

 自定义路径:

#默认在resources/static/**
spring.mvc.static-path-pattern=/images/**
#自定义在resources下某个目录
spring.web.resources.static-locations=classpath:/css

 

 

 

 在控制层创建FiledUploadController类

package com.example.bilibili_demo01.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@RestController
public class FiledUploadController {
    @PostMapping("/upload")
    public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException{
        System.out.println(nickname);
        //获取图片原始名称
        System.out.println(photo.getOriginalFilename());
        //取文件类型
        System.out.println(photo.getContentType());
        //System.out.println(System.getProperty("user.dir"));

        String path = request.getServletContext().getRealPath("/upload/");
        System.out.println(path);

        saveFile(photo,path);
        return "上传成功!";
    }

    public void saveFile(MultipartFile photo,String path) throws IOException {
        //判断存储的目录是否存着钱,如果不存在则创建
        File dir = new File(path);
        if(!dir.exists()){
            //创建目录
            dir.mkdir();
        }
        File file = new File(path+photo.getOriginalFilename());
        photo.transferTo(file);
    }
}

在apipost中模拟文件上传

 

 

但是如果上传太大的文件就会出现报错:文件大小超过默认值

 修改上传文件大小

spring.servlet.multipart.max-file-size=10MB

为了方便在浏览器访问已上传的图片,在application.properties中定义。

将默认资源路径改为/upload/

spring.web.resources.static-locations=/upload/

通过浏览器访问成功:http://localhost:8080/Orbit.png

2、拦截器

 

(1) 创建拦截层

 创建登录拦截器

package com.example.bilibili_demo01.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception{
        System.out.println("preHandle");
        return true;
    }
}

 (2)创建配置层

调用拦截器

 

package com.example.bilibili_demo01.config;

import com.example.bilibili_demo01.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new LoginInterceptor());//拦截全部路径
        //registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");//拦截全部路径
    }
}

启动项目访问页面,后台可以看到拦截成功

 

 

资源分享 

参考链接:3.SpringBoot Controller_哔哩哔哩_bilibili

学习资源:

 链接:https://pan.baidu.com/s/1Me37Mtbbmgox60xgKsuZsQ 
提取码:rplm 
--来自百度网盘超级会员V3000的分享

推荐大佬博客:Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种基于FPGA的雷达综合显示模块技术方案

一、项目整 这是我们做过的一个项目,若有需求,请联系我。开放PCB和软件技术。 以FPGA为核心,开发设计具有多路图像/视频采集、处理、传输、显示等功能的嵌入式视频模块。可对多路SerDes接口输入的高速串行视频流数据进行解析,将…

NSSCTF MOBILE [SWPU 2019]easyapp 详细题解

文章目录 一. 前言二. 安装安卓SDK三. 安装安卓模拟器(推荐夜神模拟器)四. 安装frida和objection五. 解题过程六. 总结 一. 前言 题目地址:[SWPU 2019]easyapp大佬题解[SWPU 2019]easyapp pwjcw的WriteUp 大佬的题解很简单,直接hook就可以看到返回值,但是我看了半天没看明白是…

通过源码分析为什么不推荐使用Executors线程池

线程池是 Java 并发编程中不可缺少的一部分。JDK 提供了一个方便快捷的线程池工具类 Executors,提供了多种创建线程池的静态方法,但是在实际使用中,我们不建议直接使用 Executors 提供的线程池工具类。本篇博客将通过分析 Executors 源码&…

【高性能计算】基于K均值的划分聚类实验

【高性能计算】基于K均值的划分聚类实验 实验目的实验内容实验步骤1、k均值聚类算法1.1 k均值聚类算法的基本思想1.2 k均值聚类算法的聚类过程1.3 k均值聚类算法的算法叙述 2、使用Python语言编写k均值聚类算法的源程序代码并分析其分类原理2.1 读取文件数据并进行可视化2.2 利…

推荐系统中的EE算法

人生中有很多选择问题,当每天中午吃饭的时候,需要选择吃饭的餐馆,那么就面临一个选择,是选择熟悉的好吃的餐馆呢,还是冒风险选择一个没有尝试过的餐馆呢。同样的,推荐系统处处也面临着这样的选择&#xff0…

操作系统 复习-计算题

一. 计算题(共5题,100分) 1.(计算题) 假设有4个进程需要在单CPU上运行,它们的执行时间如下表所示: 进程ID执行时间P18P25P32P44 现在我们需要按照抢占式优先级调度算法来安排这些进程的执行顺序。其中,进…

云原生之深入解析Kubernetes应用包管理器Helm的保姆级教程和实战

一、Helm 简介 ① 什么是 Helm? 我们可以将 Helm 看作 Kubernetes 下的 apt-get/yum,Helm 是 kubernetes 的包管理器,Helm 仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如 hub.dock…

【新星计划·2023】Linux内核、发行版讲解,它们有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、Linux内核版 二、Linux发行版 1、Debian 2、Slackware 3、Red Hat 4、Gentoo 三、内核版和发行版的区别 1、内核版 2、发行…

【Java高级语法】(十一)枚举类:还在因为使用了魔法数而被老大怼吗,一起来看看枚举器的作用吧!~

Java高级语法详解之枚举类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用🔍 Enum类的常用方法 4️⃣ 特征5️⃣ 应用场景🌾 总结 1️⃣ 概念 Java枚举类(Enumerator)是在Java 5中引入的新特性,以提供一种更好的方式来表示固定…

TestOne自动化测试日志自动分类算法,帮助用户快速处理执行错误!

自动化测试的每次执行,都会产生大量的日志信息。特别是当执行发生错误,比如数据库异常、通讯异常等情况的时候,大量执行的自动化测试用例会报错。 实际上,很多错误的类型是比较类似的,但由于测试用例的数量很大&#x…

Goby 漏洞发布|泛微E-office协同办公系统 download.php 文件 filename 参数文件读取漏洞

漏洞名称:泛微E-office协同办公系统 download.php 文件 filename 参数文件读取漏洞 English Name:maxView Storage Manager dynamiccontent.properties.xhtml RCE CVSS core: 5.0 影响资产数:4971 漏洞描述: 泛微E-office协同…

餐饮点餐外卖小程序软件开发

餐饮点餐外卖小程序是一种基于微信平台的,提供在线点餐、外卖配送等服务的应用程序。以下是可能有助于餐饮点餐外卖小程序软件开发的功能: 商品展示:提供菜品分类、搜索、详情等功能,让用户可以方便快捷地查看商品信息。 …

研发效能平台的“双流”模型

本文摘于《软件研发效能权威指南》——第 9 章 核心观点 开发人员在多个“单点式”工具平台之间的来回切换是很耗费时间和精力的。“一站式”是指把研发各个环节的软件工程能力集成在一个统一的平台上,对新人友好,对老人提效。“一键式”是指让研发工程…

【流光溢彩】物联网入门 - ESP8266 + WS2812B 制作流光溢彩灯带

一、硬件准备 ESP8266 模块 x1WS2812B 灯带(60/米,根据显示器四周长度买即可) x1杜邦线 若干DC 电源 x1 二、软件准备 1. ESP8266 串口驱动 一般购买详情页都会有写,没有就找商家要一个。 一般是 CH340 或者 CP2102&#xff0c…

在 C4D 和 Redshift 中设置程序变形鸡尾酒动画

今天瑞云渲染小编给大家带来动画设计师 Victor V. 分享的 Pick Your Weapon 项目背后的工作流程,展示了 Cinema 4D 工作流程,并解释了动画是如何在 Redshift 中渲染的。 介绍 我是 Victor,我是居住在意大利的智利动画设计师,一年…

Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE

Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE Command Line Tools for Xcode 14, tvOS 16 & watchOS 9 Simulator Runtime 请访问原文链接:https://sysin.org/blog/apple-xcode-14/,查看最新版。原创作品,转载请保留出处。 作者主页…

基于Confluent Kafka部署Kafka Connect集群,Kafka Connect集群加载debezium插件

基于Confluent Kafka部署Kafka Connect集群,Kafka Connect集群加载debezium插件 一、下载Confluent Kafka二、配置文件connect-distributed.properties三、启动脚本connect-distributed四、启动Kafka Connect集群五、加载debezium插件六、总结和延伸 一、下载Conflu…

leetcode39. 组合总和(回溯算法-java)

组合总和 leetcode39. 组合总和题目描述解题思路代码演示 回溯算法专题 leetcode39. 组合总和 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combination-sum 题目描述 给你一个 无重复元素 的整数数组 candidates 和一…

浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是跨域请求&am…

什么是虚拟展厅?教您快速打造一个3D元宇宙虚拟展厅

引言: 在如今的数字化时代,虚拟展厅和3D元宇宙成为了展示和推广产品、品牌以及创意的新兴方式。虚拟展厅为企业带来了无限的可能性,如何快速打造一个3D元宇宙虚拟展厅成了许多企业想了解的。 一.虚拟展厅的魅力 1.什么是虚拟展厅…