零基础学JavaWeb开发(二十二)之 springmvc入门到精通(2)

news2024/11/13 9:32:59

3、SpringMVC PostMan工具使用

PostMan简介

Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员会使用到该工具其主要特点 特点: 创建 + 测试:创建和发送任何的HTTP请求,使用PostMan发送 Get、Post、Delete请求等。

PostMan安装包下载:

📎Postman-win64-9.24.2-Setup.rar

4、SpringMVC 请求与响应

@RequestMapping

@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。

如果加载方法上就是具体访问路径 如果加载类上就是我们访问的前缀

springmvc 定义url路径是不允许重复

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method com.mayikt.controller.UserController#add() to { /add}: There is already 'orderController' bean method com.mayikt.controller.OrderController#add() mapped.

package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/user")
public class UserController {
    /**
    * /add UserController.add  OrderController.add?
    * 如果我们将@RequestMapping注解加在我们的类上面 是访问该接口前缀
    * 如果加在方法上就是我们具体的访问路径
    * /user/add
    * @return
    */
    
    @RequestMapping("/add")
    @ResponseBody
    public String add() {
        return "add ok";
    }
    
    @RequestMapping("/delete")
    @ResponseBody
    public String delete() {
        return "delete ok";
    }
    
    @RequestMapping("/select")
    @ResponseBody
    public String select() {
        return "delete ok";
    }
}
package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/order")
public class OrderController {

    @RequestMapping("/add")
    @ResponseBody
    public String add() {
        return "add ok";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delete() {
        return "delete ok";
    }
}

接受Get/Post请求参数

和Controller层方法的形参同名,那么可以直接通过参数名接收值 即可

package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class MemberController {

    /**
     * addMember
     * <p>
     * RequestMapping 默认的情况下 RequestMapping支持所有请求方式 例如 get、post 、delete
     * method = RequestMethod.POST 设定该接口支持的类型 post
     *
     * @return
     */
    @RequestMapping(value = "/addMember", method = RequestMethod.POST)
    @ResponseBody
    public String addMemberPost(Integer id, String name) {
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        return "ok";
    }

    /**
     * addMember
     * <p>
     * RequestMapping 默认的情况下 RequestMapping支持所有请求方式 例如 get、post 、delete
     * method = RequestMethod.POST 设定该接口支持的类型 post
     *
     * @return
     */
    @RequestMapping(value = "/addMember", method = RequestMethod.GET)
    @ResponseBody
    public String addMemberGet(Integer id, String name) {
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        return "ok---get";
    }
}

4.1、springmvc5种接受参数类型

1.普通参数

2.对象参数

3.嵌套对象参数

4.数组参数

5.集合普通参数

普通参数

1.url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数;

2.如果发生url地址传参,地址参数名与形参变量名不同,使用@RequestParam绑定参数关系;

参数:

required:是否为必传参数

defaultValue:参数默认值

HTTP Status 400 - Required Integer parameter 'mayiktAge' is not present

//springmvc5种接受参数类型
//1.普通参数
@RequestMapping("/demo01")
@ResponseBody
public String demo01(String name, Integer age) {
    return "name:" + name + ",age:" + age;
}
//1.普通参数

/**
* 1.@RequestParam("name")地址栏 传递参数名称name 方法形参名称mayiktName
* 2.required 是否必须传递该参数 默认是为true 也就是需要传递该参数 required = false  不需要必须传递该参数
* required
*/
@RequestMapping("/demo02")
@ResponseBody
public String demo02(@RequestParam(name = "name", required = false) String mayiktName,
                     @RequestParam(name = "age", required = false) Integer mayiktAge) {
    return "name:" + mayiktName + ",age:" + mayiktAge;
    }

对象参数

请求参数名与形参对象属性名相同,定义对象类型形参即可接收参数

嵌套对象参数

嵌套对象参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套对象属性参数

    /**
     * 使用对象来进行接受参数
     * 地址栏中传递的参数名称与对象中成员属性名称保持一致即可
     *
     * @param mayiktUser
     * @return
     */
    @RequestMapping("/demo03")
    @ResponseBody
    public String demo02(MayiktUserEntity mayiktUser) {
        return "name:" + mayiktUser.getUserName() + ",age:" + mayiktUser.getAge() + ",addres" +
                mayiktUser.getMayiktUserInfo().getAddres().getBytes("ISO-8859-1","UTF-8");
    }
package com.mayikt.entity;

public class MayiktUserEntity {
    /**
     * ?userName=mayikt&age=22
     */
    private String userName;
    private Integer age;
    /**
     * ?mayiktUserInfo.addres=湖北武汉市
     */
    private MayiktUserInfoEntity mayiktUserInfo;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public MayiktUserInfoEntity getMayiktUserInfo() {
        return mayiktUserInfo;
    }

    public void setMayiktUserInfo(MayiktUserInfoEntity mayiktUserInfo) {
        this.mayiktUserInfo = mayiktUserInfo;
    }
}

数组参数

请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数

http://localhost:85/demo04?arrays=1&arrays=2

    @RequestMapping("/demo04")
    @ResponseBody
    public String demo02(String[] arrays) {
        return Arrays.toString(arrays);
    }

集合保存普通参数

请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

http://localhost:85/demo05?arrays=1&arrays=2

@RequestParam :同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据

@RequestMapping("/demo05")
    @ResponseBody
    public String demo02(@RequestParam List<String> arrays) {
        return Arrays.toString(arrays.toArray());
    }

4.2、springmvc接受json数据

开启接受json数据

@Configuration
@ComponentScan("com.mayikt.controller")
@EnableWebMvc
public class SpringMVCConfig {

maven依赖

  <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>

接受参数加上@RequestBody MayiktUserEntity mayiktUserEntity 标记 接受json数据

自动根据json数据反序列化成对象mayiktUserEntity

1.以实体类方式接收

{
    "userName":"mayikt",
    "age":22,
    "mayiktUserInfo":{
        "addres":"yushengjun"
    }
}
    /**
     * 接受json数据(以实体类方式)
     * {
     * "userName":"mayikt",
     * "age":22
     * }
     *
     * @return
     */
    @RequestMapping("/demo06")
    @ResponseBody
    public String demo06(@RequestBody MayiktUserEntity mayiktUserEntity) {
        return mayiktUserEntity.toString();
    }

2.以Map接收

json数据 key是为 Map的key value Map的value

需要注意json数据value与Map集合value类型保持一致否则报错

  @RequestMapping("/demo08")
    @ResponseBody
    public String demo08(@RequestBody Map<String, String> paramMap) {
        return paramMap.toString();
    }

3.以List接收

[
    {
        "userName": "mayikt",
        "age": "20"
    },
        {
        "userName": "mayikt",
        "age": "22"
    }
]
   @RequestMapping("/demo10")
    @ResponseBody
    public String demo10(@RequestBody List<MayiktUserEntity> list) {
        return list.toArray().toString();
    }
<h1>HTTP Status 415 - </h1>
	<HR size="1" noshade="noshade">
	<p><b>type</b> Status report</p>
	<p><b>message</b> <u></u></p>
	<p><b>description</b> <u>The server refused this request because the request entity is in a format not supported by
			the requested resource for the requested method.</u></p>

没有开启@EnableWebMvc

4.3、springmvc响应json数据

1.在接口上加上@ResponseBody 根据该方法返回值 返回对应json数据 底层 根据返回值 序列化成json数据。

2.@RestController 标记该控制类所有接口都是返回json数据

@Controller
@ResponseBody

@RestController
public class MayiktRestController {

4.4、使用HttpServletRequest 获取参数

springmvc底层基于Servlet

Servlet HttpServletRequest HttpServletResponse

获取httprequest/response三种方式

1.public String mayikt(HttpServletRequest request,HttpServletResponse response)

2.HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

3. @Autowired

private HttpServletRequest request;

    /**
     * 获取到我们的 HttpServletRequest httpServletRequest
     *
     * @param id
     * @param name
     * @param httpServletRequest
     * @return
     */
    @RequestMapping(value = "/httprequestDemo01", method = RequestMethod.GET)
    @ResponseBody
    public String httprequestDemo01(Integer id, String name, HttpServletRequest httpServletRequest) {
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        String reqId = httpServletRequest.getParameter("id");
        String reqName = httpServletRequest.getParameter("name");
        System.out.println("reqId:" + reqId);
        System.out.println("reqName:" + reqName);
        /**
         * 2.HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
         */
        // 从ThreadLocal获取HttpServletRequest  springmvc 底层基于Servlet 提前缓存好了ttpServletRequest
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

        return "ok---get";
    }


    /**
     * 获取到我们的 HttpServletRequest httpServletRequest
     *
     * @param id
     * @param name
     * @return
     */
    @RequestMapping(value = "/httprequestDemo02", method = RequestMethod.GET)
    @ResponseBody
    public String httprequestDemo02(Integer id, String name) {
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        /**
         * 2.HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
         */
        // 从ThreadLocal获取HttpServletRequest  springmvc 底层基于Servlet 提前缓存好了ttpServletRequest
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String reqId = request.getParameter("id");
        String reqName = request.getParameter("name");
        System.out.println("reqId:" + reqId);
        System.out.println("reqName:" + reqName);
        return "ok---get";
    }

4.5、springmvc restful简单介绍

什么是restful

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格规范。基于这个风格设计的软件可以更简洁,更有层次。

资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

传统方式操作资源:通过不同的参数来实现不同的效果,post 和 get。

http://127.0.0.1/mayikt/getUser?id=1 查询,GET 用户id是为1信息

http://127.0.0.1/mayikt/saveUser 新增,POST

http://127.0.0.1/mayikt/updateUser 更新,POST

http://127.0.0.1/mayikt/deleteUser?id=1 删除,GET

(查询、删除)get 写操作(新增、修改)Post

使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果

例如:请求地址一样,但是实现的效果不一样 例如

发送请求get 执行查询、 发送POST 执行新增、发送PUT执行更新、发送DELETE

执行删除

http://127.0.0.1/user/1 查询,GET

http://127.0.0.1/user 新增数据,POST

http://127.0.0.1/user 更新,PUT

http://127.0.0.1/user/1 删除,DELETE

根据发送不同的类型 判断 访问不同的接口

restful案例演示

在@RequestMapping的value中使用URI template({变量名}),然后在@RequestMapping注解方法的需要绑定的参数前,使用@PathVariable指定变量名(如果变量名和参数名一致也可以不指定),从而将URL中的值绑定到参数上。

@RequestMapping组合注解

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@PatchMapping

package com.mayikt.controller;

import com.mayikt.entity.MayiktUserEntity;
import org.springframework.web.bind.annotation.*;


@RestController
public class MayiktUserRestfulController {
    /**
     * Restful api 请求地址都是一样 根据不同请求方法判断
     * User 增加/删除/修改/查询 api接口
     * 提供根据id查询接口 ---请求方法类型  get 指定请求类型 是为get
     * /user/{id}  /user/1
     */
//    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    @GetMapping(value = "/user/{id}")
    public MayiktUserEntity getUser(@PathVariable("id") Integer id) {
        System.out.println("[getUser] id:" + id);
        return new MayiktUserEntity("mayikt" + id, 22);
    }

    /**
     * 根据id删除数据 发送请求类型 delete
     *
     * @param id
     * @return
     */
//    @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
    @DeleteMapping(value = "/user/{id}")
    public String deleteUser(@PathVariable("id") Integer id) {
        System.out.println("[deleteUser] id:" + id);
        return "ok:id" + id;
    }

    /**
     * 新增添加数据 Post类型 传递 json数据
     *
     * @return
     */
//    @RequestMapping(value = "/user", method = RequestMethod.POST)
    @PostMapping(value = "/user")
    public String addUser(@RequestBody MayiktUserEntity mayiktUserEntity) {
        System.out.println("[addUser] mayiktUserEntity:" + mayiktUserEntity);
        return "ok";
    }

    /**
     * 修改数据 put类型 传递 json数据
     *
     * @return
     */
//    @RequestMapping(value = "/user", method = {RequestMethod.PUT})
    @PutMapping(value = "/user")
    public String updateUser(@RequestBody MayiktUserEntity mayiktUserEntity) {
        System.out.println("[updateUser] mayiktUserEntity:" + mayiktUserEntity);
        return "ok";
    }
    /**
     *  @RequestMapping 没有指定请求方法 则 包含所有请求类型 get、put、post等 指定请求方法类型 method = RequestMethod.PUT
     */
}

4.6、springmvc 整合jsp技术(过时 了解该技术)

核心配置

package com.mayikt.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan("com.mayikt.controller")
@EnableWebMvc
public class SpringMVCConfig   implements WebMvcConfigurer {
    /**
     * 1.@Configuration  定义SpringMVCConfig.xml配置文件
     * 2.需要将我们的控制类注入到ioc容器 @ComponentScan("com.mayikt.controller")
     * @ComponentScan("com.mayikt.controller")将该包下所有的类 注入到IOC容器种
     * 3.在springmvc原理 所有请求过来先达到我们的 DispatcherServlet 分发具体控制类 方法执行
     *
     *
     *    @Configuration
     *     SpringMVCConfig.java   @Configuration
     *     springmvc.xml=== SpringMVCConfig.java
     *     -->
     */

    //WebMvcConfigurer
    @Bean
    public InternalResourceViewResolver resourceViewResolver() {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        //请求视图文件的前缀地址
        internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
        //请求视图文件的后缀
        internalResourceViewResolver.setSuffix(".jsp");

        internalResourceViewResolver.setExposeContextBeansAsAttributes(true);
        return internalResourceViewResolver;
    }

    /**
     * 视图配置
     *
     * @param registry
     */
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.viewResolver(resourceViewResolver());
    }
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

webapp 目录下创建 WEB-INF/jsp 存放jsp

定义控制器

package com.mayikt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;


@Controller
public class MayiktJspController {
    @RequestMapping("/mayiktJsp")
    public String mayiktJsp() {
        return "mayikt";
    }
}

定义jsp页面

<%--
  Created by IntelliJ IDEA.
  User: mayikt
  Date: 2022/7/29
  Time: 16:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>mayikt</title>
</head>
<body>
springmvc整合jsp
</body>
</html>

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

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

相关文章

Java IO流之字符流详解

字符流概述 字符流的底层其实就是字节流 字符流 字节流 字符集 字符流特点 输入流&#xff1a;一次读一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节输出流&#xff1a;底层会把数据按照指定的编码方式进行编码&#xff0c;变成字节再写到文件中 使用场景 用于…

学习Go的全部网站集合

给Golang 入门新手整理了一份全部所需网站集合&#xff0c;主要分为三类。 社区类&#xff1a;这类网站是问答、文档、搜索、资源类网站汇总 镜像和安装包类&#xff1a;有些安装包可能无法下载&#xff0c;此处列出一些可下载Go包和镜像的网站。 开发工具&#xff1a;目前流…

代码随想录--栈与队列章节总结

代码随想录–栈与队列章节总结 1.LeetCode232 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾i…

2.4.2 浮点型

1.浮点型基本数据类型介绍 浮点类型用于表示有小数部分的数值。在JAVA种有俩种浮点类型&#xff0c;分别是float和double. 类型字节长度位数取值范围float4字节32约 3.40282347E38Fdouble8字节64约 1.79769313486231570E308 double表示这种类型的数值精度是float类型的俩倍&a…

PyCharm中运行LeetCode中代码

Leetcode中题目只需要写函数体里面内容即可。不需要关注输入&#xff0c;输出。 这里拿LeetCode中第一题&#xff0c;两数之和 “给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数…

随机梯度下降算法 入门介绍(最通俗易懂)

文章目录1.什么是梯度2.什么是梯度下降算法3.什么是随机梯度下降算法1.什么是梯度 首先给出高数课程中梯度的定义&#xff1a; 如果对上面的定义没有理解也没有关系&#xff0c;用通俗的语言来说&#xff0c;梯度实际上就是一个向量&#xff0c;向量中的各个元素表示多元函数在…

Java IO流之字节流详解

一、OutputStream输出流 FileOutputStream概述&#xff1a; 操作本地文件的字节输出流&#xff0c;可以把程序中的数据写到本地文件中 书写步骤&#xff1a; ① 创建字节输出流对象 细节1&#xff1a;参数一是字符串表示的路径或者File对象都是可以的 细节2&#xff1a;如果文…

《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 祝大家春节快乐&#xff01; 视频版&#xff1a; https://www.bilibili.com/video/BV1UY4y1d7C7 《安富莱嵌入式周…

(考研湖科大教书匠计算机网络)第二章物理层-第三、四节:传输方式和编码与调制

文章目录一&#xff1a;传输方式&#xff08;1&#xff09;串行传输和并行传输&#xff08;2&#xff09;同步传输和异步传输&#xff08;3&#xff09;单工、半双工和全双工二&#xff1a;编码与调制&#xff08;1&#xff09;通信相关基础知识①&#xff1a;消息、数据、信号…

linux实战笔记整理(1.24)

后台挂起程序: 如果报错&#xff1a;nohup: ignoring input and appending output to nohup.out&#xff0c;则在指令最后加一个&让程序自己运行&#xff1a;nohup command增加rm 提醒&#xff1a;&#xff08;重要的命令问三遍&#xff09;&#xff1a; 操作&#xff1a; …

为tableview添加带控件的单元格如复选框checkbox与combbox单元格

我们常常会有这样的需求&#xff0c;为QTableView增加复选框checkbox和选择下拉框combbox&#xff0c;毕竟依靠键盘输入不是很好约束其规范性。下面我们逐个来介绍。完成之后的效果如下&#xff1a; 一、准备TableView 1、数据准备 数据大家可以随意准备&#xff0c;有的话…

[C语言]柔性数组

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 1.柔性数组 柔性数组存在于结构体中&#xff0c;当结构体最后一个成员元素为一个未知大小的数组&#xff0c;则称其为柔性数组。 struct s {int a;char arr[];//柔性数组 }; 2.柔性数组的特点 1. 结构中的柔性数…

八、python-高级语法篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频&#xff1a;https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 1. 什么是闭包 2. 闭包的优缺点 3. nonlocal关键字的作用 4. 简单闭包 5. 使用nonlocal关键字修改外部函数的值 6. 使用闭包实现ATM小案例 7. 装饰器概念 8. 装饰器的一般写法 9. 装…

Vue-Router详解

1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语&#xff1a; 在架构一个网络时&#xff0c;非常重要的两个设备就是路由器和交换机。当然&#xff0c;目前在我们生活中路由器也是越来越被大家所熟知&#xff0c;因为我们生活中都会用到路由器&…

算法:树状数组详解(c++实现 求解动态数组区间和问题)

文章目录引入树状数组c完整代码引入 什么是树状数组&#xff1f;&#xff1f;&#xff1f; 解决数据压缩里的累积频率&#xff08;Cumulative Frequency&#xff09;的计算问题&#xff0c;现多用于高效计算数列的前缀和&#xff0c; 区间和&#xff0c;这样的问题可以使用树…

Day8 spring 注解开发

1 前言使用注解类代替xml配置&#xff0c;使用注解代理xml中的标签2 标签2.1 用于Bean(类)上的常见注解2.1.1 Component步骤&#xff1a;在xml中配置包扫描&#xff0c;使得spring知道在哪些类上加上Component在特定类上加上Component测试/*** author : msf* date : 2023/1/24*…

#I. 哆啦A梦的时光机(bfs经典习题)

题目说明有一天&#xff0c;大雄和他的伙伴们想穿越时空进行探险&#xff0c;可是时光机却出了一点故障&#xff0c;只能进行有限的时空穿越操作。大雄他们需要从现在出发&#xff0c;到达一个目标时间点进行探险&#xff0c;结束后再返回到现在&#xff0c;他们希望尽可能减少…

Linux——网络编程概述

Q&#xff1a;为什么要网络编程&#xff1f;A&#xff1a;进程间的通信是依赖于Linux内核的&#xff0c;只能适用于单机&#xff0c;而要实现联机&#xff0c;就要用网络编程&#xff0c;网络编程是面向多台设备间的通信网络编程两个重要概念&#xff1a;IP地址和端口&#xff…

微服务拆分之道

背景 微服务在最近几年大行其道&#xff0c;很多公司的研发人员都在考虑微服务架构&#xff0c;同时&#xff0c;随着 Docker 容器技术和自动化运维等相关技术发展&#xff0c;微服务变得更容易管理&#xff0c;这给了微服务架构良好的发展机会。 在做微服务的路上&#xff0…

JavaWeb | JDBC相关API详解 1(含源码阅读)

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JDBC Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&#x…