快速入门Web开发(上) 黑马程序员JavaWeb开发教程

news2025/1/11 21:50:45

快速入门Web开发(上)

  • 本文档是黑马程序员的 黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)_哔哩哔哩_bilibili
  • 上这篇没有写什么很深的个人见解 但下篇有

开发Web网站的方式

前后端分离开发

image-20230812191840410

image-20230812191856662

前端开发内容

ajax

什么是ajax

  • ajax即 异步JavaScript和XML(异步交互技术(异步通信技术)),可以在不更新所有网页的情况下,更新部分网页。

image-20230812191913114

同步与异步

image-20230812191928200

  • 一个网页还没加载出来时,导航栏下面是空白,这个时候点击空白处没有任何反应,这就是同步技术

操作ajax

image-20230812191957005

axios

image-20230812192009493image-20230812192031043

使用方法一

image-20230812192104251

使用方法2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/axios.js"></script>
    <script src="js/vue.js"></script>
</head>

<body>
    <div id="app">
        <button @click="search">查询新闻信息</button>
    </div>
    <script>
        new Vue({
            el: "#app",
            methods: {
                search() {
                    axios.get("http://localhost:3000/posts")
                        .then(res => {//通过回调函数(参数函数)then来处理请求成功
                            console.log(res.data);
                        })
                }
            }
        });
    </script>
</body>

</html>

接口文档

为什么要有接口文档?

image-20230812193024188

  • 通过一份相同的东西,比如指定年龄为int型数据,把这个指定成为接口文档。前端和后端分别按照文档来开发

接口文档管理工具YApi

image-20230812193337583

  • mock服务指生成数据来供使用

前端工程化

image-20230812200053992

image-20230812200248009

安装nodejs与vue/cli

常见的vue指令

image-20230727170400482

image-20230727171508697

使用v-bind

image-20230727170733420

  • 这样a标签所链接的东西就是随着vue对象变化而变化了

image-20230727171602303

  • 通过更改v-on后面的click和” “中的内容,可以实现不同的事件触发不同的方法
  • 方法要写在methods区域
  • 可以使用@来简写
v-show与v-if

image-20230727195844032

  • 通过v-if实现,只会出现符合条件的元素

  • image-20230727202147728

  • 而通过v-show则将所有元素加载出来,但只显示符合条件的元素

v-for

image-20230731095858176

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="vue.js"></script>
<body> 
    <div id="app">
        <div v-for="a in arr">{{arr}}</div>
    </div>
</body>

<script>
    new Vue({
        el: "#app",
        data: {
            arr: ['a', 'b', 'c']
        }
    })
</script>

</html>

image-20230731103204033

  • 以上代码输出这个,代表了每次遍历都输出一遍arr的内容
  • {{}}这个插值对只输出相应内容,而a in arr做到了遍历
  • in是必不可少的
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="vue.js"></script>
<body> 
    <div id="app">
        <div v-for="a in arr">{{a}}</div>//改动了这里
    </div>
</body>

<script>
    new Vue({
        el: "#app",
        data: {
            arr: ['a', 'b', 'c']
        }
    })
</script>

</html>

image-20230731103432688

  • 证明a取到了相应内容,而插值对也做出了相应输出
  • v-for 的索引默认从零开始
  • 插值表达式中可以进行算数运算
注意

image-20230731164627162

  • 使用集合存储数据时,记得搞清楚具体的名字

Vue的生命周期

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CJW%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20230731165733367.png&pos_id=img-W3JlGnPN-1713410731750)

image-20230731165822363

  1. 创建阶段(Creation Phase):
    • beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。
    • created:在实例创建完成后被调用。在这个阶段,实例已经完成数据观测、属性和方法的运算,但是尚未挂载到DOM上。
  2. 挂载阶段(Mounting Phase):
    • beforeMount:在实例挂载到DOM之前被调用。
    • mounted:在实例挂载到DOM后被调用。在这个阶段,实例已经完成了挂载,可以访问到DOM元素。(提交表单)
  3. 更新阶段(Updating Phase):
    • beforeUpdate:在响应式数据更新之前被调用,即数据发生改变、重新渲染之前。
    • updated:在数据更新完成后被调用。在这个阶段,DOM已经完成更新。
  4. 销毁阶段(Destroying Phase):
    • beforeDestroy:在实例销毁之前被调用。在这个阶段,实例仍然完全可用。
    • destroyed:在实例销毁之后被调用。在这个阶段,实例的所有指令和事件监听器都已被解除,所有子实例也被销毁。

Vue项目

image-20230812202215660

  • 需要创建一个文件夹,在文件夹中打开命令行输入vue ui

image-20230812202521282

  • 将包管理器改为对应

image-20230812202901114

image-20230812202916839

启动
  • 默认启动App.vue

image-20230812203021188

npm run serve

image-20230812204355215

访问http://localhost:8080/ 该默认网址会出现该页面

image-20230812204419906

即以上页面

修改服务端口号

image-20230812204813002

image-20230812205304981

  • 使用import导入,export组成一个模块
  • 等价于下面
  • vs6中,属性与名相同可以只写一半

image-20230812205706532

导出export
  • 其中,export default是导出语法
// utils.js
export default function add(a, b) {
  return a + b;
}

// main.js
import add from './utils.js';

console.log(add(2, 3)); // 输出 5

  • export default 没有指定名称是因为它导出的是一个对象字面量(即一个没有具体名称的对象)。当使用 export default 导出时,可以直接将对象字面量作为默认导出的内容,而不需要为它指定一个特定的名称。

    在这种情况下,代码中的 export default 导出的是一个包含组件选项的对象,并且没有为这个对象指定一个名称。这样做的好处是,其他模块在使用 import 关键字引入这个默认导出时,可以为它指定任意的名称,使其更具可读性和语义化。

    不指定名称的另一个原因是,通过将对象字面量作为默认导出,可以更方便地在其他模块中进行引用和使用。通过 import 关键字,可以为默认导出指定任意的名称,使代码更加灵活和易于维护。

导入export

如果要导入一个没有名称的 export,可以使用 import 语句,但是可以省略导入的变量名。

假设你有一个名为 myModule.js 的模块,并且在该模块中使用 export 导出了一个值,而没有为该导出指定名称。以下是导入这个没有名称的 export 的示例:

import './myModule.js';

在上述示例中,使用 import 语句导入了 myModule.js 模块,但并没有为导入的值指定变量名。这样做是为了执行 myModule.js 中的副作用,例如在模块中定义的全局变量、执行代码等。

需要注意的是,导入没有名称的 export 时,你不能直接使用导入的值,因为没有为其指定变量名。但是,它可以用作执行副作用的手段。例如,当导入的模块包含在浏览器环境中注册全局变量的代码时,可以使用这种方式导入模块,而不需要使用导入的值。

如果你需要使用导入的值,可以使用 import 语句为其指定一个变量名:

import myValue from './myModule.js';

console.log(myValue); // 使用导入的值

Vue路由

image-20230813185734866

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image-20230813185920488

Element

  • https://element.eleme.cn/#/zh-CN

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传左原生 右为Element

image-20230812211041381

image-20230812211132175

npm install element-ui@2.15.3

使用

1、在views中建element文件夹来存放

image-20230813092138060

2、搭出vue文件所有内容

  • 以下div中内容需要去找相应内容
  • https://element.eleme.cn/#/zh-CN/component/layout
<template>
    <div>
        <!--button  样式-->>
        <el-row>
      <el-button>默认按钮</el-button>
      <el-button type="primary">主要按钮</el-button>
      <el-button type="success">成功按钮</el-button>
      <el-button type="info">信息按钮</el-button>
      <el-button type="warning">警告按钮</el-button>
      <el-button type="danger">危险按钮</el-button>
    </el-row>
    </div>
</template>

<script>
export default {
    
}
</script>

<style>

</style>

3、应用

<template>
  <div>
    <!-- <h1> {{ message }}</h1> -->
   <element-view></element-view>//
  </div>
</template>

<script>
import ElementView from './views/element/ElementView.vue'
export default {
  components: { ElementView },
  data() {
    return {
      message: "Hello vue"
    }
  },
  methods: {

  }
}
</script>
<style></style>
 
  • 想要添加组件方法,去官网复制后添加到以下位置

image-20230813094219645

  • 多看官网就能学会
 <!-- 自定义对话框二 -->
    <el-button type="text" @click="dialogFVisible = true">打开嵌套表格的 Dialog</el-button>
    <el-dialog title="收货地址" :visible.sync="dialogFVisible">
    </el-dialog>
//该对话框根据@click来决定。通过dialog来决定对话框中有无内容
 alert(JSON.stringify(this.form))
//通过JSON将对象转换成字符串

插槽

image-20230813185302787

路由

  • 使用路由可以完成切换工能
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/EmpView1',//在浏览器导航栏后面输入什么
    name: 'home',//该路由的名字
    component: () => import('../views/tilas/EmpView1.vue')//访问的路径
  },
  {
    path: '/EmpView',
    name: 'home1',
    component: () => import('../views/tilas/EmpView.vue')//访问的路径
  },
]

const router = new VueRouter({
  routes
})

export default router

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',//默认的路径
    name: 'home1',
    component: () => import('../views/tilas/EmpView.vue')//访问的路径
  },
  {
    path: '/EmpView1',//在浏览器导航栏后面输入什么
    name: 'home',//该路由的名字
    component: () => import('../views/tilas/EmpView1.vue')//访问的路径
  },
  {
    path: '/EmpView',
    name: 'home1',
    component: () => import('../views/tilas/EmpView.vue')//访问的路径
  },
]

const router = new VueRouter({
  routes
})

export default router

// 以上功能都完成后,使用routeview标签来实现
<template>
  <div>
    <!-- <h1> {{ message }}</h1> -->
    <!-- <element-view></element-view> -->
    <!-- <emp-view></emp-view> -->
    <router-view></router-view>
  </div>
</template>

<script>
// import EmpView from './views/tilas/EmpView.vue'
// import ElementView from './views/element/ElementView.vue'
export default {
  // components: { EmpView },
  // components: { ElementView },
  data() {
    return {
      message: "Hello vue"
    }
  }
}
</script>
<style></style>
 
  • 在Vue.js中,<router-view>是一个特殊的组件,用于渲染匹配到的路由组件。当你使用<router-view>标签时,它会根据当前的路由路径匹配到对应的组件,并将其渲染到该位置。

    在你提供的代码中,你创建了一个Vue Router实例,并定义了一些路由规则。每个路由规则都指定了一个路径和对应的组件。当访问特定的路径时,Vue Router会根据路由规则找到对应的组件,并将其渲染到<router-view>标签所在的位置。

项目的打包与部署

  • 打包,命令行/终端输入
    npm run build

  • 部署
    进入以下网址下载nginx
    nginx.org

  • 将打包好的文件夹 dist 放到nginx静态资源文件夹目录,然后双击exe来执行,该服务默认占用80端口

    image-20230814131008295

  • 通过任务管理器可以查看nginx进程是否启动

  • 没有启动则打开日志文件查看原因

  • 使用

    netstat -ano | findStr 80

    查看占用80端口的服务(| 叫管道符)

  • image-20230814132457192

  • 可以看到占用80端口的是 PID为 12492

  • 若进程被占用,可以进入以下目录进入文件更改默认端口号

    D:\nginx-1.24.0\conf\nginx.conf

  • server {
    listen 80;
    server_name localhost;

  • 以上为第三十六行

  • 端口不占用后,可以在浏览器输入 localhost:端口号来访问到部署的工程

对应的组件。当访问特定的路径时,Vue Router会根据路由规则找到对应的组件,并将其渲染到<router-view>标签所在的位置。

项目的打包与部署

  • 打包,命令行/终端输入
    npm run build

  • 部署
    进入以下网址下载nginx
    nginx.org

  • 将打包好的文件夹 dist 放到nginx静态资源文件夹目录,然后双击exe来执行,该服务默认占用80端口

    [外链图片转存中…(img-5JThRs2b-1713410731760)]

  • 通过任务管理器可以查看nginx进程是否启动

  • 没有启动则打开日志文件查看原因

  • 使用

    netstat -ano | findStr 80

    查看占用80端口的服务(| 叫管道符)

  • [外链图片转存中…(img-g4wvvzJb-1713410731761)]

  • 可以看到占用80端口的是 PID为 12492

  • 若进程被占用,可以进入以下目录进入文件更改默认端口号

    D:\nginx-1.24.0\conf\nginx.conf

  • server {
    listen 80;
    server_name localhost;

  • 以上为第三十六行

  • 端口不占用后,可以在浏览器输入 localhost:端口号来访问到部署的工程

  • localhost:80

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

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

相关文章

02 MySQL --DQL专题--条件查询、函数、分组查询

一些盲点. 数据库中仅有月薪字段&#xff08;month_salary&#xff09;&#xff0c;要求查询所有员工的年薪&#xff0c;并以年薪(year_salary)输出&#xff1a; 分析&#xff1a; 查询操作中&#xff0c;字段可以参与数学运算as 起别名&#xff0c;但实际上可以省略 #以下…

Stronghold Village

有了近2000个预制件和大量资产,您可以用基本的或先进的模块化预制件建造您的设防城镇或梦幻村庄,其中有许多定制选项和大量道具和物品 【资产描述】 你准备好建造你的史诗般的奇幻设防小镇了吗?有了这个庞大的资产库,您将能够创建村庄、城市、据点、乡村建筑、大教堂、城堡…

Tricentis测试生成式人工智能系统和红队:入门指南

Tricentis测试生成式人工智能系统和红队:入门指南 测试人工智能并确保其责任、安全和保障的话题从未如此紧迫。自 2021 年以来,人工智能滥用的争议和事件增加了26 倍,凸显了日益增长的担忧。用户很快就会发现,人工智能工具并非万无一失。他们可能会表现出过度自信,并且缺…

JavaWeb--04YApi,Vue-cli脚手架Node.js环境搭建,创建第一个Vue项目

04 1 Yapi2 Vue-cli脚手架Node.js环境搭建配置npm的全局安装路径 3 创建项目&#xff08;这个看下一篇文章吧&#xff09; 1 Yapi 前后端分离中的重要枢纽"接口文档",以下一款为Yapi的接口文档 介绍&#xff1a;YApi 是高效、易用、功能强大的 api 管理平台&#…

使用vite从头搭建一个vue3项目(四)使用axios封装request.js文件,并使用proxy解决跨域问题

目录 一、创建request.js文件二、创建axios实例三、创建请求、响应拦截器四、使用 request.js&#xff0c;测试接口&#xff1a;https://api.uomg.com/api/rand.qinghua1、调取接口代码书写2、注意&#xff08;跨域问题&#xff09; axios 的二次封装有三个要点&#xff1a; 创…

解决程序化刷新EXCEL提示更新外部链接的弹窗问题

解决方法 【信任中心】-> 【消息栏】->勾选如下策略提示 2. 【信任中心】->【外部内容】->启用下面的三项链接 3. 【信任中心】->【宏设置】->启用所有宏

【Python小游戏】植物大战僵尸的实现与源码分享

文章目录 Python版植物大战僵尸环境要求方法源码分享初始化页面&#xff08;部分&#xff09;地图搭建&#xff08;部分&#xff09;定义植物类 &#xff08;部分&#xff09;定义僵尸类&#xff08;部分&#xff09;游戏运行入口 游戏源码获取 Python版植物大战僵尸 已有的植…

MySQL-笔记-06.数据高级查询

目录 6.1 连接查询 6.1.1 交叉连接&#xff08;cross join&#xff09; 6.1.2 内连接&#xff08;inner join&#xff09; 6.1.3 外连接&#xff08;outer join&#xff09; 6.1.3.1 左外连接&#xff08;left [outer] join&#xff09; 6.1.3.2 右外连接&#xff08;rig…

Meta因露骨AI图片陷入困境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Postgresql源码(126)TupleStore使用场景与原理分析

相关 《Postgresql源码&#xff08;125&#xff09;游标恢复执行的原理分析》 《Postgresql游标使用介绍&#xff08;cursor&#xff09;》 总结 开源PG中使用tuple store来缓存tuple集&#xff0c;默认使用work_mem空间存放&#xff0c;超过可以落盘。在PL的returns setof场景…

回文链表leecode

回文链表 偶数情况奇数情况 回文链表leecode 偶数情况 public boolean isPalindrome(ListNode head) {if (head null) {return true;}ListNode fast head;ListNode slow head;while (fast ! null && fast.next ! null) {fast fast.next.next;slow slow.next;}//反…

Day43:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果…

Excel文件解析(Java)

一、概述 在应用程序的开发过程中&#xff0c;经常需要使用 Excel文件来进行数据的导入或导出。所以&#xff0c;在通过Java语言实现此类需求的时候&#xff0c;往往会面临着Excel文件的解析(导入&#xff09;或生成&#xff08;导出)。 在Java技术生态圈中&#xff0c…

Java实现RSA加密示例代码

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 RSA加密是一种非对…

如何配置Postgres的自动扩展功能以应对数据增长

文章目录 解决方案1. 表空间管理2. 分区表3. 自动扩展配置4. 监控和告警5. 使用外部工具和服务 示例代码示例1&#xff1a;创建表空间示例2&#xff1a;创建分区表示例3&#xff1a;调整配置参数示例4&#xff1a;使用监控和告警工具 总结 在PostgreSQL中&#xff0c;随着数据的…

QT-编译报库错误(LF/CRLF)

QT-安装后环境问题记录 版本和环境问题 版本和环境 QT5.15.2 Windows10 QT Creator 问题 在QT夸端开发的项目中 &#xff0c;使用QTCreator打开项目pro文件&#xff0c;编译报出很多系统库 及本地文件中的一些问题&#xff0c;具体如图&#xff1a; 后续&#xff0c;我以为…

宠物店小程序如何搭建制作?宠物店小程序核心功能有哪些?

随着宠物经济的兴起&#xff0c;宠物店的线上服务需求日益增长。微信小程序作为一种便捷的线上服务平台&#xff0c;为宠物店提供了一个与爱宠人士建立联系的新渠道。面对市场上众多的小程序开发选项&#xff0c;宠物店应该如何选择或制作一款适合自己的小程序呢&#xff1f;本…

Java高阶私房菜:快速学会异步编程CompletableFuture

为了使主程代码不受阻塞之苦&#xff0c;一般使用异步编程&#xff0c;而异步编程架构在JDK1.5便已有了雏形&#xff0c;主要通过Future和Callable实现&#xff0c;但其操作方法十分繁琐&#xff0c;想要异步获取结果,通常要以轮询的方式去获取结果&#xff0c;具体如下&#x…

登录github突然出现Two-factor authentication怎么办?

起因 今天想登录github下载项目&#xff0c;输入用户名密码认证之后竟然弹出来了Two-factor authentication&#xff0c;像下图&#xff0c;我只记得之前好像开启过这玩意&#xff0c;但是不知道哪里找这个code了。 解决 在你的iphone里面搜索密码。然后找到github网页&…

程序员能做什么副业?增收致富就靠它们了

作为一个程序员&#xff0c;大家都习惯了朝九晚六&#xff0c;时不时加班的生活。虽然工资听起来比其他行业高一些&#xff0c;但是&#xff0c;都是靠命拼出来的。如何摆脱这种枯燥乏味且前途未卜的生活&#xff0c;应该是很多程序员都在考虑的事情。 而作为一个做了十几年的…