Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递)

目录

一、Spring Boot 的Web开发

1. 静态资源映射规则

2. enjoy模板引擎

二、springMVC

1. springMVC-请求处理

测试: 

以post方式请求

限制请求携带的参数

@GetMapping   查询

@PostMapping  新增

@DeleteMapping删除

@PutMapping   修改 

2. springMVC-参数绑定

2.1 基本类型和 String 类型作为参数

单个参数

多个参数

2.2 POJO 类型作为参数

单一对象

对象嵌套       

@RequestParam

2.3 POJO 类中包含集合类型参数

2.4 使用 ServletAPI 对象作为方法参数

3. springMVC-常用注解

3.1 @RequestParam

name属性

多个参数

defaultValue属性:设置默认值

不传参数

3.2 @RequestBody

3.3 @PathVariable

restFul

3.4 @RequestHeader

3.5 @CookieValue

4.springMVC-数据传递

4.1 字符串

充当试图的逻辑名称,默认页面跳转为请求转发方式

作充当一次请求重定向

作充当一次请求转发

通过session传入数据

4.2 json


一、Spring Boot 的Web开发

1. 静态资源映射规则

帮助文档

总结:只要静态资源放在类路径下:

called /static (or /public or /resources or //METAINF/resources

即 放在 static 下就行

访问 : 当前项目根路径/ + 静态资源名

springboot只需要将图片放在 static 下 就可以了

2. enjoy模板引擎

  • 1.将页面保存在templates目录下
  • 2.添加坐标
            <dependency><groupId>com.jfinal</groupId><artifactId>enjoy</artifactId><version>5.0.3</version></dependency>
  • 3.开启配置

在configure包下 新建配置类  官网可以复制

@Configuration
public class SpringBootConfig {@Bean(name = "jfinalViewResolver")public JFinalViewResolver getJFinalViewResolver() {// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr = new JFinalViewResolver();// 对 spring boot 进行配置jfr.setSuffix(".html");jfr.setContentType("text/html;charset=UTF-8");jfr.setOrder(0);// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样Engine engine  = JFinalViewResolver.engine;// 热加载配置能对后续配置产生影响,需要放在最前面engine.setDevMode(true);// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix("/view/")engine.setBaseTemplatePath("/templates/");// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);return jfr;}
}
  • 4.编写代码
@Controller
@RequestMapping("user")
public class UserController {/****@RequestMapping* 意义:处理用户的请求,相似于doget与dopost* 位置:*      类上:一级目录*      方法:二级目录*      例如:user/save*          user/delete*          student/save*          student/delete*  属性:*      value = "",path = ""*      表示请求路径*      =========================*      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式*      =========================*      params = ""*      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数**      注意:1.超链接默认发送的是get请求*          2.所有请求所携带的参数格式均为:key = value**     @DeleteMapping删除*     @PutMapping   修改*     @GetMapping   查询*     @PostMapping  新增**     @RequestMapping可以点击查看源码*     @Target({ElementType.METHOD, ElementType.TYPE})*          METHOD==代表修饰方法,TYPE==代表修饰类* */@RequestMapping(value = "/init")//二级目录public String userInit(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("调用业务层,调用持久层");return  "success";//返回方法执行完要跳转的页面名称}
}

加坐标 写配置类
在templates 下有success.html
不加 responseboding 

二、springMVC

  • 1.请求处理
  • 2.参数绑定
  • 3.常用注解
  • 4.数据传递
  • 5.文件上传

1. springMVC-请求处理

@RequestMapping

  • 意义:处理用户的请求,相似于doget与dopost
  • 位置:
    • 类上:一级目录
    • 方法:二级目录

例如:

  • user/save
  • user/delete
  • student/save
  • student/delete

属性:

  • value = "",path = "" 表示请求路径
  • method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
  •  params = ""限制请求参数,                                                                                              例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数


注意:

  • 1.超链接默认发送的是get请求
  • 2.所有请求所携带的参数格式均为:key = value

还有这些请求

  • @GetMapping   查询

  • @PostMapping  新增

  • @PutMapping   修改

  • @DeleteMapping删除

        

@RequestMapping可以点击查看源码
@Target({ElementType.METHOD, ElementType.TYPE})
 METHOD==代表修饰方法,TYPE==代表修饰类、

浏览器默认 get

post 跳转不了

测试: 

准备工作

1.下载postman

使用postman测试

故 新建一个文件夹 然后新建一个测试 

2. 使用上面的success.html作为返回页面

以post方式请求

@Controller
@RequestMapping("user")
public class UserController {/****@RequestMapping* 意义:处理用户的请求,相似于doget与dopost* 位置:*      类上:一级目录*      方法:二级目录*      例如:user/save*          user/delete*          student/save*          student/delete*  属性:*      value = "",path = ""*      表示请求路径*      =========================*      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式*      =========================*      params = ""*      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数**      注意:1.超链接默认发送的是get请求*          2.所有请求所携带的参数格式均为:key = value**     @DeleteMapping删除*     @PutMapping   修改*     @GetMapping   查询*     @PostMapping  新增**     @RequestMapping可以点击查看源码*     @Target({ElementType.METHOD, ElementType.TYPE})*          METHOD==代表修饰方法,TYPE==代表修饰类* */@RequestMapping(value="/init")//二级目录public String userInit(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("调用业务层,调用持久层");return "success";//返回方法执行完要跳转的页面名称}@RequestMapping(value="/show1",method ={RequestMethod.POST})public String show1(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("使用post方式发送请求进入");return "success";//返回方法执行完要跳转的页面名称}}

输入url

限制请求携带的参数

@RequestMapping(value = "/show2",params = {"msg1=aa","msg2=bb"})public String show2(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("限制请求携带的参数");return "success";//返回方法执行完要跳转的页面名称}

设置参数

@GetMapping   查询

 //使用postman测试@GetMapping("/show3")public String show3(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用get方式请求");return "success";//返回方法执行完要跳转的页面名称}

@PostMapping  新增

 @PostMapping("/show4")public String show4(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用post方式请求");return "success";//返回方法执行完要跳转的页面名称}

@DeleteMapping删除

 

 @DeleteMapping("/show5")public String show5(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用delete方式请求");return "success";//返回方法执行完要跳转的页面名称}

@PutMapping   修改 

@PutMapping("/show6")public String show6(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用put方式请求");return "success";//返回方法执行完要跳转的页面名称}

2. springMVC-参数绑定

springMVC请求参数的绑定
绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
支持数据类型:
1.基本类型参数:
               包括基本类型和 String 类型
2.POJO类型参数:
                包括实体类,以及关联的实体类
3.数组和集合类型参数:
                包括 List 结构和 Map 结构的集合(包括数组)
4.使用 ServletAPI 对象作为方法参数
         HttpServletRequest
         HttpServletResponse
         HttpSession
         java.security.Principal
         Locale
         InputStream
         OutputStream
         Reader
         Writer

使用要求

  • 1.发送请求中携带数据的key与方法参数的name必须一致
  • 2.数据类型合法

测试 准备工作 

在pojo 下创建俩实体类

public class Dep implements Serializable {private  int did;private String dname;//依赖员工集合private List<Emp> mylist;private Map<String, Emp> myMap;
set get tostring..
}
public class Emp {private int eid;private String ename;private String esex;//emp依赖的dep对象private Dep dept;
set get tostring..
}

templates 下创建页面

one.html

<!DOCTYPE html>
<html lang="cn" xmlns:th="http://www.thymeleaf.org">
<head><title>Title</title>
</head>
<body><h1>springMVC控制器方法参数作用:接受用户请求中的数据</h1><hr/><h3>基本类型和 String 类型作为参数</h3><a href="/one/show1?msg1=9527">发送请求1</a><a href="/one/show2?msg1=jdk&msg2=9527">发送请求2</a><h3>POJO 类型作为参数</h3><a href="/one/show3?eid=1&ename=郭凡&esex=小奶狗">发送请求3</a><form action="/one/show4" method="post">员工编号:<input type="text" name="eid" ><br/>员工姓名:<input type="text" name="ename" ><br/>员工性别:<input type="text" name="esex" ><br/>部门编号:<input type="text" name="dept.did" ><br/>部门名称:<input type="text" name="dept.dname" ><br/><input type="submit" value="发送请求4"/></form><form action="/one/map" method="post">员工编号:<input type="text" name="eids"><br/>员工姓名:<input type="text" name="enames"><br/>员工性别:<input type="text" name="esexs"><br/><input type="submit" value="发送请求4(map)"/></form><h3>POJO 类中包含集合类型参数</h3><form action="/one/show5" method="post">部门编号:<input type="text" name="did" ><br/>部门名称:<input type="text" name="dname" ><br/>员工编号1:<input type="text" name="mylist[0].eid" ><br/>员工姓名1:<input type="text" name="mylist[0].ename" ><br/>员工性别1:<input type="text" name="mylist[0].esex" ><br/>员工编号2:<input type="text" name="mylist[1].eid" ><br/>员工姓名2:<input type="text" name="mylist[1].ename" ><br/>员工性别2:<input type="text" name="mylist[1].esex" ><br/>员工编号3:<input type="text" name="myMap['one'].eid" ><br/>员工姓名3:<input type="text" name="myMap['one'].ename" ><br/>员工性别3:<input type="text" name="myMap['one'].esex" ><br/>员工编号4:<input type="text" name="myMap['two'].eid" ><br/>员工姓名4:<input type="text" name="myMap['two'].ename" ><br/>员工性别4:<input type="text" name="myMap['two'].esex" ><br/><input type="submit" value="发送请求5"/></form><a href="/one/show6?nums=123&nums=456&nums=789">发送请求6</a><h3>使用 ServletAPI 对象作为方法参数</h3><a href="/one/show7">发送请求7</a></body>
</html>

success.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>success zkt</h1>
</body>
</html>

配置类同上 

2.1 基本类型和 String 类型作为参数

controller

单个参数
/*** springMVC请求参数的绑定* 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的** 一.支持数据类型:*      1.基本类型参数:*                  包括基本类型和 String 类型*      2.POJO类型参数:*                  包括实体类,以及关联的实体类*      3.数组和集合类型参数:*                  包括 List 结构和 Map 结构的集合(包括数组)*      4.使用 ServletAPI 对象作为方法参数*          HttpServletRequest*          HttpServletResponse*          HttpSession*          java.security.Principal*          Locale*          InputStream*          OutputStream*          Reader*          Writer**  二.使用要求*     1.发送请求中携带数据的key与方法参数的name必须一致*     2.数据类型合法** */@Controller
@RequestMapping("/one")
public class OneController {/*** 进入one.html页面* */@RequestMapping("/show")public String show(){return "one";}/***********************基本类型和 String 类型作为参数*********************************/@RequestMapping("/show1")public String show1(String msg1){System.out.println("=====接受到用户发送数据为:"+msg1+"=======");return "success";}
}

输入http://localhost:8080/one/show

进入主页面

点击发送请求一

测试结果:


多个参数
@RequestMapping("/show2")public String show2(String msg1,int msg2){System.out.println("=====接受到用户发送数据为:"+msg1+"=======");System.out.println("=====接受到用户发送数据为:"+msg2+"=======");return "success";}

点击发送请求二

测试结果

2.2 POJO 类型作为参数

单一对象
/***********************POJO 类型作为参数*********************************///单一对象@RequestMapping("/show3")public String show3(Emp emp){System.out.println("=====接受到用户发送数据为:"+emp+"=======");return "success";}

点击发送请求3

测试结果


对象嵌套       
//对象嵌套@RequestMapping("/show4")public String show4(Emp emp){System.out.println("=====接受到用户发送数据为:"+emp+"=======");return "success";}

点击发送请求4

测试结果


@RequestParam
   //@RequestParam@RequestMapping("/map")public String map(@RequestParam Map map){System.out.println(map);return "success";}

点击发送请求4(map)

测试结果:

2.3 POJO 类中包含集合类型参数

  /*********************POJO 类中包含集合类型参数*********************************/@RequestMapping("/show5")public String show5(Dep dep){System.out.println("=====接受到用户发送数据为:"+dep+"=======");return "success";}

点击发送请求5

测试结果:


   @RequestMapping("/show6")public String show6(int[] nums){System.out.println("=====接受到用户发送数据为:"+ Arrays.toString(nums) +"=======");return "success";}

点击发送请求6

测试结果:

2.4 使用 ServletAPI 对象作为方法参数

 /*********************使用 ServletAPI 对象作为方法参数*********************************/@RequestMapping("/show7")
public String show7(HttpServletRequest request, HttpServletResponse response){System.out.println(request);System.out.println(response);request.getParameter("msg1");HttpSession session = request.getSession();System.out.println(session);
//    session.setAttribute("","");//    try {
//        response.sendRedirect("重定向");
//    } catch (IOException e) {
//        e.printStackTrace();
//    }ServletContext application = session.getServletContext();return "success";
}

点击发送请求7

测试结果:

3. springMVC-常用注解

3.1 @RequestParam

作用:

  • 把请求中指定名称的参数给控制器中的形参赋值。
  • 如果页面标签名称和方法参数名称不一致,可以使用此注解实现

属性:

  • name属性:设置参数名称
  • defaultValue属性:设置默认值
  • required属性:设置是否为必传

测试:

name属性
/*** springMVC常用注解** 一.@RequestParam*      作用:*          把请求中指定名称的参数给控制器中的形参赋值。*          如果页面标签名称和方法参数名称不一致,可以使用此注解实现*      属性:*          name属性:设置参数名称*          defaultValue属性:设置默认值*          required属性:设置是否为必传** 二.@RequestBody*      作用:*          用于获取"请求体"内容。直接使用得到是 key=value&key=value...*          结构的数据,并可以转换为对象*      属性:*          required:是否必须有请求体。默认值是:true。**** 三.@PathVaribale*      作用:*          用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},*          这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之*          后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志*      属性:*          value:用于指定 url 中占位符名称。*          required:是否必须提供占位符。**  Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。*  主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,*  更易于实现缓存机制等。**  Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:*       GET:用于获取资源*       POST:用于新建资源*       PUT:用于更新资源*       DELETE:用于删除资源* 例如:*  /users/1                GET :      得到 id = 1 的 user*  /users/1                DELETE:    删除 id = 1 的 user*  /users/1/新名/新性       PUT:       更新 id = 1 的 user*  /users/新名/新性         POST:      新增 user** */@Controller
@RequestMapping("/one")
public class OneController {/*** @RequestParam("名称必须与页面标签或者url地址key名称一致")* */@RequestMapping("/show1")public String show1(@RequestParam(name="msg1") String msg){System.out.println("=====接受到用户发送数据为:"+msg+"=======");return "success";}
}

使用postman测试


多个参数
@RequestMapping("/show2")public String show2(@RequestParam("msg1") String msg, @RequestParam("msg2") int num){System.out.println("=====接受到用户发送数据为:"+msg+"=======");System.out.println("=====接受到用户发送数据为:"+num+"=======");return "success";}


defaultValue属性:设置默认值
 @RequestMapping("/show3")public String show4(@RequestParam(name = "uname",defaultValue = "暂无用户") String name){System.out.println("账号:"+name);return "success";}


不传参数
@RequestMapping("/test")public String test(@RequestParam String name){System.out.println("账号:"+name);return "success";}

3.2 @RequestBody

作用:

  • 用于获取"请求体"内容。直接使用得到是 key=value&key=value...
  • 结构的数据,并可以转换为对象

属性:
required:是否必须有请求体。默认值是:true。

测试:

/*** 前后端分离* @RequestBody可以将json ===》 javaBean* 注意:*  1.前端不能使用GET方式提交数据,GET方式无请求体* {* 	"eid":007,* 	"ename":"詹姆斯邦德",* 	"esex":"绅士"* }** * */@RequestMapping("/show4")public String show4(@RequestBody Emp emp){System.out.println("=========="+emp+"==========");return "success";}

3.3 @PathVariable

作用:

  • 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},
  • 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的,是 springmvc 支持 rest 风格 URL 的一个重要标志

属性:

  • value:用于指定 url 中占位符名称。
  • required:是否必须提供占位符。
@PostMapping("/show5/{uname}/{pwd}")public String show5(@PathVariable("uname") String msg1, @PathVariable("pwd") String msg2){System.out.println(msg1);System.out.println(msg2);return "success";}

简写

    @PostMapping("/show6/{uname}/{pwd}")public String show6(@PathVariable String uname, @PathVariable String pwd){System.out.println(uname);System.out.println(pwd);return "success";}

restFul

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
更易于实现缓存机制等。


Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

  •  GET:用于获取资源
  •  POST:用于新建资源
  •  PUT:用于更新资源
  •  DELETE:用于删除资源

例如:

  •  /users/1                GET :      得到 id = 1 的 user
  •  /users/1                DELETE:    删除 id = 1 的 user
  •  /users/1/新名/新性       PUT:       更新 id = 1 的 user
  •  /users/新名/新性         POST:      新增 user

3.4 @RequestHeader

作用:用于获取请求消息头。
属性:

  • value:提供消息头名称
  • required:是否必须有此消息头

测试:

 /*** 获取头信息* 只获取头信息中的Accept-Language对应的数据(记得使用浏览器测试)*/@RequestMapping("/show7")public String show7(@RequestHeader(value = "msg1") String msg) {System.out.println(msg);return "success";}

3.5 @CookieValue

作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:

  • value:指定 cookie 的名称。
  • required:是否必须有此 cookie

测试:

 /*** 获取cookie*/@RequestMapping("/show8")public String show8(@CookieValue(value = "JSESSIONID", required = false) String jsessionid) {System.out.println(jsessionid);return "success";}

4.springMVC-数据传递

4.1 字符串

准备工作

index.html

<!DOCTYPE html>
<html lang="cn">
<head><title>Title</title>
</head>
<body><h3>springMVC控制器返回字符串</h3><a href="/string/show1">发送请求1</a><br/><a href="/string/show2">发送请求2</a><br/><a href="/string/show3">发送请求3</a><br/><a href="/string/show4">发送请求4</a><br/><hr/><h3>springMVC控制器返回json字符串</h3><a href="/json/show1">发送请求1</a><br/><a href="/json/show2">发送请求2</a><br/></body>
</html>

success_String.html

注意 测试123的适合将span标签删掉 要不然会报错

<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>返回值String成功页面</h1>
<!--        <span>#(session.emp.eid)</span>-->
<!--        <span>#(session.emp.ename)</span>-->
<!--        <span>#(session.emp.esex)</span><br/>-->
</body>
</html>

主页面


充当试图的逻辑名称,默认页面跳转为请求转发方式
/*** 返回值为:字符串* */
@Controller
@RequestMapping("/string")
public class StringController_01 {/*** 进入首页* */@RequestMapping("/show")public String show(){return "index";}/** 充当试图的逻辑名称,默认页面跳转为请求转发方式* */@RequestMapping("/show1")public String show1(){System.out.println("=========show1=========");return "success_String";}
}


作充当一次请求重定向
 /** 作充当一次请求转发或重定向* */@RequestMapping("/show2")public String show2(){System.out.println("=========show2=========");return "redirect:show1";}


作充当一次请求转发
  @RequestMapping("/show3")public String show3(){System.out.println("=========show3=========");return "forward:show1";}


通过session传入数据
 @RequestMapping("/show4")public String show4(HttpServletRequest request){System.out.println("=========show4=========");//1.查询数据库(模拟)Emp emp = new Emp(1,"张毅老师","男");//2.获取sessionrequest.getSession().setAttribute("emp",emp);return "success_String";}

恢复span标签


4.2 json

@Controller
@RequestMapping("/json")
public class JsonController_02 {/**** @ResponseBody   对象====>json*  位置:1.类*      2.方法*** @RequestBody    json====>对象* 位置:方法参数** @RestController   =  @Controller  +  @ResponseBody** */@RequestMapping("/show1")@ResponseBodypublic List<Emp> show1(){//1模拟数据库Emp emp1 = new Emp(1,"张毅老师","男");Emp emp2 = new Emp(2,"张毅老师","男");Emp emp3 = new Emp(3,"张毅老师","男");List<Emp> list = new ArrayList<>();list.add(emp1);list.add(emp2);list.add(emp3);return list;}
}

打印hello world

@RequestMapping("/show2")@ResponseBodypublic String show2(){return "helloWorld";}

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

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

相关文章

HarmonyOS鸿蒙- 跳转系统应用能力

一、通过弹窗点击设置跳转系统应用能力 1、 自定义弹窗效果图 2、 自定义弹窗代码 import { common, Want } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit;export function alertDialog() {AlertDialog.show({title: ,message: 当前功能依赖定位…

ranger审计日志对接CDH solr

作者&#xff1a;耀灵 一、准备条件 1、已安装完毕ranger-admin 2、已在CDH上部署solr&#xff08;注意在安装solr时更改下solr在zk上的节点信息&#xff09; 二、更改相关配置 1、修改ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties SOLR_USERsolr …

huawei USG6001v1学习---防火墙相关知识(2)

目录 1.安全策略 2.防火墙的状态检测和会话表技术 3.FTP 4.用户认证 5.认证策略 1.安全策略 传统包过滤技术 --- 其本质就是ACL访问控制列表&#xff0c;根据数据包的特征进行过滤&#xff0c;对比规则&#xff0c; 执行对应的动作&#xff1b; 这里数据包的特征 --- …

Web安全:未验证的重定向和转发.

Web安全&#xff1a;未验证的重定向和转发. 未验证的重定向和转发漏洞是一种常见的Web安全漏洞&#xff0c;它允许攻击者将用户重定向到一个恶意的URL&#xff0c;而不是预期的安全URL。这种漏洞通常发生在应用程序处理重定向和转发请求时&#xff0c;未能对目标URL进行适当的…

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗&#xff0c;水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它&#xff0c;display: flex 和 justify-content: center 都可以完成&#xff01; display: flex&#xff1a;将元素定义为flex容器 justify-content&#xff1a;定义项目在主轴…

el-popover嵌套select弹窗点击实现自定义关闭

需求 el-popover弹窗内嵌套下拉选择框&#xff0c;点击el-popover弹出外部区域需关闭弹窗&#xff0c;点击查询、重置需关闭弹窗&#xff0c; 实现 根据需求要自定义弹窗的关闭和显示&#xff0c;首先想到的是visible属性&#xff0c;在实现过程中经过反复的测验&#xff0…

区块链技术实现数字电网内数据可信共享 |《超话区块链》直播预告

随着全球电力市场朝着构建“SmartGrid”和“IntelliGrid”的目标发展&#xff0c;国内电力公司也提出了构建“数字电网”的愿景。清大科越推出新型电力系统区块链服务平台&#xff0c;通过便捷的建链、上链、用链及治链能力&#xff0c;有效解决数字电网各主体间数据共享的信任…

为什么要从C语言开始编程

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;很多小伙伴在入门编程时。都…

docker的学习(一):docker的基本概念和命令

简介 docker的学习&#xff0c;基本概念&#xff0c;以及镜像命令和容器命令的使用 docker docker的基本概念 一次镜像&#xff0c;处处运行。 在部署程序的过程中&#xff0c;往往是很繁琐的&#xff0c;要保证运行的环境&#xff0c;软件的版本&#xff0c;配置文件&…

安装 Maven

安装 Maven 的步骤&#xff1a; 1. 访问 Maven 官方网站: https://maven.apache.org/download.cgi 2. 下载 Maven 的二进制文件 3. 解压下载的文件到希望安装的目录 4. 将 Maven 的 bin 目录添加到您的系统环境变量 PATH 中&#xff08;配置环境变量&#xff09; 这个步骤可…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

澎湃算力 玩转AI 华为昇腾AI开发板——香橙派OriengePi AiPro边缘计算案例评测

澎湃算力 玩转AI 华为昇腾AI开发板 香橙派OriengePi AiPro 边缘计算案例评测 人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。作为推动这一变革的关键力量&#xff0c;边缘计算与AI技术的深度融合正成为行业发展的新趋势…

Redis持久化(AOF和RDB)

目录 前言 一.RDB 1.1手动执行 1.2自动执行 二.AOF 2.1重写机制 三.混合持久化 Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 前言 持久化&#xff0c;在之前&#xff0c;我们接触这个词汇是在mysql数据库当中的事务四大特性里。 持久性&#xff1a;指一旦事…

Linux网络编程之UDP

文章目录 Linux网络编程之UDP1、端口号2、端口号和进程ID的区别3、重新认识网络通讯过程4、UDP协议的简单认识5、网络字节序6、socket编程接口6.1、socket常见接口6.2、sockaddr通用地址结构 7、简单的UDP网络程序7.1、服务器响应程序7.2、服务器执行命令行7.3、服务器英语单词…

vue学习笔记(十)——Vuex(状态管理,组件间共享数据)

1. vuex基础-介绍 1.1 为什么会有Vuex ? 在现代 Web 开发复杂多变的需求驱动之下&#xff0c;组件化开发已然成为了事实上的标准。然而大多数场景下的组件都并不是独立存在的&#xff0c;而是相互协作共同构成了一个复杂的业务功能。 组件间的通信成为了必不可少的开发需求。…

《Linux运维总结:基于ARM64架构CPU使用docker-compose一键离线部署单机版tendis2.4.2》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面对不同的客户部署业务系统&#xff0…

数学建模——快递包裹装箱优化问题(2023年长三角数学建模A题问题一、问题二)

快递包裹装箱优化问题 2022 年&#xff0c;中国一年的包 裹已经超过1000 亿件&#xff0c;占据了全球快递事务量的一半以上。近几年&#xff0c;中国每年新增包裹数量相当于美国整个国家一年的包裹数量&#xff0c;十年前中国还是物流成本最昂贵的国家&#xff0c;当前中国已经…

【IC前端虚拟项目】sanity_case的编写与通包测试

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 在花了大力气完成reference model之后,整个验证环境的搭建就完成了,再多看一下这个结构然后就可以进行sanity_case和通包测试: 关于sanity_case和通包测试我在很多篇文章中说过好多次了在这里就不赘述…

el-menu弹出菜单样式不生效

1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…

华为od 100问 持续分享6-入职体检

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…