SpringMVC系列六: 视图和视图解析器

news2024/11/26 22:29:07

视图和视图解析器

  • 💞基本介绍
  • 💞 自定义视图
    • 为什么需要自定义视图
    • 自定义试图实例-代码实现
    • 自定义视图工作流程小结
    • Debug源码
    • 默认视图解析器执行流程
    • 多个视图解析器执行流程
  • 💞目标方法直接指定转发或重定向
    • 使用实例
    • 指定请求转发流程-Debug源码
    • 指定重定向流程-Debug源码
    • 课后作业

上一讲, 我们学习的是SpringMVC系列五: SpringMVC映射请求数据

现在打开springmvc项目

在这里插入图片描述

💞基本介绍

1.在SpirngMVC中的目标方法最终返回都是一个视图(有各种视图)
2.返回的视图都会由一个视图解析器来处理(视图解析器有很多种)

💞 自定义视图

为什么需要自定义视图

1.在默认情况下, 我们都是返回默认的视图, 然后返回的视图交由SpringMVCInternalResourceViewResolver视图解析器来处理的.

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置属性prefix 和 suffix-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

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

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

1.创建web路径/view.jsp

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

2.创建com.zzw.web.viewresolver.GoodsHandler.java

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

    @RequestMapping("/buy")
    public String buy() {
        System.out.println("buy() 被调用...");
        return "?";//待会再填写自定义视图名称
    }
}

3.创建comzzw.web.viewresolver.MyView.java自定义视图类

/**
 * 解读
 * 1.MyView 继承了AbstractView, 就可以作为一个视图使用
 * 2.@Component(value="myView"), 该视图会注入到容器中, 名字/id 是 zzwView
 */
@Component(value = "zzwView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        //完成视图渲染
        //并且可以确定我们要跳转的页面
        System.out.println("进入到自己的视图");
    }
}

4.创建web路径/WEB-INF/pages/my_view.jsp

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

5.补充MyView的代码

/**
 * 解读
 * 1.MyView 继承了AbstractView, 就可以作为一个视图使用
 * 2.@Component(value="myView"), 该视图会注入到容器中, 名字/id 是 zzwView
 */
@Component(value = "zzwView")
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);
    }
}

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

<!--配置视图解析器[默认视图解析器]-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置属性prefix 和 suffix-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!--
解读
1.配置自定义视图解析器BeanNameViewResolver
2.BeanNameViewResolver可以去解析我们自定义的视图
3.配置 属性 order, 表示视图解析器执行的顺序, 值越小, 优先级越高
4.属性 order 的默认值是最低优先级, 值为 Integer.MAX_VALUE
  int LOWEST_PRECEDENCE = 2,147,483,647;
-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
    <property name="order" value="99"/>
</bean>

7.view.jsp修改请求路径

<h2>自定义视图测试</h2>
<a href="goods/buy">点击到自定义视图</a>br/><br/>

8.GoodsHandler.java完善代码

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

    @RequestMapping("/buy")
    public String buy() {
        System.out.println("buy() 被调用...");
        return "zzwView";//待会再填写自定义视图名称
    }
}

9.Postman测试
在这里插入图片描述

自定义视图工作流程小结

●自定义视图-小结

1.创建一个Viewbean, 该bean需要继承自AbstractView, 并实现renderMergedOutputModel方法
2.并把自定义View加入到IOC容器中
3.自定义视图的视图处理器, 使用BeanNameViewResolver, 这个视图处理器也需要配置到ioc容器
4.BeanNameViewResolver的调用优先级需要设置一下, 设置orderInteger.MAX_VALUE小的值, 以确保其在InternalResourceViewResolver之前被调用

●自定义视图-工作流程

1.SpringMVC调用目标方法, 返回自定义ViewIOC容器中的id
2.SpringMVC调用BeanNameViewResolver解析视图: 从IOC容器中获取 返回id值对应的bean, 即自定义View的对象
3,SpringMVC调用自定义视图的renderMergedOutputModel方法渲染视图
4.说明:如果在SpringMVC调用目标方法, 返回自定义View容器中的id, 不存在, 则仍然按照默认的视图处理器机制处理.

Debug源码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
判断是否实现了View接口, 如果实现了, 返回View对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在MyView视图打个断点

在这里插入图片描述
进入到my_view.jsp
在这里插入图片描述

默认视图解析器执行流程

1.配置默认视图解析器的优先级

<!--配置视图解析器[默认视图解析器]-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置属性prefix 和 suffix-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <!--调整优先级-->
    <property name="order" value="10"/>
</bean>

2.debug源码

在这里插入图片描述

在这里插入图片描述
进入到默认视图解析器
在这里插入图片描述
在这里插入图片描述
由于没有zzwView.jsp页面, 页面会报错
在这里插入图片描述

多个视图解析器执行流程

案例1: 假设自定义视图解析器的优先级大于默认视图解析器

1.将默认视图解析器的优先级大小设置为默认

<!--配置视图解析器[默认视图解析器]-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置属性prefix 和 suffix-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <!--调整优先级-->
    <!--<property name="order" value="10"/>-->
</bean>

2.将自定义视图MyView.javabeanName改为zzwViewx

/**
 * 解读
 * 1.MyView 继承了AbstractView, 就可以作为一个视图使用
 * 2.@Component(value="myView"), 该视图会注入到容器中, 名字/id 是 zzwView
 */
@Component(value = "zzwViewx")
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);
    }
}

3.debug源码

在这里插入图片描述
在这里插入图片描述
在容器中找不到id为zzwView的bean对象. 参数viewNamezzwView,
在这里插入图片描述BeanName视图解析器返回了空, 开始循环第二个默认视图解析器
在这里插入图片描述在这里插入图片描述对返回的view对象进行估算. 没有 /WEB-INF/pages/zzwView.jsp 这个文件, 会报404错误.
在这里插入图片描述在这里插入图片描述

案例2: 假设默认视图解析器的优先级大于自定义视图解析器

1.将默认视图解析器的优先级大小设置为10, 此时自定义视图解析器的优先级是99.

<!--配置视图解析器[默认视图解析器]-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置属性prefix 和 suffix-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <!--调整优先级-->
    <property name="order" value="10"/>
</bean>

2.将自定义视图MyView.java的beanName改为zzwView

/**
 * 解读
 * 1.MyView 继承了AbstractView, 就可以作为一个视图使用
 * 2.@Component(value="myView"), 该视图会注入到容器中, 名字/id 是 zzwView
 */
@Component(value = "zzwView")
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);
    }
}

3.debug源码
在这里插入图片描述
在这里插入图片描述在这里插入图片描述只要执行了默认视图解析器, 找不到页面, 会报404, 不会再执行下一个视图解析器.
在这里插入图片描述

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

使用实例

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

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

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

3.如果指定重定向, 可以定向到web路径下的资源在这里插入图片描述

但是有个例外: 不能重定向到/WEB-INF目录.
原因: WEB-INF下的资源是服务器内部访问的, 浏览器不能访问
在这里插入图片描述

案例
1.修改com.zzw.web.viewresolver.GoodsHandler.java, 增加方法order

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

    @RequestMapping("/order")
    public String order() {
        System.out.println("===========order()===========");
        //1.请求转发到 /WEB-INF/pages/my_view.jsp
        //2.下面的这个路径 /WEB-INF/pages/my_view.jsp
        //  会被解析成 /springmvc/WEB-INF/pages/my_view.jsp
        //return "forward:/WEB-INF/pages/my_view.jsp";

        //1.请求转发到 /aa/bb/ok.jsp
        //2.下面的这个路径 /aa/bb/ok.jsp
        //  会被解析成 /springmvc/aa/bb/ok.jsp
        //return "forward:/aa/bb/ok.jsp";

        /**
         * 直接指定要重定向的页面
         * 1. 对于重定向来说, 不能重定向到 /WEB-INF/ 目录下
         * 2. redirect 关键字, 表示进行重定向
         * 3. /login.jsp 会在服务器解析成 /springmvc/login.jsp
         */
        //return "redirect:/login.jsp";

        //重定向到 /WEB-INF/pages/my_view.jsp
        //下面的这个路径 /WEB-INF/pages/my_view.js 会在服务器解析成
        // /springmvc/WEB-INF/pages/my_view.jsp
        return "redirect:/WEB-INF/pages/my_view.jsp";
    }
}

2.view.jsp增加代码

<body>
<h2>自定义视图测试</h2>
<a href="goods/buy">点击到自定义视图</a><br/><br/>
<a href="goods/order">测试在目标方法中指定请求转发或者重定向到页面</a>
</body>

测试1

//1.请求转发到 /WEB-INF/pages/my_view.jsp
//2.下面的这个路径 /WEB-INF/pages/my_view.jsp 会被解析成 /springmvc/WEB-INF/pages/my_view.jsp
return "forward:/WEB-INF/pages/my_view.jsp";

测试2

//1.请求转发到 /aa/bb/ok.jsp
//2.下面的这个路径 /aa/bb/ok.jsp 会被解析成 /springmvc/aa/bb/ok.jsp
return "forward:/aa/bb/ok.jsp";

测试3

/**
 * 直接指定要重定向的页面
 * 1. 对于重定向来说, 不能重定向到 /WEB-INF/ 目录下
 * 2. redirect 关键字, 表示进行重定向
 * 3. /login.jsp 会在服务器解析成 /springmvc/login.jsp
 */
return "redirect:/login.jsp";

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

测试4

//1.重定向到 /WEB-INF/pages/my_view.jsp
//2.下面的这个路径 /WEB-INF/pages/my_view.js 会在服务器解析成 /springmvc/WEB-INF/pages/my_view.jsp
 return "redirect:/WEB-INF/pages/my_view.jsp";

在这里插入图片描述WEB-INF下的资源是服务器内部访问的, 浏览器不能访问
在这里插入图片描述

指定请求转发流程-Debug源码

在这里插入图片描述

debug源码

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

调用默认的视图解析器
在这里插入图片描述在这里插入图片描述

已经作为一个bean对象存储在容器中
在这里插入图片描述

下一步, 开始渲染

在这里插入图片描述

下一步

在这里插入图片描述

进入

在这里插入图片描述

进入, renderMergedOutputModel()MyView.java中的相仿

在这里插入图片描述

下一步, 找到rd = request.getRequestDispatcher(dispatcherPath);

在这里插入图片描述

下一步

在这里插入图片描述

指定重定向流程-Debug源码

在这里插入图片描述


debug源码

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

SpringMVC有很多视图种类

在这里插入图片描述

下一步

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

进入

在这里插入图片描述

进入, 调用RedirectView的视图渲染方法

在这里插入图片描述

课后作业

1.熟悉前面的SpringMVC映射数据请求, 模型数据, 视图和视图解析的案例
2.清晰Debug源码的流程
3.完成一个简单的用户登录案例
1)编写登陆页面web路径/homework/login.jsp
2)com.zzw.web.homework.LoginHandler [doLogin方法], 如果用户输入用户名是zzw, 密码123, 就可以登陆成功; 否则登陆失败
3)创建JavaBeancom.zzw.web.homework.entity.User.java
4)表单提交数据到doLogin方法, 以User对象形式接收
5)登陆成功到, 页面 web路径/WEB-INF/pages/homework/login_ok.jsp, 并显示登陆欢迎信息 [显示用户名, 模型数据会自动填充到request域中]
6)登陆失败到, 页面 web路径/WEB-INF/pages/homework/login_err.jsp, 并给出重新登录的超链接 [考察web工程路径应用问题]


代码实现

1.在web路径/homework下 新建login.jsp

<head>
    <title>登陆页面</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/doLogin">
    用户名: <input type="text" name="username"/><br/><br/>
    密 码: <input type="text" name="pwd"/><br/><br/>
    <input type="submit" value="登录"/>
</form>
</body>

2.在com.zzw.web.homework下新建LoginHandler

@Controller
public class LoginHandler {

    @RequestMapping("/doLogin")
    public String doLogin(User user) {
        System.out.println("===========doLogin()===========");
        if ("zzw".equals(user.getUsername()) && "123".equals(user.getPwd())) {
	        //使用的是默认视图解析器
            return "forward:/WEB-INF/pages/homework/login_ok.jsp";
        } else {
            return "forward:/WEB-INF/pages/homework/login_err.jsp";
        }
    }
}

3.填充login.jsp的请求路径 涉及-web工程路径问题

<%--
    <%=request.getContextPath()%>/doLogin => /springmvc/doLogin
    /springmvc/doLogin 被浏览器解析成 http://localhost:8080/springmvc/doLogin
--%>
<form action="<%=request.getContextPath()%>/doLogin">

4.在com.zzw.web.homework.entity下新建User.java

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

	//setter, getter方法
}

5.在web路径/WEB-INF/pages/homework下 新建login_ok.jsp
登录成功到login_ok.jsp, 并显示登陆欢迎信息 模型数据默认放入request域.

<head>
    <title>登陆成功</title>
</head>
<body>
登陆成功, 欢迎 ${requestScope.user.username}
</body>

6.在web路径/WEB-INF/pages/homework下 新建login_err.jsp
登陆失败到login_err.jsp, 并给出重新登陆的超链接. 相对路径的知识点

<head>
    <title>登陆失败</title>
</head>
<body>
<a href="homework/login.jsp">重新登陆</a>
</body>

使用自定义视图解析器再次完成

代码实现

1.springDispatcherServlet-servlet.xml中注释掉默认视图解析器的优先级, 使用自定义视图

<!--<property name="order" value="10"/>-->

2.修改LoginHandler

@Controller
public class LoginHandler {

    @RequestMapping("/doLogin")
    public String doLogin(User user) {
        System.out.println("===========doLogin()===========");
        return "homeworkView";
    }
}

3.新建com.zzw.web.homework.viewresolver.MyView

/**
 * 解读
 * 1.MyView 继承了AbstractView, 就可以作为一个试图使用
 * 2.@Component("homeworkView") 表示该视图会注入到容器中, 名字/id 是 homeworkView
 */
@Component("homeworkView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        //完成视图渲染
        //并且可以确定我们要跳转的页面
        System.out.println("进入到了自己的视图");

        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
        if ("zzw".equals(username) && "123".equals(pwd)) {
            request.setAttribute("username", username);
            request.getRequestDispatcher("/WEB-INF/pages/homework/login_ok.jsp")
                    .forward(request, response);
        } else {
            request.getRequestDispatcher("/WEB-INF/pages/homework/login_err.jsp")
                    .forward(request, response);
        }
    }
}

4.修改login_ok.jsp

登陆成功, 欢迎 ${requestScope.username}

在这里插入图片描述

下一讲, 我们学习 SpringMVC系列七: 手动实现SpringMVC底层机制-上

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

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

相关文章

重磅新闻!狂揽120台订单!大运重卡唐山销服一体运营店盛大开业

2024年6月13日&#xff0c;唐山市迎来了一件令人振奋的商用车行业盛事——大运重卡经销商唐山滦都汽贸暨滦州通世坤销服一体盛大开业&#xff01; 参加本次开业庆典的有大运重卡营销中心副总经理助理张申、大运重卡营销中心销售总监倪世界、唐山滦都汽车贸易有限公司总经理王力…

【STM32】使用标准库创建一个工程

创建工程 本系列文章中使用的硬件和软件版本如下&#xff1a; CPU型号&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;V5.38.0.0 ARM编译器版本&#xff1a;V5.06 标准库版本&#xff1a;V1.8.0 1.下载标准库 官网链接&#xff1a;STSW-STM32065 - STM32F4 DSP和标准外…

Go语言轻松搞定Excel的操作,简单生成图表

原文链接&#xff1a;GO轻松搞定Excel 库简介 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLS…

微信小程序接入lottie动画

1、注意&#xff1a;canvas渲染出来的层级太高&#xff0c;当有弹窗的情况会暴露在弹窗外 模拟器上会有这个问题&#xff0c;线上版本不会有 2、需求 需要把lottie动画在小程序的环境下进行展示 3、什么是lottie动画 由Airbnb开发并开源。允许设计师将复杂的矢量动画导出为…

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡&#xff0c;也称为SD NAND或贴片式SD卡&#xff0c;是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同&#xff0c;它采用贴片式封装&#xff0c;可以直接焊接到设备的PCB上&#xff0c;从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测

文章目录 一、文章概览&#xff08;一&#xff09;问题来源&#xff08;二&#xff09;文章的主要工作&#xff08;三&#xff09;相关研究 二、动机&#xff1a;Logits 中缺失的信息&#xff08;一&#xff09;logits&#xff08;三&#xff09;基于零空间的 OOD 评分&#xf…

Python单行代码:一招鲜,吃遍天

大家好&#xff0c;在Python编程中&#xff0c;我们时常需要高效、简洁的代码来解决复杂的问题。今天&#xff0c;我将向大家介绍10个非常有用的Python单行代码。 一行代码指的是将复杂的任务浓缩在一行代码中完成。它充分利用Python的简洁和强大&#xff0c;使代码更简洁、更…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

数据可视化---绘制常用图表,组合图表,定制图表主题

题目一&#xff1a;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 编写程序。根据第9.3.7&#xff0c;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好。 运行代码&#xff1a; #绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 from pyecharts…

男士内裤哪个品牌质量好?国内质量好的男士内裤推荐

今天想和大家分享一个虽不起眼但至关重要的时尚单品——男士内裤。它可能不像外套或鞋子那样引人注目&#xff0c;但却承载着男士们日常的舒适与健康。选择一款合适的男士内裤&#xff0c;不仅能提升穿着体验&#xff0c;更是展现个人品味和生活态度的关键。以下是一些选择内裤…

机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成。 归因分析是数据分析中的一个重要环节&#xff0c;它主要用于确定不同因素对特定结果&#xff08;如销售额、转化率等&#xff09;的贡献…

Nuxt.js 深入浅出:目录结构与文件组织详解

title: Nuxt.js 深入浅出&#xff1a;目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要&#xff1a;本文详述了Nuxt.js框架中关键目录与配置文件的作用及使用方法&#xff0c;包括布局设定、页面结构管理、插件集成、静态资源处理…

Linux安装并配置Java

1、Linux操作系统安装Java 1.1、下载Java JDK解压包 官方提供的网址&#xff1a; 选择Linux版本 下载列表选择最后一项&#xff0c;通过解压方式安装 倒数第二项是以rpm方式进行安装&#xff0c;另一篇安装MySQL时就是用到rpm方法。 1.2、解压JDK tar -zxvf jdk-8u411-lin…

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下&#xff1a; 申请条件 一、企业基本情况 独立企业法人资格&#xff1a;企业需具有独立企业法人资格。注册资本&#xff1a;注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…

1688新品爆款筛选技巧,电商小白也能秒变选品达人

不管是做淘宝、拼多多、抖音、小红书、京东等国内电商平台的商家&#xff0c;可能都有去1688选品的需求。电商环境越来越卷&#xff0c;为了迎合市场和消费者&#xff0c;商家必须不断推陈出新&#xff0c;挖掘潜力新品。 所以有的商友表示想选1688上所有带新品标识的品&#…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

ollama部署本地大模型

文章目录 一、Ollama1.ollama简介2.安装流程&#xff08;1&#xff09;官网下载ollama&#xff08;2&#xff09;选择特定的大模型版本下载安装&#xff08;3&#xff09;测试 二、spring项目集成Ollama的大模型1.环境信息2.配置文件&#xff08;1&#xff09;application.yml&…

shell命令(进程管理和用户管理)

一、进程处理相关命令 1、进程的概念 进程的概念主要有两点&#xff1a; 进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08; text region &#xff09;、数据区域&#xff08; data region &#xff09;和堆栈&am…

基于Spark3.3.4版本,实现Standalone 模式高可用集群部署

目录 一、环境描述 二、部署Spark 节点 2.1 下载资源包 2.2 解压 2.3 配置 2.3.1 配置环境变量 2.3.2 修改workers配置文件 2.3.3 修改spark.env.sh文件 2.3.4 修改spark-defaults.conf 2.4 分发 2.5 启动服务 2.5.1 启动zookeeper 2.5.2 启动hdfs 2.5.3 启动spar…

视频融合平台LntonCVS视频监控汇聚平台:构建多元接入与智能管理的安防新生态

一、视频融合平台概述 视频融合平台支持多种协议和设备类型的接入&#xff0c;包括GB28181、Onvif、RTSP、RTMP、海康SDK、Ehome、大华SDK、宇视SDK等。它能够统一整合和管理来自不同品牌、不同协议的视频资源&#xff0c;构建视频数据资源池&#xff0c;并通过视频资源目录为…