当前位置: 首页 > article >正文

javaWeb Router

一、路由简介

1、什么是路由?

-   定义:路由就是根据不同的 URL 地址展示不同的内容或页面。

-   通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。

2、路由的作用

-   单页应用程序(SPA)中,路由可以实现不同视图之间的无刷新切换,提升用户体验;

-   路由还可以实现页面的认证和权限控制,保护用户的隐私和安全;

-   路由还可以利用浏览器的前进与后退,帮助用户更好地回到之前访问过的页面

二、路由重定向

重定向的作用:将一个路由重定向到另一个路由上

router.js文件:

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import Home from '../components/Home.vue'

import List from '../components/List.vue'

import Add from '../components/Add.vue'

import Update from '../components/Update.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

        {

            path:'/',

            components:{

                default:Home,

                homeView:Home

            }      

        },

        {

            path:'/list',

            components:{

                listView : List

            }

        },

        {

            path:'/showAll',

            // 重定向

            redirect :'/list'

        },

        {

            path:'/add',

            components:{

                addView:Add

            }

        },

        {

            path:'/update',

            components:{

                updateView:Update

            }  

        },

    ]

})

// 对外暴露路由对象

export default router;

 

+ App.vue

```html

<script setup>

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

        <!-- 路由的连接 -->

        <router-link to="/">home</router-link> <br>

        <router-link to="/list">list</router-link> <br>

        <router-link to="/showAll">showAll</router-link> <br>

        <router-link to="/add">add</router-link> <br>

        <router-link to="/update">update</router-link> <br>

      <hr/>

      <!-- 路由连接对应视图的展示位置 -->

      <hr>

      默认展示位置:<router-view></router-view>

      <hr>

      Home视图展示:<router-view name="homeView"></router-view>

      <hr>

      List视图展示:<router-view name="listView"></router-view>

      <hr>

      Add视图展示:<router-view name="addView"></router-view>

      <hr>

      Update视图展示:<router-view name="updateView"></router-view>

    </div>

</template>

<style scoped>

</style>

三、编程式路由

普通路由(声明式路由)

`<router-link to="/list">list页</router-link>  `这种路由,to中的内容目前是固定的,点击后只能切换/list对象组件

> 编程式路由

+ 通过useRouter,动态决定向那个组件切换的路由

+ 这里的 `useRouter` 方法返回的是一个 router 对象,你可以用它来做如导航到新页面、返回上一页面等操作。

+ App.vue

``` html

<script setup type="module">

  import {useRouter} from 'vue-router'

  import {ref} from 'vue'

  //创建动态路由对象

  let router = useRouter()

  let  routePath =ref('')

  let  showList= ()=>{

      // 编程式路由

      // 直接push一个路径

      router.push('/list')

      // 或者push一个带有path属性的对象

      //router.push({path:'/list'})

  }

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

        <!-- 路由的连接 -->

        <router-link to="/">home</router-link> <br>

        <router-link to="/list">list</router-link> <br>

        <router-link to="/showAll">showAll</router-link> <br>

        <router-link to="/add">add</router-link> <br>

        <router-link to="/update">update</router-link> <br>

//以上to后固定了访问路径的都是声明式路由,不能动态修改

        <!-- 动态输入路径,点击按钮,触发单击事件的函数,在函数中通过编程式路由切换页面 -->

        <button @click="showList()">showList</button> <br>

      <hr/>

      <!-- 路由连接对应视图的展示位置 -->

      <hr>

      默认展示位置:<router-view></router-view>

      <hr>

      Home视图展示:<router-view name="homeView"></router-view>

      <hr>

      List视图展示:<router-view name="listView"></router-view>

      <hr>

      Add视图展示:<router-view name="addView"></router-view>

      <hr>

      Update视图展示:<router-view name="updateView"></router-view>

    </div>

</template>

<style scoped>

</style>

四、路由传参

1、路径参数

 在路径中使用一个动态字段来实现,我们称之为路径参数

    + 例如: 查看数据详情  `/showDetail/1`  ,`1`就是要查看详情的id,可以动态添值!

2、键值对参数

类似于get请求通过url传参,数据是键值对形式的

    例如:  查看数据详情`/showDetail?hid=1`,`hid=1`就是要传递的键值对参数

     在 Vue 3 和 Vue Router 4 中,可以使用  `useRoute` 这个函数从 Vue 的组合式 API 中获取路由对象。

    +  `useRoute` 方法返回的是当前的 route 对象,你可以用它来获取关于当前路由的信息,如当前的路径、查询参数等。

对比:useRouter方法返回的是一个router对象,可以用于导航新页面和返回上一个页面。

> 案例需求 : 切换到ShowDetail.vue组件时,向该组件通过路由传递参数

修改App.vue文件

``` html

<script setup type="module">

  import {useRouter} from 'vue-router'

  //创建动态路由对象

  let router = useRouter()

  //动态路由路径传参方法

  let showDetail= (id,language)=>{

      // 尝试使用拼接字符串方式传递路径参数

      //router.push(`showDetail/${id}/${languange}`)

      /*路径参数,需要使用params  */

      router.push({name:"showDetail",params:{id:id,language:language}})

  }

  let showDetail2= (id,language)=>{

      /*uri键值对参数,需要使用query */

      router.push({path:"/showDetail2",query:{id:id,language:language}})

  }

</script>

<template>

    <div>

      <h1>App页面</h1>

      <hr/>

      <!-- 路径参数   -->

      <router-link to="/showDetail/1/JAVA">showDetail路径传参显示JAVA</router-link>

      <button @click="showDetail(1,'JAVA')">showDetail动态路由路径传参显示JAVA</button>

      <hr/>

      <!-- 键值对参数 -->

      <router-link v-bind:to="{path:'/showDetail2',query:{id:1,language:'Java'}}">showDetail2键值对传参显示JAVA</router-link>

      <button @click="showDetail2(1,'JAVA')">showDetail2动态路由键值对传参显示JAVA</button>

      <hr>

      showDetail视图展示:<router-view name="showDetailView"></router-view>

      <hr>

      showDetail2视图展示:<router-view name="showDetailView2"></router-view>

    </div>

</template>

<style scoped>

</style>

```

+ 修改router.js增加路径参数占位符

``` javascript

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import ShowDetail from '../components/ShowDetail.vue'

import ShowDetail2 from '../components/ShowDetail2.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

       

        {

            /* 此处:id  :language作为路径的占位符 */

            path:'/showDetail/:id/:language',

            /* 动态路由传参时,根据该名字找到该路由 */

            name:'showDetail',

            components:{

                showDetailView:ShowDetail

            }  

        },

        {

            path:'/showDetail2',

            components:{

                showDetailView2:ShowDetail2

            }  

        },

    ]

})

// 对外暴露路由对象

export default router;

 

 

 

+ ShowDetail.vue 通过useRoute获取路径参数

``` html

<script setup type="module">

    import{useRoute} from 'vue-router'

    import { onUpdated,ref } from 'vue';

    // 获取当前的route对象

    let route =useRoute()

    let languageId = ref(0)

    let languageName = ref('')

    //  借助更新时生命周期,将数据更新进入响应式对象

    onUpdated (()=>{

        // 获取对象中的参数

        languageId.value=route.params.id

        languageName.value=route.params.language

        console.log(languageId.value)

        console.log(languageName.value)

    })

   

</script>

<template>

    <div>

        <h1>ShowDetail页面</h1>

        <h3>编号{{route.params.id}}:{{route.params.language}}是世界上最好的语言</h3>

        <h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3>

    </div>

</template>

<style scoped>

</style>

```

-   ShowDetail2.vue通过useRoute获取键值对参数

```html

<script setup type="module">

    import{useRoute} from 'vue-router'

    import { onUpdated,ref } from 'vue';

    // 获取当前的route对象

    let route =useRoute()

    let languageId = ref(0)

    let languageName = ref('')

    //  借助更新时生命周期,将数据更新进入响应式对象

    onUpdated (()=>{

        // 获取对象中的参数(通过query获取参数,此时参数是key-value形式的)

        console.log(route.query)

        console.log(languageId.value)

        console.log(languageName.value)

        languageId.value=route.query.id

        languageName.value=route.query.language

       

    })

   

</script>

<template>

    <div>

        <h1>ShowDetail2页面</h1>

        <h3>编号{{route.query.id}}:{{route.query.language}}是世界上最好的语言</h3>

        <h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3>

    </div>

</template>

<style scoped>

</style>

五、路由守卫

在 Vue 3 中,路由守卫是用于在路由切换期间进行一些特定任务的回调函数。路由守卫可以用于许多任务,例如验证用户是否已登录、在路由切换前提供确认提示、请求数据等。Vue 3 为路由守卫提供了全面的支持,并提供了以下几种类型的路由守卫:

1.  全局前置守卫:在路由切换前被调用,可以用于验证用户是否已登录、中断导航、请求数据等。

2.  全局后置守卫:在路由切换之后被调用,可以用于处理数据、操作 DOM 、记录日志等。

3.  守卫代码的位置: 在router.js中

//全局前置路由守卫

router.beforeEach( (to,from,next) => {

    //to 是目标地包装对象  .path属性可以获取地址

    //from 是来源地包装对象 .path属性可以获取地址

      next是方法,不调用默认拦截! next() 放行,直接到达目标组件

    next('/地址')可以转发到其他地址,到达目标组件前会再次经过前置路由守卫

    console.log(to.path,from.path,next)

    //需要判断,注意避免无限重定向,所以一般需要写在分支条件下。

    if(to.path == '/index'){

        next()

    }else{

        next('/index')

    }

   

} )

//全局后置路由守卫

router.afterEach((to, from) => {

    console.log(`Navigate from ${from.path} to ${to.path}`);

});

> 登录案例,登录以后才可以进入home,否则必须进入login

+ 定义Login.vue

```html

<script setup>

    import {ref} from 'vue'

    import {useRouter} from 'vue-router'

    let username =ref('')

    let password =ref('')

    let router = useRouter();

    let login = () =>{

        console.log(username.value,password.value)

        if(username.value == 'root' & password.value == '123456'){

            router.push({path:'/home',query:{'username':username.value}})

            //登录成功利用前端存储机制,存储账号!

            localStorage.setItem('username',username.value)

            //sessionStorage.setItem('username',username)

        }else{

            alert('登录失败,账号或者密码错误!');

        }

    }

</script>

<template>

   

    <div>

        账号: <input type="text" v-model="username" placeholder="请输入账号!"><br>

        密码: <input type="password" v-model="password" placeholder="请输入密码!"><br>

        <button @click="login()">登录</button>

    </div>

</template>

<style scoped>

</style>

```

+ 定义Home.vue

```html

<script setup>

 import {ref} from 'vue'

 import {useRoute,useRouter} from 'vue-router'

 let route =useRoute()

 let router = useRouter()

 //  并不是每次进入home页时,都有用户名参数传入

 //let username = route.query.username

 let username =window.localStorage.getItem('username');

 let logout= ()=>{

    // 清除localStorge中的username

    //window.sessionStorage.removeItem('username')

    window.localStorage.removeItem('username')

    // 动态路由到登录页

    router.push("/login")

 }

</script>

<template>

    <div>

        <h1>Home页面</h1>

        <h3>欢迎{{username}}登录</h3>

        <button @click="logout">退出登录</button>

    </div>

</template>

<style scoped>

</style>

```

+ App.vue

```html

<script setup type="module">

 

</script>

<template>

    <div>

     

      <router-view></router-view>

     

    </div>

</template>

<style scoped>

</style>

```

+ 定义routers.js

``` javascript

// 导入路由创建的相关方法

import {createRouter,createWebHashHistory} from 'vue-router'

// 导入vue组件

import Home from '../components/Home.vue'

import Login from '../components/login.vue'

// 创建路由对象,声明路由规则

const router = createRouter({

    history: createWebHashHistory(),

    routes:[

        {

            path:'/home',

            component:Home

        },

        {

            path:'/',

            redirect:"/home"

        },

        {

            path:'/login',

            component:Login

        },

    ]

})

// 设置路由的全局前置守卫

router.beforeEach((to,from,next)=>{

    /*

    to 要去那

    from 从哪里来

    next 放行路由时需要调用的方法,不调用则不放行

    */

    console.log(`从哪里来:${from.path},到哪里去:${to.path}`)

    if(to.path == '/login'){

        //放行路由  注意放行不要形成循环  

        next()

    }else{

        //let username =window.sessionStorage.getItem('username');

        let username =window.localStorage.getItem('username');

        if(null != username){

            next()

        }else{

            next('/login')

        }

    }

})

// 设置路由的全局后置守卫

router.afterEach((to,from)=>{

    console.log(`从哪里来:${from.path},到哪里去:${to.path}`)

})

// 对外暴露路由对象

export default router;

```

+ 启动测试

```shell

npm run dev

相关文章:

javaWeb Router

一、路由简介 1、什么是路由&#xff1f; - 定义&#xff1a;路由就是根据不同的 URL 地址展示不同的内容或页面。 - 通俗理解&#xff1a;路由就像是一个地图&#xff0c;我们要去不同的地方&#xff0c;需要通过不同的路线进行导航。 2、路由的作用 - 单页应用程序…...

qwen2.5vl技术报告解读

一. 首先qwen2.5vl模型特点 全能文档解析能力 升级文本识别至全场景文档解析,擅长处理多场景、多语种及复杂版式文档(含手写体、表格、图表、化学方程式、乐谱等),实现跨类型文档的精准解析。 跨格式精准目标定位 突破格式限制,大幅提升对象检测、坐标定位与数量统计精度,…...

【Linux】进程的详讲(上)

目录 &#x1f4d6;1、冯诺依曼体系结构 &#x1f4d6;2、硬件介绍 &#x1f4d6;3、内存的重要性 &#x1f4d6;4、程序运行的步骤 &#x1f4d6;5、QQ聊天时的数据流动 &#x1f4d6;6、操作系统 &#x1f4d6;7、操作系统的目的 &#x1f4d6;8、操作系统是如何…...

高精度除法

除数与被除数都是大整数 代码 #include<bits/stdc.h> using namespace std; typedef long long ll; string a,b; vector<int>dend,sor; bool aisbigger(vector<int>&a,vector<int>&b){if(a.size()!b.size())return a.size()>b.size();for…...

Android面试总结之Glide源码级理解

当你的图片列表在低端机上白屏3秒、高端机因内存浪费导致FPS腰斩时&#xff0c;根源往往藏在Glide的内存分配僵化、磁盘混存、网络加载无优先级三大致命缺陷中。 本文从阿里P8级缓存改造方案出发&#xff0c;结合Glide源码实现动态内存扩容、磁盘冷热分区、智能预加载等黑科技&…...

Pyside6 开发 使用Qt Designer

使用Qt Designer 在Scripts目录下打开pyside6-designer.exe 分别将姓名、年龄、爱好对应的输入框的ObjectName 设置为 uname、uage、ulike 提交按钮Object设置为 btnSubmit 点击保存文件 &#xff0c;命名为student.ui 将.ui文件编程成.py文件 pyside6-uic student.ui -o st…...

PyQt6实例_批量下载pdf工具_使用pyinstaller与installForge打包成exe文件

目录 前置&#xff1a; 步骤&#xff1a; step one 准备好已开发完毕的项目代码 step two 安装pyinstaller step three 执行pyinstaller pdfdownload.py&#xff0c;获取初始.spec文件 step four 修改.spec文件&#xff0c;将data文件夹加入到打包程序中 step five 增加…...

局域网共享失败?打印机/文件夹共享工具

很多时候&#xff0c;在办公或家庭环境中&#xff0c;我们需要进行打印机和文件夹的共享&#xff0c;以便更高效地协作和处理文件。然而&#xff0c;寻找对应版本的共享设置或是不想花费太多时间去进行复杂的电脑设置&#xff0c;总是让人感到头疼。今天&#xff0c;我要向大家…...

DeepSeek-V3-250324: AI模型新突破,性能超越GPT-4.5

DeepSeek 于 3 月 25 日宣布完成 V3 模型的小版本升级&#xff0c;推出 DeepSeek-V3-250324 版本。新版本在推理能力、代码生成、中文写作及多模态任务上实现显著优化&#xff0c;尤其在数学和代码类评测中得分超越 GPT-4.5&#xff0c;引发行业高度关注。 DeepSeek-V3-250324…...

第R9周:阿尔兹海默症诊断(优化特征选择版)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 1、导入数据2、数据处理2.1 患病占比2.2 相关性分析2.3 年龄与患病探究 3、特征选择4、构建数据集4.1 数据集划分与标准化4.2 构建加载 5、构建模型6…...

19726 星际旅行

19726 星际旅行 ⭐️难度&#xff1a;困难 &#x1f31f;考点&#xff1a;Dijkstra、省赛、最短路问题、期望、2024 &#x1f4d6; &#x1f4da; import java.util.*;public class Main {static int N 1005;static ArrayList<Integer>[] g new ArrayList[N]; // …...

DeepSeek大模型应用开发新模式

DeepSeek大模型应用全景技术架构 DeepSeek大模型 VS 主流大模型 DeepSeek大模型系统提示词 VS 主流大模型 DeepSeek大模型迭代版本 DeepSeek专业化模型分类 DeepSeek大模型部署所需显存资源 DeepSeek不同参数模型及应用场景 DeepSeek大模型安装部署技术选型...

代码随想录动态规划05

74.一和零 视频讲解&#xff1a;动态规划之背包问题&#xff0c;装满这个背包最多用多少个物品&#xff1f;| LeetCode&#xff1a;474.一和零_哔哩哔哩_bilibili 代码随想录 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小&#…...

Next.js 深度解析:全栈React框架的架构哲学与实践精髓

Next.js 作为 React 生态中最流行的全栈框架&#xff0c;已经超越了简单的SSR工具&#xff0c;发展成为完整的Web开发解决方案。以下从八个维度进行深度剖析&#xff1a; 一、核心架构设计 双引擎驱动模型 页面路由系统&#xff1a;基于文件系统的约定式路由渲染引擎&#xff…...

Node.js Express 处理静态资源

目录 1. 什么是静态资源&#xff1f; 2. 安装 Express 3. 目录结构 4. 创建 server.js 5. 创建 public/index.html 6. 创建 public/style.css 7. 创建 public/script.js 8. 运行服务器 9. 结语 1. 什么是静态资源&#xff1f; 静态资源指的是 HTML、CSS、JavaScript、…...

2025企业级项目设计三叉戟:权限控制+错误监控+工程化提效实战指南

一、权限系统设计&#xff1a;动态路由与按钮级控制的终极方案 1. 权限系统架构设计痛点 路由权限滞后&#xff1a;传统方案需页面加载后动态计算路由表&#xff0c;导致首屏白屏时间增加30%按钮颗粒度不足&#xff1a;基于角色的权限控制&#xff08;RBAC&#xff09;无法满…...

DeepSeek-V3新版本DeepSeek-V3-0324

中国人工智能初创公司深度求索&#xff08;DeepSeek&#xff09;2025年3月24日深夜低调上线了DeepSeek-V3的新版本DeepSeek-V3-0324&#xff0c;参数量为6850亿&#xff0c;在代码、数学、推理等多个方面的能力再次显著提升&#xff0c;甚至代码能力追平美国Anthropic公司大模型…...

108回回目设计

由于108回完整目录篇幅极长&#xff0c;我将以分卷缩略核心回目详解形式呈现&#xff0c;既保证完整性&#xff0c;又避免信息过载。以下是凝练后的完整框架与部分代表性回目&#xff1a; 第一卷&#xff1a;京口草鞋摊的野望&#xff08;1-36回&#xff09; 核心矛盾&#xf…...

探索:如何构建一个自我的AI辅助的开发环境?

构建支持AI的开发辅助环境并实现全流程自动化&#xff0c;需要整合开发工具链、AI模型服务和自动化流水线。以下是分步实施指南&#xff0c;包含关键技术栈和架构设计&#xff1a; 一、开发环境基础架构 1. 工具链集成平台 #mermaid-svg-RFSaibQJwVEcW9fT {font-family:"…...

国产RISC-V车规芯片当前现状分析——从市场与技术角度出发

摘要 随着汽车产业的智能化、电动化转型加速&#xff0c;车规级芯片的战略地位日益凸显。RISC-V指令集凭借其开源、灵活、低功耗等优势&#xff0c;成为国产车规芯片的重要发展方向。本文从市场与技术两个维度出发&#xff0c;深入分析国产RISC-V车规芯片的现状。通过梳理国内…...

华为eNSP-配置静态路由与静态路由备份

一、静态路由介绍 静态路由是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或者链路状态发生改变时&#xff0c;需要网络管理人员手工修改静态路由信息。相比于动态路由协议&#xff0c;静态路由无需频繁地交换各自的路由表&#xff0c;配置简单&#xff0c;比较适合…...

数据分析中,文件解析库解析内容样式调整(openpyxl 、tabulate)

CSV文件&#xff1a;使用Python标准库中的csv模块&#xff0c;通过简单的文本解析来读取数据。 Excel文件&#xff1a;使用专门的库&#xff08;如openpyxl、xlrd&#xff09;来解析复杂的文件格式&#xff0c;或者使用pandas库来简化读取过程。 openpyxl openpyxl 是一个 Pyt…...

时尚界正在试图用AI,创造更多冲击力

数字艺术正以深度融合的方式&#xff0c;在时尚、游戏、影视等行业实现跨界合作&#xff0c;催生了多样化的商业模式&#xff0c;为创作者和品牌带来更多机会&#xff0c;数字艺术更是突破了传统艺术的限制&#xff0c;以趣味触达用户&#xff0c;尤其吸引了年轻一代的消费群体…...

ai画图comfyUI 精准定位gligen。允许指定图像中多个对象的位置和大小

基础功能下&#xff0c;outpainting是内容填充&#xff0c;拉近拉远镜头&#xff0c;自动填充旁边物体。嵌入模型也需要单独下载&#xff0c;演示完示例后推荐模型站有更直观效果介绍和用法。选中精确定位。看一眼坐标&#xff0c;直接默认出一张图。然后修改定位&#xff0c;和…...

Python @property 装饰器深度使用教程

一、基础概念与核心原理 1. 装饰器本质 property 是 Python 内置的属性管理装饰器&#xff0c;它将类方法转换为类属性访问接口。其核心价值在于&#xff1a; ​封装性&#xff1a;隐藏属性操作的具体实现​可维护性&#xff1a;在不改变外部接口的前提下修改内部逻辑​安全…...

#VCS# 关于 +incdir+xxx 编译选项的注意点

前段时间,工作中遇到百思不得其解的坑。 按照以往的理解,没有找到任何可能问题点。今天总结下来。 学习目标: +incdir+ 是 VCS 编译器中用于指定 包含文件(include files) 搜索路径的重要选项,主要用于指定 `include 指令的搜索目录。 一 基本功能 作用:添加 Verilog/S…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例7,TableView16_07 列拖拽排序示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例7,TableView16_07 列…...

JAVA学习-练习试用Java实现“实现一个Hadoop程序,对大数据集中的文本数据进行自然语言处理和关键词筛选”

问题&#xff1a; 使用java语言&#xff0c;实现一个Hadoop程序&#xff0c;对大数据集中的文本数据进行自然语言处理和关键词筛选。 解答思路&#xff1a; 使用Java语言和Hadoop实现自然语言处理和关键词筛选&#xff0c;你需要创建一个MapReduce程序。以下是一个简单的示例&…...

使用idea开发spark程序

新建scala 项目 创建lib目录 将spark jars/ 路径下所有jar 复制到 lib目录 添加依赖 创建scala 程序 package sparkimport org.apache.spark.{SparkConf, SparkContext}object WordCount {def main(args: Array[String]): Unit {val conf new SparkConf().setAppName(&q…...

看懂roslunch输出

自编了一个demo 第一步&#xff1a;创建功能包 cd ~/catkin_ws/src catkin_create_pkg param_demo roscpp第二步&#xff1a;写 main.cpp 创建文件&#xff1a;param_demo/src/param_node.cpp #include <ros/ros.h> #include <string>int main(int argc, char*…...