spring-模型数据和视图---视图解析器的说明以及大量代码演示

目录

spring-模型数据

● 说明

应用实例需求

 创建后面所有代码执行成功之后跳转的vote_ok.jsp页面

方式 1: 通过 HttpServletRequest放入 request 域

创建 Master类

创建Pet类

创建model_data.jsp

修改 VoteHandler增加方法

创建vote_ok.jsp, 显示数据

完成测试(Postman 测试)

方式 2: 通过请求的方法参数 Map放入 request,object>

 修改 model_data.jsp, 增加代码

修改 VoteHandler.java增加方法

完成测试(Postman 测试)

方式 3: 通过返回 ModelAndView 对象 实现 request 域数据

 修改 model_data.jsp, 增加代码

修改 VoteHandler.java 增加方法

完成测试(Postman 测试)

使用注意事项

模型数据处理-数据放入 session

● 说明

 修改 model_data.jsp, 增加代码 

修改 VoteHandler.java 增加方法 

修改vote_ok.jsp增加代码

完成测试(Postman 测试)

@ModelAttribute 实现 prepare 方法 

● 基本说明

修改  VoteHandler 增加方法 并测试

@ModelAttribute 最佳实践

视图和视图解析器 

基本介绍

自定义视图

为什么需要自定义视图

自定义视图实例-代码实现

配置 springDispatcherServlet-servlet.xml , 增加自定义视图解析器

 创建MyView.java -自定义视图类

解读

注意

 创建GoodsHandler.java类

 创建view.jsp类

创建/WEB-INF/pages/my_view.jsp类

 完成测试(Postman 测试)

自定义视图-小结

自定义视图-工作流程

目标方法直接指定转发或重定向

目标方法中指定转发或者重定向

● 应用实例-代码实现

修改 GoodsHandler.java, 增加方法 order()

请求转发到 

直接指定要重定向的页面

修改view.jsp

完成测试(页面测试) 

​编辑

 完成测试(Postman 测试)

综合代码演示

完成一个简单的用户登录案例

login.jsp

login_ok.jsp

login_error.jsp

  User.java

LoginHandler.java


spring-模型数据

● 说明

模型数据处理-数据放入 request

开发中, 控制器/处理器中获取的数据如何放入 request 域,然后在前端(VUE/JSP/...) 取出显示

应用实例需求

 创建后面所有代码执行成功之后跳转的vote_ok.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>vote_ok </title>
</head>
<body>
<h1>获取的的数据显示页面</h1>
<hr>
取出 request域的数据-通过前面讲解的el表达式来获取即可
<br>
address: ${requestScope.address}<br>
主人名字= ${requestScope.master.name}
主人id= ${requestScope.master.id}
宠物名字= ${requestScope.master.pet.name}
</body>
</html>

方式 1: 通过 HttpServletRequest放入 request 域

创建 Master类

public class Master {
    private Integer id;
    private String name;
    private Pet pet;//对象的属性是另外一个对象[涉及级联]

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "Master{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pet=" + pet +
                '}';
    }
}

创建Pet类

public class Pet {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Pet{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

创建model_data.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试 模型数据</title>
</head>
<body>
<h1>添加主人信息</h1>
<form action="vote/vote05" method="post">
    主人号:<input type="text" name="id"><br>
    主人名:<input type="text" name="name"><br>
    宠物号:<input type="text" name="pet.id"><br>
    宠物名:<input type="text" name="pet.name"><br>
    <input type="submit" value="添加主人和宠物">
</form>
</body>
</html>

修改 VoteHandler增加方法

解读
1. 演示将提交的数据->springmvc封装到java对象->springmvc 会自动的将其放入到request域
2. 这样我们就可以在跳转到的页面取出数据.

@RequestMapping("/vote")
@Controller
public class VoteHandler {

    @RequestMapping(value = "/vote05")
    public String test05(Master master, HttpServletRequest request) {

        //解读
        //1. springmvc会自动把获取的model模型,放入到request域中,名字就是master
        //2. 也可以手动将master放入到request[一会在讲]
        request.setAttribute("address", "beijing");
        //3. 如果我们希望修改master的属性值
        master.setName("nono");
        //4. 分析一下springmvc默认存放对象到request域中,属性名是
        //   request域 ("master", master) 属性名是类名/类型名 首字母小写
        //返回到一个结果
        return "vote_ok";
    }
}

创建vote_ok.jsp, 显示数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>vote_ok </title>
</head>
<body>
<h1>获取的的数据显示页面</h1>
<hr>
取出 request域的数据-通过前面讲解的el表达式来获取即可
<br>
address: ${requestScope.address}<br>
主人名字= ${requestScope.master.name}
主人id= ${requestScope.master.id}
宠物名字= ${requestScope.master.pet.name}
</body>
</html>

完成测试(Postman 测试)

方式 2: 通过请求的方法参数 Map<String,Object>放入 request

 修改 model_data.jsp, 增加代码

<h1>添加主人信息[测试 Map ]</h1>
<form action="vote/vote06" method="post">
    主人号:<input type="text" name="id"><br>
    主人名:<input type="text" name="name"><br>
    宠物号:<input type="text" name="pet.id"><br>
    宠物名:<input type="text" name="pet.name"><br>
    <input type="submit" value="添加主人和宠物">
</form>

修改 VoteHandler.java增加方法

解读
       1. 需求是通过map对象,添加属性到request中
       2. 原理分析:springmvc会遍历map,然后将map的k-v, 存放到request域 


@RequestMapping("/vote")
@Controller
public class VoteHandler {
//演示通过Map<String,Object> 设置数据到request域

    @RequestMapping(value = "/vote06")
    public String test06(Master master, Map<String, Object> map) {
        System.out.println("------test06-----");
        //解读
        //1. 需求是通过map对象,添加属性到request中
        //2. 原理分析:springmvc会遍历map,然后将map的k-v, 存放到request域
        map.put("address", "beijing...");

        //map.put("master", null);
        //返回到一个结果
        return "vote_ok";
    }
}

完成测试(Postman 测试)

方式 3: 通过返回 ModelAndView 对象 实现 request 域数据

 修改 model_data.jsp, 增加代码

<br/><hr/>
<h1>添加主人信息[测试ModelAndView]</h1>
<form action="vote/vote07" method="post">
    主人号:<input type="text" name="id"><br>
    主人名:<input type="text" name="name"><br>
    宠物号:<input type="text" name="pet.id"><br>
    宠物名:<input type="text" name="pet.name"><br>
    <input type="submit" value="添加主人和宠物">
</form>

修改 VoteHandler.java 增加方法


@RequestMapping("/vote")
@Controller
public class VoteHandler {
// 演示通过返回ModelAndView对象,将数据放入到request域

    @RequestMapping(value = "/vote07")
    public ModelAndView test07(Master master) {

        System.out.println("----test07----");
        ModelAndView modelAndView = new ModelAndView();
        //放入属性到modelAndView对象
        modelAndView.addObject("address", "shanghai");
        //modelAndView.addObject("master", null);
        //可以把从数据库得到的数据->对象-》放入modelAndView[Service-dao-db]
        //这里指定跳转的视图名称
        modelAndView.setViewName("vote_ok");
        //返回结果
        return modelAndView;
    }
}

完成测试(Postman 测试)

使用注意事项

1) 从本质看

请求响应的方法 return "xx", 是返回了一个字符串,其实本质是返回了一个ModelAndView 对象,只是默认被封装起来的. 

2) ModelAndView 即可以包含 model 数据,也可以包含视图信息

3) ModelAndView 对象的 addObject 方法可以添加 key-val 数据,默认在 request 域中

4) ModelAndView 对象 setView 方法可以指定视图名称 

模型数据处理-数据放入 session

● 说明

开发中, 控制器/处理器中获取的数据如何放入 session 域,然后在前端(VUE/JSP/...)取出显示

 

 

 修改 model_data.jsp, 增加代码 

<h1>添加主人信息[测试session]</h1>
<form action="vote/vote08" method="post">
    主人号:<input type="text" name="id"><br>
    主人名:<input type="text" name="name"><br>
    宠物号:<input type="text" name="pet.id"><br>
    宠物名:<input type="text" name="pet.name"><br>
    <input type="submit" value="添加主人和宠物">
</form>

修改 VoteHandler.java 增加方法 

 

@RequestMapping("/vote")
@Controller
public class VoteHandler {
    @RequestMapping(value = "/vote08")
    public String test08(Master master, HttpSession httpSession) {
        System.out.println("----test08----");
        //master对象是默认放在request域
        //我们将master对象放入到session域
        httpSession.setAttribute("master", master);
        httpSession.setAttribute("address", "guangzhou");

        return "vote_ok";//请求转发
    }
}

修改vote_ok.jsp增加代码

<hr>
取出 session域的数据 <br>
address: ${sessionScope.address}<br>
主人名字= ${sessionScope.master.name}
主人信息= ${sessionScope.master}

完成测试(Postman 测试)

@ModelAttribute 实现 prepare 方法 

● 基本说明

开发中,有时需要使用某个前置方法(比如 prepareXxx(), 方法名由程序员定)给目标方法准备一个模型对象

1. @ModelAttribute 注解可以实现 这样的需求

2. 在某个方法上,增加了@ModelAttribute 注解后

3. 那么在调用该 Handler 的任何一个方法时,都会先调用这个方法

修改  VoteHandler 增加方法 并测试

@RequestMapping("/vote")
@Controller
public class VoteHandler {

    @ModelAttribute
    public void prepareModel(){
        System.out.println("prepareModel()-----完成准备工作-----");
    }
}

@ModelAttribute 最佳实践

● 修改用户信息(就是经典的使用这种机制的应用),流程如下:
1. 在修改前,在前置方法中从数据库查出这个用户

2. 在修改方法(目标方法)中,可以使用前置方法从数据库查询的用户

3. 如果表单中对用户的某个属性修改了,则以新的数据为准,如果没有修改,则以数据库的信息为准,比如,用户的某个属性不能修改,就保持原来的值


 

视图和视图解析器 

 

基本介绍

1. 在 springMVC 中的目标方法最终返回都是一个视图(有各种视图)

2. 返回的视图都会由一个视图解析器来处理 (视图解析器有很多种)

自定义视图

为什么需要自定义视图

1. 在默认情况下,我们都是返回默认的视图, 然后这个返回的视图交由 SpringMVC 的InternalResourceViewResolver 视图处理器来处理的

 

2. 在实际开发中,我们有时需要自定义视图,这样可以满足更多更复杂的需求

自定义视图实例-代码实现

配置 springDispatcherServlet-servlet.xml , 增加自定义视图解析器

解读
       

1. 配置自定义视图解析器BeanNameViewResolver

2. BeanNameViewResolver可以去解析我们自定义的视图

3. 配置 属性 order, 表示视图解析器执行的顺序, 值越小, 优先级越高

4. 属性 order 的默认值是最低优先级 ,值为 Integer.MAX_VALUE int LOWEST_PRECEDENCE = 2147483647


    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="99"/>
    </bean>

 创建MyView.java -自定义视图类

解读

 1. MyView继承了AbstractView, 就可以作为一个视图使用
 2. @Component(value = "myView"),该视图会注入到容器中, 名字/id是 myView


@Component(value = "hspView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model,
                                           HttpServletRequest request,
                                           HttpServletResponse response) throws Exception {

        //完成视图渲染
        //并且可以确定我们要跳转的页面 [请求转发] /WEB-INF/pages/my_view.jsp
        System.out.println("进入到自己的视图..");

        //解读
        //1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp
        //2. /WEB-INF/pages/my_view.jsp 会被springmvc解析
        //   /springmvc/WEB-INF/pages/my_view.jsp
        request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")
                .forward(request, response);

    }
}

注意

1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp

2. /WEB-INF/pages/my_view.jsp 会被springmvc解析 /springmvc/WEB-INF/pages/my_view.jsp 

3.最后浏览器解析成http://localhost:8080 /springmvc/WEB-INF/pages/my_view.jsp

 创建GoodsHandler.java类

@RequestMapping("/goods")
@Controller
public class GoodsHandler {

    @RequestMapping(value = "/buy")
    public String buy() {
        System.out.println("------buy()-----");
        return "myView";
    }
}

 创建view.jsp类

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定义视图测试</title>
</head>
<body>
<h1>自定义视图测试</h1>
<a href="goods/buy">点击到自定义视图-</a><br/>
</body>
</html>

创建/WEB-INF/pages/my_view.jsp类

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>my_view页面</title>
</head>
<h1>进入到my_view页面</h1>
<p>是从自定义视图来的..</p>
<body>

</body>
</html>

 完成测试(Postman 测试)

 

自定义视图-小结

1. 自定义视图: 创建一个 View 的 bean, 该 bean 需要继承自 AbstractView, 并实现renderMergedOutputModel 方法。

2. 并把自定义 View 加入到 IOC 容器中

3. 自定义视图的视图处理器,使用 BeanNameViewResolver, 这个视图处理器也需要配置到 ioc 容器

4. BeanNameViewResolver 的调用优先级需要设置一下,设置 order 比 Integer.MAX_VAL小的值. 以确保其在 InternalResourceViewResolver 之前被调用

自定义视图-工作流程

1. SpringMVC 调用目标方法, 返回自定义 View IOC 容器中的 id

2. SpringMVC 调用 BeanNameViewResolver 解析视图: 从 IOC 容器中获取 返回 id 值对应的 bean, 即自定义的 View 的对象

3. SpringMVC 调用自定义视图的 renderMergedOutputModel 方法渲染视图

4. 说明: 如果在 SpringMVC 调用目标方法, 返回自定义 View 在 IOC 容器中的 id,不存在, 则仍然按照默认的视图处理器机制处理

 

目标方法直接指定转发或重定向

目标方法中指定转发或者重定向

1. 默认返回的方式是请求转发,然后用视图处理器进行处理,比如在目标方法中这样写:

 

 

2. 也可以在目标方法直接指定重定向或转发的 url 地址

3. 如果指定重定向,不能定向到 /WEB-INF 目录中

● 应用实例-代码实现

修改 GoodsHandler.java, 增加方法 order()

 

请求转发到 

/WEB-INF/pages/my_view.jsp
下面的 /WEB-INF/pages/my_view.jsp 被解析成 /springmvc/WEB-INF/pages/my_view.jsp
return "forward:/WEB-INF/pages/my_view.jsp";

直接指定要重定向的页面

1. 对于重定向来说,不能重定向到 /WEB-INF/ 目录下

2. redirect 关键字,表示进行重定向

3. /login.jsp 在服务器解析 /springmvc/login.jsp


@RequestMapping("/goods")
@Controller
public class GoodsHandler {   
/**
     * 演示直接指定要请求转发的或者是重定向的页面
     * @return
     */
    @RequestMapping(value = "/order")
    public String order() {
        System.out.println("=======order()=====");

         // return "forward:/WEB-INF/pages/my_view.jsp";
        // return "forward:/aaa/bbb/ok.jsp";
        
        return "redirect:/login.jsp";

        
    }
}

修改view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定义视图测试</title>
</head>
<body>
<h1>自定义视图测试</h1>
<a href="goods/buy">点击到自定义视图-</a><br/>
<a href="goods/order">测试在目标方法中指定请求转发或者重定向的页面-</a><br/>
</body>
</html>

完成测试(页面测试) 

 

 

 完成测试(Postman 测试)

 

综合代码演示

完成一个简单的用户登录案例

1) 编写登录页面 login.jsp
2) LoginHandler [doLogin 方法], 如果用户输入用户名是 wyx, 密码 123 就可以登录成功.

3) 创建 JavaBean : User.java

4) 表单提交数据到 doLogin 方法, 以 User 对象形式接收.

5) 登录成功到, 页面 login_ok.jsp 并显示登录欢迎信息

6) 登录失败, 到页面  login_error.jsp

login.jsp

<form action="login">
    u:<input name="username" type="text"> <br/>
    p:<input name="password" type="password"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>

login_ok.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<h1>登录成功</h1>
欢迎你: ${requestScope.user.username}
<body>

</body>
</html>

login_error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败</title>
</head>
<body>
<h1>登录失败</h1>

<a href="<%=request.getContextPath()%>/homework/login.jsp">返回重新登录</a>
</body>
</html>

1. 这里考察web工程路径的知识点  如果忘记了 可以去看我的博客 链接

2. <%=request.getContextPath()%>/homework/login.jsp

服务器解析 /springmvc/homework/login.jsp

3. 浏览器会解析  为 http://localhost:8080/springmvc/homework/login.jsp

  User.java

public class User {
    //属性..
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

LoginHandler.java

@RequestMapping("/user")
@Controller
public class LoginHandler {

    //处理登录
    @RequestMapping(value = "/login")
    public String doLogin(User user) {
        //判断
        if("wyx".equals(user.getUsername())
                && "123".equals(user.getPassword())){
            //验证OK
            return "forward:/WEB-INF/pages/homework/login_ok.jsp";
        } else {
            return "forward:/WEB-INF/pages/homework/login_error.jsp";
        }

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[LeetCode周赛复盘] 第 103 场双周赛20230429

[LeetCode周赛复盘] 第 103 场双周赛20230429 一、本周周赛总结2656. K 个元素的最大和1. 题目描述2. 思路分析3. 代码实现 2657. 找到两个数组的前缀公共数组1. 题目描述2. 思路分析3. 代码实现 2658. 网格图中鱼的最大数目1. 题目描述2. 思路分析3. 代码实现 2659. 将数组清…

Docker consul

目录 一、Docker consul的容器服务和发现 ①服务注册与发现的含义 ②什么是consul 二、服务部署 ①部署consul服务 &#xff08;1&#xff09;查看集群信息 &#xff08;2&#xff09;通过http api获取集群信息 ②部署registrator服务器 &#xff08;1&#xff09;安装…

计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?

文章目录 一、计算机视觉毕业后找不到工作怎么办&#xff1f;二、大环境&#xff1a;前两年的泡沫太大三、还是要把自己的基本功搞扎实&#xff0c;真正的人才什么时候都紧缺四、转换思路&#xff0c;另投他坑五、要有毅力&#xff0c;心态放平六、最后的建议 一、计算机视觉毕…

应急加固初试(windows sever 2008)

前言 红中(hong_zh0) CSDN内容合伙人、2023年新星计划web安全方向导师、 华为MindSpore截至目前最年轻的优秀开发者、IK&N战队队长、 吉林师范大学网安大一的一名普通学生、搞网安论文拿了回大挑校二、 阿里云专家博主、华为网络安全云享专家、腾讯云自媒体分享计划博主 …

【服务器】威联通NAS文件共享 - 搭建SFTP服务并内网穿透实现在外远程访问

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 1. 威联通NAS启用SFTP 2. 测试局域网访问 3. 内网穿透 3.1 威联通安装cpolar内网穿透 3.2 创建隧道 3.3 测试公网远程访问 4. 配置固定公网TCP端口地址 4.1 保留一个固定TCP…

chatGPT+Midjourney制作绘画本

chatGPTMidjourney制作绘画本 灵感来源&#xff1a;https://www.bilibili.com/video/BV1N24y1F7ga/?spm_id_from888.80997.embed_other.whitelist&vd_source6dd97671c42eb7cf111063714216bd0b 最终效果&#xff1a; 绘本故事 故事塑造能力弱的人可以使用chatGPT来帮助编…

JAVAWeb11-服务器渲染技术 -JSP-01-JSP基础

1. 现状 1、JSP 使用情况 2、Thymeleaf 使用情况, 通常和 SpringBoot 结合(也会讲) 3、Vue 使用情况 2. 学 JSP 前&#xff0c;老师要说的几句话 目前主流的技术是 前后端分离 (比如: Spring Boot Vue/React), 我们会讲的.[看一下]JSP 技术使用在逐渐减少&#xff…

C. Maximum Subrectangle(思维 + 考察两个数组相乘得到的矩阵的含义)

Problem - C - Codeforces 给定两个正整数数组 a 和 b&#xff0c;长度分别为 n 和 m。 定义矩阵 c 为一个 nm 的矩阵&#xff0c;其中 ci,jai⋅bj。 你需要在矩阵 c 中找到一个子矩形&#xff0c;使得它的元素之和最多为 x&#xff0c;并且它的面积&#xff08;即元素总数&a…

【Redis】Redis分布式锁的10个坑

文章目录 前言1. 非原子操作&#xff08;setnx expire&#xff09;2.被别的客户端请求覆盖&#xff08; setnx value为过期时间&#xff09;3. 忘记设置过期时间4. 业务处理完&#xff0c;忘记释放锁5. B的锁被A给释放了6. 释放锁时&#xff0c;不是原子性7. 锁过期释放&…

【Linux内核解析-linux-5.14.10-内核源码注释】MM内存管理内核启动初始化源码解析

源码 这是Linux内核中的mm_init函数的代码&#xff0c;其作用是初始化内存管理相关的组件和数据结构。 static: 这是一个函数声明修饰符&#xff0c;表示该函数只在当前文件中可见。 void __init: 这是函数的返回类型和修饰符&#xff0c;表示该函数是内核初始化代码。 page…

Redis缓存(双写一致性问题)

Redis缓存&#xff08;双写一致性问题&#xff09; 1 什么是缓存?1.1 为什么要使用缓存1.2 如何使用缓存 2 添加缓存2.1 、缓存模型和思路2.2、代码如下 3 缓存更新策略3.1 、数据库缓存不一致解决方案&#xff1a;3.2 、数据库和缓存不一致采用什么方案 4 实现商铺和缓存与数…

( 字符串) 647. 回文子串 ——【Leetcode每日一题】

❓647. 回文子串 难度&#xff1a;中等 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使…

作业区域工服穿戴识别算法 yolov7

作业区域工服穿戴识别系统基于yolov7视频智能图像识别技术&#xff0c;作业区域工服穿戴识别算法模型利用深度学习技术&#xff0c;不需人为干预自动识别现场施工作业人员未按要求穿工作服行为&#xff0c;代替后台工作人员执勤时的人眼判断。YOLOv7 研究团队提出了基于 ELAN 的…

浅谈网络流

网络流 流网络&#xff1a; G ( V , E ) G(V,E) G(V,E)是一个有向图&#xff0c;网络中有两个特殊点&#xff1a;源点s与汇点t。容量用 c c c表示&#xff0c;流量用 f f f表示 流网络G中满足两个性质&#xff1a;1、容量限制(通过一条边的流量不会超过该边的容量)&#xff…

音视频技术开发周刊 | 291

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功&#xff0c;微软是OpenAI的重要投资者&#xff0c;它将ChatGPT植入必应搜索&#…

基于STATCOM的风力发电机稳定性问题仿真分析(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

thinkphp6 JWT报错 ‘“kid“ empty, unable to lookup correct key‘解决办法

文章目录 JWT简介安装问题先前的代码解决办法修改后的完整代码 JWT简介 JWT全称为Json Web Token&#xff0c;是一种用于在网络应用之间传递信息的简洁、安全的方式。JWT标准定义了一种简洁的、自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。由于它的简洁性、可…

关于SpringBoot整合Websocket实现简易对话聊天窗

前言 官网链接&#xff1a;Websocket Websocket 是什么&#xff1f;它可以将两个独立的浏览器窗口作为通信的两端。 这种形式的通信与传统的 HTTP、TCP 所不同。传统的 HTTP 请求—响应协议是无法实现实时通信的&#xff0c;也就是说&#xff0c;只能由客户端向服务端发送请求…

英语中主语从句的概念及其用法,例句(不断更新)

主语从句的原理 主语从句是一种充当整个句子主语的从句&#xff0c;主语从句构成的句子&#xff0c;是要以引导词开头的。它可以用名词性从属连词、关系代词或关系副词引导。主语从句通常位于谓语动词之前&#xff0c;用于表示动作、状态或事件的主体。 以下是一些常用的引导主…

MiniGPT-4,开源了!

上个月GPT-4发布时&#xff0c;我曾写过一篇文章分享过有关GPT-4的几个关键信息。 当时的分享就提到了GPT-4的一个重要特性&#xff0c;那就是多模态能力。 比如发布会上演示的&#xff0c;输入一幅图&#xff08;手套掉下去会怎么样&#xff1f;&#xff09;。 GPT-4可以理解…