赞
踩
概述:通过JS代码来控制请求的收发。
同步交互:
单线程作业,客户端发送请求前服务端需要等待,服务端处理请求时客户端等待。
异步交互:
多线程作业,客户端可以发送复数的请求等待服务端响应。服务端响应请求后客户端再一一跳转请求。
前端代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> function getMessage(){ var request = new XMLHttpRequest() request.onreadystatechange=function (){ if(request.readyState == 4 && request.status == 200){ console.log(request.responseText)// 获取并打印响应信息 var inputEle = document.getElementById("message") inputEle.value = request.response window.location.href="https://baidu.com" } } request.open("GET","/hello?username=zhangsan") request.send() } </script> </head> <body> <button onclick="getMessage()">点我</button> <input type="text" id="message"/> </body> </html>
后端代码
package com.itchen.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); resp.getWriter().write("hello:" + username); } }
前后端使用不同的框架十分不好管理!
前端文件管理:使用nodejs、npm、vite
后端文件管理:使用maven
引入前后端分离
前端-前端工程化:将前端独立,形成一个独立的工程
分析前后端分离项目
var i = 10
var i = ''
let cn = 123
// let cn = 'dw' // 报错
{
var i = 10
let j = 10
}
console.log(i)
// console.log(j) // 报错
console.log(a)
var a = 'd'
// console.log(b) // 报错
let b = "dwadwa"
var ss = 123456
let sss = 121311
console.log(window.ss)
console.log(window.sss)
const teachers = ["章老师","李老师","王老师"]
// teachers = ["","",""] // 报错
teachers.push("陈老师")
let city = '北京'
let str = `<ul->
<li></li>
<li></li>
<li>${city}</li>
<li></li>
<li></li>
</ul->`
// 使用解构表达式取出数组中的元素
let arr = [11,22,33,44]
let = [a,b,c,d,e = 10] = arr
console.log(a,b,c,d,e)
let person = {
name:"zhangsan",
age:10
}
let {name,age} = person
console.log(name,age)
function showArr([a,b,c]){
console.log(a,b,c)
}
showArr(arr)
let fun1 = function(){} // 普通函数声明
let fun2 = ()=>{} // 箭头函数声明
let fun3 = (x)=>{return x+1}
let fun4 = x => {return x+1} // 参数列表中有且只有一个参数,()可以省略不写
let fun5 = x => console.log(x) // 方法体中只有一行代码,{}可以不写
let fun6 = x => x+1 // 方法体中只有一行含return的代码,return必须省略,{}可以不写
// 在箭头函数中使用this相当于在上一作用域中使用this
let fun1 = (a,b,c,... arr)=>{ console.log(a,b,c,d) console.log(arr) } fun1(1,2,3,4,5,6,7,8) // 输出:1 2 3 4 // 1 2 3 4 5 6 7 8 // spread rest在实参上的使用 let arr = [1,2,3] // let info = ...arr // 报错 let fun2 = (a,b,c)=>{ console.log(a,b,c) } fun2(arr) // 输出:{[1,2,3],undefined,undefined} fun2(...arr) // 输出:{1,2,3}
let a = [1,2,3]
let b = [4,5,6]
let c = [7,8,9]
let d = [...a,...b,...c] // let d = [1,2,3,4,5,6,7,8,9]
console.log(d)
let person1={name:"张三"}
let person2={age:"10"}
let person3={gender:"boy"}
let person4={...person1,...person2,...person3}
console.log(person4)
类及其说明
class Person{ // 公共属性 name age // 私有属性,#n 整体代表一个属性 #n // getter and setter get name(){ console.log("getter") return this.name } set name(name){ console.log("setter") this.name = name } // 实例方法 eat(food){ console.log(`${this.age}岁的${this.name}正在吃${food}`) } // 静态方法 static sum(a,b){ return a + b } // 构造器 constructor(name,age){ this.name = name this.age = age } }
测试
let person = new Person()
let person2 = new Person("小明",21)
person.name = "张三"
person.age = 21
console.log(person)
console.log(person2)
person.eat("蛋糕")
console.log(Person.sum(1,2))
类的继承及其测试
class Student extends Person{
score;
study(){
console.log(`${this.age}岁的${this.name}正在努力学习`)
}
constructor(name,age,score){
super(name,age) // 调用父类的构造器进行赋值
this.score = score
}
}
let stu = new Student("小王",21,60)
stu.study()
浅拷贝
let arr = [1,2,3]
let person = {name:"张三"}
浅拷贝 : 只拷贝变量的引用地址
let arr2 = arr
let person2 = person
arr[0] = 100
console.log(arr2) // [100,2,3]
person.name = "小明"
console.log(person2) // {name:小明}
深拷贝
let arr = [1,2,3]
let person = {name:"张三"}
// 深拷贝 :
let arr2 = [...arr]
// let person2 = {...person}
let person2 = JSON.parse(JSON.stringify(person)) // 将其先转换为字符串,再将字符串解析为一个person对象
arr[0] = 100
console.log(arr2) // [1,2,3]
person.name = "小明"
console.log(person2) // {name:张三}
// module.js文件
export const PI = 3.14
// app.js文件
import * as m1 from "./module.js"
// 最后在html文件中关联js文件
// module.js文件
export{PI,sum,Person}
// app.js文件
import * as m1 from "./module.js"
// module.js文件
export default sum
// app.js文件
import * as m1 from "./module.js"
console.log(m1.default)
// import {default as add} from './module.js'
// console.log(add(10,30))
nodejs的作用。运行js代码。兼容性好:可以运行到windows和linux里。
Nodejs包管理工具。作用主要是:前端框架的下载工具,前端项目的管理工具
配置前端依赖目录以及配置阿里npm镜像源
npm config set registry https://registry.npmmirror.com
npm config get registry
npm config set prefix "D:\GlobalNodeModules"
npm config get prefix
npm init
生成一个json文件,这个json文件相当于在maven中的pom.xml文件
npm insatll vue@2.7.14 # 下载对应版本的vue
npm install *** # 根据输入的内容下载相对应的依赖
npm i # 下载package.json里面所有的依赖
npm uninstall *** # 卸载某个依赖
npm
所有依赖npm ls
npm run *** # *** 处自己修改为脚本中的键名
注意:如果vscode不能使用npm命令,可以用管理员身份打开npm。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。