【SpringMVC】基础、环境搭建、注解搭建、 and so on……

news2024/7/6 17:47:23

文章目录

    • SpringMVC
      • 【原理】:
      • 一、why?:
      • 二、环境搭建(配置方式):
        • ▶1.导入jar包
        • ▶2.创建简单测试----创建Controller类继承AbstractController
        • ▶3.如何读取Controller文件,创建SpringMVC.xml配置文件,映射Controller
        • ▶4.在web.xml中读取SpringMVC.xml配置文件
        • ▶5.项目加入Tomcat(Tomcat应该都配置好了,前期Maven有教程)。
        • ▶6.此处没有项目,只是测试我们的Controller是否可以读取,springMVC配置是否完成
      • 三、注解驱动控制器Controller(注解方式)
        • ▶1.web.xml
        • ▶2.SpringMVC.xml配置(头部关于context的命令)
        • ▶3.Controller,不需要继承
      • 四、关于@RequestMapping()
      • 五、关于@RequestParam()传参
      • 六、传对象
      • 七、参数传递(作用域):
        • 1.加注解@ModelAttribute
        • 2.new ModelAndView()
        • 3.model
        • 4.map
        • 5.@SessionAttributes
        • 6.转发与重定向
      • 八、@ResponseBody返回json数据
        • 1.@JsonSerialize(include)空值不返回
        • 2.@JsonSerialize(using)处理前后端对状态类字段不统一,需转换
        • 3.关于Date时间数据类型格式化
      • 九、视图解析器
      • 十、REST风格

SpringMVC

springMVC是一种基于Java实现MVC模型的轻量级Web框架

  • 是一种表现层框架技术
  • 用于进行表现层功能开发

【原理】:

【原理每个人的理解不一样,面试考】
在这里插入图片描述

一、why?:

【重点解决的是servlet问题】以前一个请求写一个servlet,违背了面向对象的原则,都是操作一个模块,却写了很多servlet,麻烦。
创建一个Controller类,请求多个方法,一个模块的执行可以写一个类文件。

二、环境搭建(配置方式):

▶1.导入jar包

  <!--统一版本使用标签properties-->
  <properties>
    <spring.version>4.0.2.RELEASE</spring.version>
  </properties>
<!--SpringMVC的jar包-->  
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
<!--运行Toncat的时候会用到jsp,Controller根源还是servlet-->	
	<!--引入servlet jar包-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <!--引入jsp jar包-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

▶2.创建简单测试----创建Controller类继承AbstractController

//创建IndexController.java类,继承AbstractController,会重写方法
public class IndexController extends AbstractController {
	@Override
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, 
                                                 HttpServletResponse httpServletResponse) throws Exception {
        System.out.println("测试输出====");
        //return返回的试图就是页面
        return new ModelAndView("index.jsp");
    }
}

▶3.如何读取Controller文件,创建SpringMVC.xml配置文件,映射Controller

命令空间有两个没有用到,后续会用的。-------看注释

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--映射Controller,不是new对象,不能用id,用name做路径-->
    <!--在运行Controller时,name的名字就代表路径0---http://localhost:8080/indexController-->
    <bean name="/indexController" class="com.jules.controller.IndexController"></bean>

</beans>

▶4.在web.xml中读取SpringMVC.xml配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <!--读取springmvc配置文件-->
  <servlet>
    <servlet-name>springMVC</servlet-name>  <!--自定义名字-->
    <!--前端控制器-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:SpringMVC.xml</param-value> <!--配置文件路径-->
    </init-param>
    <load-on-startup>1</load-on-startup> <!--项目启动时加载servlet-->
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

▶5.项目加入Tomcat(Tomcat应该都配置好了,前期Maven有教程)。

【▲注意:启动服务器,要想浏览器可以直接打开项目,下图:如果“/”后还有东西,在浏览器地址要加上“/”后面的名称。】
在这里插入图片描述

▶6.此处没有项目,只是测试我们的Controller是否可以读取,springMVC配置是否完成

在这里插入图片描述
在这里插入图片描述


三、注解驱动控制器Controller(注解方式)

上面我们发现执行Controller依旧很麻烦,所以项目一般使用注解进行

▶1.web.xml

和上面一样,它 是读取配置文件的,一直需要。

▶2.SpringMVC.xml配置(头部关于context的命令)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--    &lt;!&ndash;映射Controller,不是new对象,不能用id,用name做路径&ndash;&gt;-->
<!--    <bean name="/indexController" class="com.hz.controller.IndexController"></bean>-->

    <!--自动扫描的包名,只扫描@Controller -->
    <context:component-scan base-package="com.hz.controller" />
    <!--开启注解-->
    <mvc:annotation-driven/>

</beans>

▶3.Controller,不需要继承

  • @Controller:标注一个普通的JavaBean成为可以处理请求的控制器

  • @RequestMapping:通过请求URL进行映射,可以写在方法上,也可以写在类上表示整个模块

@Controller    //必须有
//@RequestMapping("/indexController")
public class IndexController {
//这样可以写多个方法====

    //在方法上注解
    //方法一:
    @RequestMapping("/index")
    public ModelAndView index() {
        System.out.println("index方法~~~~");
        return new ModelAndView("index.jsp");
    }

	//方法二:
    @RequestMapping("/aaa")
    public ModelAndView aaa() {
        System.out.println("aaaa方法~~~~");
        return new ModelAndView("index.jsp");
    }
}

四、关于@RequestMapping()

  • ▶标识在类上:标识这一个模块,区别两个模块中的重复方法

  • ▶标识在方法上:作为路径

    • 拥有属性method

      method:
      RequestMethod.GET------必须以GET方式进入 @GetMapping
      RequestMethod.POST----必须以POST方式进入 @PostMapping

  • ▶传参:

    @Controller
    @RequestMapping("/provider")
    public class ProviderController {
        @RequestMapping(value = "/index",method = RequestMethod.GET)
        //直接传参
        public ModelAndView index(String proName,String proCode) {
            System.out.println("proName=="+proName);
            System.out.println("proCode=="+proCode);
            return new ModelAndView("/index.jsp");
        }
    }
    
  • ▶拥有属性params:请求参数的映射条件,指定请求的URL地址需要带那些参数:params={ “param1=value1” , “param2” , “!param3” --不传}

    • 必须要传的值
      @Controller
      @RequestMapping("/provider")
      public class ProviderController {
      															 //此时proName必须传
          @RequestMapping(value = "/index",method = RequestMethod.GET,params = {"proName"})
          public ModelAndView index(String proName,String proCode) {
              System.out.println("proName=="+proName);
              System.out.println("proCode=="+proCode);
              return new ModelAndView("/index.jsp");
          }
      }
      

五、关于@RequestParam()传参

  • 属性value传递参数的别名;
  • 属性required是否必须传此参数,默认false;
  • 属性defaultValue设置默认值
  • 必须传的值required = true与设置默认值defaultValue="0000"是冲突的
  • 不管是Integer类型还是String类型,传递默认值都要加引号
   public ModelAndView index(@RequestParam(value = "pName",required = true) String proName,
                            String proCode,
                            @RequestParam(value = "id",defaultValue = "1")Integer id) {
      System.out.println("proName=="+proName);
      System.out.println("proCode=="+proCode);
      return new ModelAndView("/index.jsp");
  }

在这里插入图片描述

六、传对象

要加入实体类

<!--简单的jsp页面,属性name的值与实体类对应-->
<body>
    <form action="/provider/testProvider" method="post">
        供应商编号:<input type="text" name="proCode" /><br/>
        供应商名称:<input type="text" name="proName" /><br/>
        <input type="submit" value="注册">
    </form>
</body>
@RequestMapping(value = "/testProvider",method = RequestMethod.POST)
    public ModelAndView saveProvider(Provider provider) {
        System.out.println(provider.toString());
        return new ModelAndView("/index.jsp");
    }

在这里插入图片描述

七、参数传递(作用域):

【前四种是request域,最后一个是session作用域】

1.加注解@ModelAttribute

@Controller
public class IndexController {
    @RequestMapping("/index1")
                             //uname放入request作用域
    public ModelAndView index(@ModelAttribute("uname") String uname) {
        System.out.println("uname==="+uname);
        return new ModelAndView("/index.jsp");
    }
}

2.new ModelAndView()

@Controller
public class IndexController {
    @RequestMapping("/index2")
    public ModelAndView index() {
        //自定义数据放域
        String msg = "这是IndexController类";
        ModelAndView mv = new ModelAndView("/index.jsp");
        mv.addObject("msg",msg);
        //mv.setViewName("视图名");
        return mv;
    }
}

3.model

    @RequestMapping("/index3")
    public String index1(Model model)
    {
        model.addAttribute("user_name","张三");
        return "/index.jsp";
    }

4.map

    @RequestMapping("/index4")
    public String index2(Map<String ,Object> map){
        map.put("user_name","789");
        return "/index.jsp";
    }

【注意:使用EL表达式加-----isELIgnored="false"】

//index.jsp 测试上面request作用域传值
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<body>
<h2>首页~Hello World!</h2>
		${uname}     <br/>
		${msg}       <br/>
		${user_name} <br/>
</body>
</html>

【开启服务器,访问 @RequestMapping("/index~")等路径测试作用域】

5.@SessionAttributes

【@SessionAttributes只能定义在类上,作用是将指定的Model中的键值对添加至session中】

  • @SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。
  • @SessionAttributes(value={“user1”, “user2”}) 会将model中属性名为user1和user2的属性添加到会话中。
  • @SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 User和Dept的属性添加到会话中。
  • @SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。
@Controller
@SessionAttributes(value = {"name"}) //与Model中的键key保持一致
public class IndexController {

    @RequestMapping("/index0")
    public ModelAndView index0(String user_name){
        ModelAndView mv = new ModelAndView("/index.jap");
        //存入Request作用域和Session作用域
        mv.addObject("name",user_name);
        return mv;
    }
}

在这里插入图片描述
在saveProvider.jsp获取数据测试数据是否保存在session中${name}

在这里插入图片描述

6.转发与重定向

【return默认是转发,重定向放在request的值拿不到 】

public String test(User user)
{
    .....
    return "redirect:/user.jsp";  //重定向
    return "forward:页面";        //转发 
}

八、@ResponseBody返回json数据

@ResponseBody这个注解通常使用在控制层(controller)的方法上,其作用是将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端。当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。

  • 假如是字符串则直接将字符串写到客户端。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value=“/路径”,produces=“text/html;charset=utf-8”),前面是请求的路径,后面是编码格式。

  • 假如是一个对象,此时会将对象转化为json串然后写到客户端,返回对象,按utf-8编码。

  • 可以加在类上,下面的所有方法数据返回json
  • 加在方法上,设置当前控制器方法响应内容为当前返回值,无需解析
  • 使用前先导坐标
    <!--JSON依赖-->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.4.3</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.4.3</version>
        </dependency>
    
  • 使用类上的时候:@RestControlle相当于@Controller+@ResponseBody,直接使用@RestControlle即可。
@Controller
//@ResponseBody     //给下面所有方法返回JSON
//@RestController   //相当于@Controller+@ResponseBody
public class IndexController {
	/**
     * 对象返回JSON
     * @return
     */
    @RequestMapping("/findProviderJSON")
    @ResponseBody    //自动返回json
    public Provider findProviderJSON() {
        Provider provider= new Provider();
        provider.setProCode("7811");
        provider.setProName("三百七七");
        return provider;
    }

    /**
     * 集合返回对象
     * @return
     */
    @RequestMapping("/findProListJSON")
    @ResponseBody    //自动返回json,就不会返回页面
    public List<Provider> findProListJSON(){
        List<Provider> provider = new ArrayList<Provider>();
        Provider provider1 = new Provider();
        provider1.setProName("朱尔斯");
        provider1.setCreationDate(new Date());
        Provider provider2 = new Provider();
        provider2.setProName("Jules");
        provider2.setCreationDate(new Date());
        provider.add(provider1);
        provider.add(provider2);
        return provider;
    }

对象返回JSON

在这里插入图片描述
集合返回JSON

在这里插入图片描述

1.@JsonSerialize(include)空值不返回

【看测试图发现没有传的值会返回null,对象中添加@JsonSerialize(),表示空值null不返回】

实体类上添加:
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
表示属性为null不返回

2.@JsonSerialize(using)处理前后端对状态类字段不统一,需转换

【@JsonSerialize注解,主要用于数据转换,该注解作用在该属性的getter()方法上。】

【1.实体类上在需要装换的字段上加上注解】

/**
 * 文字型状态值
 */
@JsonSerialize(using = MySerializerUtils.class)
private int status;

【2.负责转化的类的规则】

public class MySerializerUtils extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String statusStr = "";
        switch (status) {
            case 0:
                statusStr = "暂存";
                break;
            case 1:
                statusStr = "待上报";
                break;
            case 2:
                statusStr = "待审核";
                break;
            case 3:
                statusStr = "已审";
                break;
            case 4:
                statusStr = "退回";
                break;
            case -1:
                statusStr = "已删";
                break;
            default:
                statusStr = "状态信息不符合";
        }
        jsonGenerator.writeString(statusStr);
    }
}

http://www.qb5200.com/article/406882.html

3.关于Date时间数据类型格式化

时间格式化,否则是一串数字:

  • @DateTimeFormat(pattern=" ") 入参时间格式化
  • @JsonFormat(pattern=" ") 输出时间格式化
  • timezone = “GMT+8”,我们在页面显示的时间与北京时间相差8个小时,加timezone处理时差
	//@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  //入参不乱
	//@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")  //返回json的时候防止时间乱
	
	@Setter
	@Getter
	
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 
	private Date creationDate; //创建时间

【但在项目中时间一般用String类型】

九、视图解析器

【在return路径的时候,我们可以省略“/”和“.jsp”,jsp文件名mv.setViewName("index") , 这就需要视图解析器的前缀后缀】
在这里插入图片描述
springMVC.xml中

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
	//前缀:jsp文件所在的路径
	<property name="prefix" value="/WEB-INF/view/"/>
	<property name="suffix" value=".jsp"/>
</bean>

看图理解前缀路径如何写的
在这里插入图片描述

十、REST风格

在我们访问一些网站的时候会发现,它的最后有一串数字,或者数字.html,这是如何实现的呢?

在这里插入图片描述

@Controller
@RequestMapping("/provider")
public class ProviderController {
 @RequestMapping(value = "/jules/{id}.html")
    public ModelAndView stylePage(@PathVariable("id") Integer id) {
        System.out.println("id======"+id);
        return new ModelAndView("index");
    }
}

//请求路径为:http://localhost:8080/provider/jules/11.html
//@RequestMapping(value = "/jules/{id1}/{id}.html") 也可以传多个

在这里插入图片描述
【后缀显示html页面实际上是我们自己的风格,页面还是jsp而已~~】

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

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

相关文章

使用SPACEDESK时iPad显示Connected-Display OFF解决方法

使用SPACEDESK时iPad显示Connected-Display OFF1. SPACEDESK 概述2. 使用SPACEDESK时iPad显示Connected-Display OFF解决方法结束语1. SPACEDESK 概述 SPACEDESK 是一款网络显示多显示器软件&#xff0c;适用于电脑桌面复制&#xff08;镜像或克隆&#xff09;&#xff0c;能将…

[附源码]java毕业设计代驾服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

初识C语言

初识C语言什么是C语言&#xff1a;环境配置&#xff08;VS2019介绍&#xff09;&#xff1a;你的第一个C语言程序常量与变量变量的分类局部变量与全局变量的对比变量的使用&#xff1a;变量的作用域和生命周期&#xff08;重要&#xff09;生命周期常量字符串转义字符注释转义字…

章节1 计算机体系结构

1.2.1-计算机硬件组成-CPU 计算机组成 台式机硬件-内部 台式机硬件-外部结构 CPU Center Processing Unit&#xff08;中央处理器/处理器&#xff09; 常见的电脑处理器&#xff1a; Inetl奔腾8086、酷睿i5 i7 i9&#xff1b;AMD 锐龙 常见的手机处理器&#xff1a; 高通…

SOT-23和SOT-223三极管及MOS管封装区别以及示意图

SOT23封装 三极管 三极管为SOT23封装时&#xff0c;无论是NPN还是PNP。 引脚分布1脚为基极(B)&#xff0c;2脚为发射极(E)&#xff0c;3脚为集电极©。 NPN PNP MOS管 MOS管为SOT23封装时&#xff0c;无论是N-MOS还是P-MOS。 引脚分布1脚为栅极(G)&#xff0c;2脚为源极(S…

Vue3树形控件实现跳转页面

今天想分享的是Vue3中利用element-plus中的树形控件实现跳转页面&#xff0c;做成类似标签页tabs一样的效果。 1、什么是树形控件 树形控件即可以展现层级结构&#xff0c;可以清晰的看到什么需求在哪个项目下&#xff0c;如下图所示 树形控件直通车 2、分析树形控件的基本…

cspj2022 T4 上升点列(point)题解(floyd)

样例一&#xff1a; 8 2 3 1 3 2 3 3 3 6 1 2 2 2 5 5 5 3 样例一输出&#xff1a; 8 样例二&#xff1a; 4 100 10 10 15 25 20 20 30 30 样例二输出&#xff1a; 103 一、题目解析&#xff1a; 平面上有若干个点&#xff0c;若点[i]可以沿着x或y增加方向移动达到点[j…

树的存储结构

双亲存储结构 ● 做法 • 一种顺序存储结构 , 用一组连续空间存储树的所有节点, • 同时在每个节点中附设一个伪指针指示其双亲节点的位置 • 按顺序依次存储 , 逐层逐个节点存储在数组里面 ● 定义存储结构 typedef struct {//定义数据区ElemType data;//指向其双亲在数组中的…

对象的比较(上)PriorityQueue中的底层源码解析

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 问题引入 offer() 扩容 构造方法 grow() siftUp() siftUpComparable&#xff08;&#xff09; 问题引入 问题是这样的&#xff0c…

LeetCode ——160. 相交链表,142. 环形链表 II

✅<1>主页&#xff1a;C语言的前男友 &#x1f4c3;<2>知识讲解&#xff1a;LeetCode经典链表笔试题目 &#x1f525;<3>创作者&#xff1a;C语言的前男友 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f3e1;<5>系统环境&#xff1a;…

机器学习笔记 十八:基于3种方法的随机森林模型分析房屋参数重要性

这里写自定义目录标题1. 探索性数据分析1.1 数据集分割&#xff08;训练集、测试集&#xff09;1.2 模型拟合2. 特征重要性比较2.1 Gini Importance2.2 Permutation Importance2.3 Boruta3. 特征比较3.1 Gini Importance3.2 Permutation Importance3.3 Boruta4. 模型比较将机器…

算法设计与分析复习(一)

判断题&#xff1a; 如果一个NP完全问题能在多项式时间内得到解决&#xff0c;那么NP中的每一个问题都能在多项式时间内求解。&#xff08;T&#xff09;可以用如下方法来证明某结论X成立&#xff1a;先假设X不成立&#xff0c;在此假设基础上推出X成立&#xff0c;则可以证明…

8、Bean的循环依赖问题

8.2 singleton下的set注入产生的循环依赖(解决) A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 比如&#xff1a;丈夫类Husband&#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Husband Data public class …

覆盖变量漏洞

变量覆盖&#xff1a; \> $a 1; $b 2; $a 3; echo $a; > 输出3 .代码从上而下执行&#xff0c;$a被多次定义 常见变量覆盖导致漏洞的函数 \> 经常导致变量覆盖漏洞场景有&#xff1a; $$使用不当 EXTRACT()函数使用不当 PARSE_STR()函数使用不当IMPORT_REQUEST_…

c语言指针(深入了解指针)

前沿&#xff1a; 有人曾说过不会指针等于没有学习c语言&#xff0c;而我也是非常认同这个观点的&#xff0c;要想学习好c语言&#xff0c;指针是比不可缺少的&#xff0c;如果指针学不会c语言也就没办法学好&#xff0c;而向如此越重要的东西越比较难学&#xff0c;但难学并不…

Qt基础之四:Qt信号与槽机制原理及优缺点

信号和插槽用于对象之间的通信。信号和槽机制是Qt的核心特性&#xff0c;可能也是与其他框架提供的特性最大不同的部分。Qt的元对象系统使信号和槽成为可能。 一.简介 在GUI编程中&#xff0c;当我们改变一个控件&#xff0c;通常希望其他控件被通知到。更一般的&#xff0c;…

【优化覆盖】基于matlab果蝇算法求解无线传感器覆盖优化问题【含Matlab源码 2215期】

一、⛄果蝇算法 果蝇优化算法(Fruit Fly Optimization Algorithm, FOA) 是台湾学者潘文超经过研究发现, 并于2011年提出的一种新型智能优化算法, 它具有很好的全局优化性能, 能够解决很多的优化求解问题.果蝇有着优于其它生物的感官知觉, 特别是视觉与嗅觉, 依靠灵敏的嗅觉, 果…

Linux服务器被入侵后的排查思路(应急响应思路)

目录Linux-暴力破解、替换ps命令并留存后门事件复现一、事件背景二、应急响应过程排查crontab后门排查是否有命令被替换响应过程回顾三、事件还原查看后门排查安全日志Linux-暴力破解、替换ps命令并留存后门事件复现 一、事件背景 服务器疑似被入侵&#xff0c;与恶意IP进行通信…

手眼标定笔记

文章目录基本介绍&#xff1a;坐标系变换运算规则&#xff1a;关系运算说明&#xff1a;坐标系运算规则一&#xff1a;坐标系运算规则二&#xff1a;齐次坐标系&#xff1a;齐次坐标系下的坐标变换&#xff1a;眼在手外&#xff1a;眼在手内&#xff1a;解方程&#xff1a;- Ta…

Spring学习第4篇:Spring 的依赖注入

大家家好&#xff0c;我是一名网络怪咖&#xff0c;北漂五年。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深Java选手&#xff0c;深知Spring重要性&#xff0c;现在普遍都使用SpringBoot来开发&#xff0c;面试的时候SpringBoot原理也是经常会问到&…