- 使用yarn创建Nuxt项目报错,改用npm命令
rock——you
npmchrome前端
yarndlxnuxi@latestinitwindowshost.nuxtyarnrunv1.22.22errorCouldn'tfindapackage.jsonfilein"/Users/baoge/WebstormProjects/windowshost.nuxt"infoVisithttps://yarnpkg.com/en/docs/cli/runfordocumentationabo
- 大白话React第一章基础入门
IT木昜
大白话reactnodejsReact全家桶react.js前端前端框架
大白话React第一章基础入门1.环境准备咱要学React开发,就好比要开一家蛋糕店,首先得把开店要用的工具和场地准备好。安装Node.js和npm:Node.js就像是蛋糕店的烤箱,有了它,咱们写的代码才能像蛋糕一样“烤”出结果,能在电脑上跑起来。npm呢,就像是一个超级大的原料仓库管理员,它能帮咱们快速找到并引进各种做蛋糕需要的原料(也就是代码库)。你到Node.js的官网(https://n
- #22 使用Vite创建React+Typescript项目
a457636876
Reactreact.jstypescript前端
使用Vite创建一个React和TypeScript项目是一个快速且现代的方法,以充分利用Vite提供的极速开发体验和React的灵活性。这里有一个简单的步骤教程,指导你从零开始创建一个新项目:创建新项目打开你的命令行工具(例如终端、命令提示符或PowerShell),然后运行以下命令以创建一个新的Vite项目:npmcreatevite@latestmy-react-app----templat
- npm install 卡在“sill idealTree buildDeps“
爱吃南瓜的北瓜
npm前端node.js
问题当你执行npminstall时,你可能会遇到一个问题:命令卡在"sillidealTreebuildDeps"这一步,没有任何反应原因这个问题的根源在于淘宝镜像源的域名过期,而实际上需要绑定新的镜像源。解决方案更换新的淘宝镜像npmconfigsetregistryhttps://registry.npmmirror.com
- 【性能优化】Webpack打包优化
田本初
性能优化性能优化webpack前端
查看依赖分析依赖树,找出哪些模块占用了较多的资源。webpack-bundle-analyzernpminstall--save-devwebpack-bundle-analyzerwebpack.config.js中添加插件配置:const{BundleAnalyzerPlugin}=require('webpack-bundle-analyzer');module.exports={//其他配
- 分析React和Vue的区别与优势
Neo Evolution
前端框架
React和Vue是目前两种非常流行的前端框架/库,它们各自有独特的设计理念和特点。下面是它们在各个方面的比较,包括架构、学习曲线、性能等。1.架构与理念React:开发类型:React是一个UI库,专注于视图层的构建。它本身没有集成像Vue或Angular那样的完整框架,所以需要与其他库或工具结合使用(如ReactRouter、Redux、ContextAPI等)。设计理念:React强调组件化
- error Command failed with exit code 1
泡泡Java
前端html后端asp.netjavascript
从传统JQuery转变到Node.js最烦的就是一接手新项目就得npminstall,浪费大量时间不说还总会报莫明其妙的错误,这次又遇到了一个errorCommandfailedwithexitcode1。因为它的相关处报的问题可能和npm本身有关,我就用yarninstall规避,并且也确实能yarnstart跑通项目。但就在我想把它打包成dist的时候,yarnbuild就又抛出了这么一个问题
- 2025asp.net全栈技术开发学习路线图
mabanbang
asp.netcore开发asp.net全栈技术
2025年技术亮点:Blazor已全面支持WebAssembly2.0标准.NET8+版本原生集成AI模型部署能力AzureKubernetes服务实现智能自动扩缩容EFCore新增向量数据库支持特性ASP.NET全栈开发关键技术说明(2025年视角)以下技术分类基于现代企业级应用开发需求:前端生态Blazor是微软基于WebAssembly的前端框架,允许开发者直接使用C#替代Ja
- 第一章:认识Tailwind CSS - 第三节 - Tailwind CSS 开发环境搭建和工具链配置
1.必备环境准备Node.js(v14.0.0或更高版本)npm或yarn包管理器代码编辑器(推荐VSCode)2.项目初始化方式方式一:在新项目中使用#创建项目目录mkdirmy-tailwind-projectcdmy-tailwind-project#初始化package.jsonnpminit-y#安装必要依赖npminstall-Dtailwindcsspostcssautoprefix
- webstorm 创建vue3 vite 项目
Lan.W
webstorm前端javascript
打开Webstorm,创建一个空项目直接在当前项目执行创建vue3项目指令,打开主页terminal回车后输入项目名字全部小写字母字打开创建项目项目插件安装npminstall运行:npmrundev
- asp.net 及 asp.net core 下 MD5加密
山歌寥哉
C#
asp.net及asp.netcore下MD5加密建议使用MD5Hash及其重载这两个方法,字符串加密时效率很高建议使用MD5Hash及其重载这两个方法,字符串加密时效率很高usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.Text;nam
- 关于Vue3中使用Echarts,详细指南、常见问题及最佳解决方案
繁若华尘
vueechartsvue.js前端
一、基础集成步骤1.安装依赖npminstallechartsvue-echarts#推荐使用官方维护的vue-echarts组件库#或npminstallecharts--save2.基础使用(CompositionAPI)import{ref,onMounted,onBeforeUnmount,watch}from'vue';import*asechartsfrom'echarts';cons
- 前端面试题】—53道常见NodeJS基础面试题(附答案)
秋の本名
前端node.js前端
Node.js是一个不错的选择,它是基于JavaScript语法的一套服务器端(后端)语言。想要在企业中做得更好,开发者需要更多地了解它,并掌握它的有关用法。1、你了解Node.js吗?Node.js是一个基于Chromev8引擎的服务器端JavaScript运行环境;Node.js是一个事件驱动、非阻塞式I/O的模型,轻量而又高效;Node.js的包管理器npm是全球最大的开源库生态系统。2、N
- Mac-搭建前端开发环境
魔术师ID
前端方法的总结及记录归纳macosnpmnode.js
标题基于mac下前端开发基本环境搭建VSCode+git+node.js+npm+webpack+vue-cli4+yarn如何从零开始搭建前端开发环境MAC环境首先终端输入sudospctl--master-disable命令来开启任何来源。如果不开启这个会导致很多软件安装不了。安装node环境和配置cnpm和tnpm方便安装依赖。因为原版npm因网络问题可能会导致各种报错。mac在安装node
- Spring Boot + Vue前后端分离开发入门教程
辣条yyds
Javaspringbootvue.js后端
前言在当前互联网开发领域,前后端分离已成为主流趋势。SpringBoot作为后端开发利器,搭配前端Vue框架,能够实现高效、便捷的Web应用开发。本文将手把手教你如何使用SpringBoot+Vue框架进行前后端分离开发。一、环境准备安装Java下载并安装JDK1.8或更高版本。配置环境变量。安装Node.js下载并安装Node.js12.0或更高版本。配置npm全局变量。安装IDE推荐使用Int
- 在Angular项目使用socket.io实现通信
陈仙生
angularsockettypescriptangularnode.js
step1、为项目安装依赖在终端输入以下命令为我们的angular项目安装express、socket.io、socket.io-clientnpminstallexpresssocket.iosocket.io-client本人安装的各版本信息如下:"express":"^4.17.1","socket.io":"^3.0.4","socket.io-client":"^3.0.4",step2
- Angular使用自带拖动组件-实现拖动效果
No Big Deal
angular入坑angulartypescript
前言 客户需求:某块内容能拖动改变顺序。网上也找过第三方组件,但是没用成功,可能是姿势不对于是就发现了angular自带的拖动组件。注:本文记录简单的使用,并没有太多的理解。更多用法,看官网吧===>angular官网拖动结果演示(不知道为啥,录制的gif上传后总是变成png,无奈只能重新截个图了)目录一、xxx.module.ts中相关操作二、xxx.components.ts中相关操作三、
- angular新版本未生成app.module.ts
张某人的胡思乱想
angular前端angular.jsjavascript前端
https://angular.cn/tutorial/tour-of-heroeshttps://angular.cn/tutorial/tour-of-heroes/toh-pt0ngnewangular-tour-of-heroescdangular-tour-of-heroesngserve--open查看目录,未生成app.module.ts网上搜了一下https://github.co
- Angular使用animation动画
勘察加熊人
typescripttypescript
Angular使用animation动画step1:D:\vue\untitled2902\src\app\app.module.tsimport{NgModule}from'@angular/core';import{BrowserModule}from'@angular/platform-browser';import{AppComponent}from'./app.component';im
- 自存放忘 angular 动态加载子节点
2301_78916954
angular.js前端javascript
html{{treeControl.isExpanded(node)?"expand_more":"chevron_right"}}tsimport{Component,OnInit,Injectable}from'@angular/core';import{CollectionViewer,SelectionChange,DataSource,}from'@angular/cdk/collect
- angular中使用animation.css实现翻转展示卡片正反两面效果
2301_78916954
angular.jscss前端
html正面背面component.tsisFlipped:boolean=false;flip(){this.isFlipped=!this.isFlipped;}安装插件https://animate.style/在angular.json中使用"styles":["node_modules/animate.css/animate.min.css","src/styles.scss",],以上
- webpack5项目-编译打包常用资源模块loader配置
yaoyongcsdn
前端webpack
前端-webpack5汇总目录一.资源模块二.编译打包配置1.编译打包图片文件2.编译打包字体文件3.编译打包css文件4.编译打包less文件5.打包sass文件6.编译打包js文件排除不应参与转码的库7.打包vue文件三.总结1.npm命令2.webpack.config.js文件3.package.json文件4.babel.config.json文件一.资源模块资源模块(assetmodu
- 常用 Webpack Plugin 汇总
懒羊羊我小弟
前端工程化webpack前端node.jsnpmyarn
一、HtmlWebpackPlugin⭐⭐⭐⭐⭐作用自动生成HTML文件,并将打包后的JavaScript、CSS等资源自动注入到生成的HTML文件中。当打包文件名包含哈希值时,能避免手动引入资源的繁琐。使用场景单页或多页应用开发中,只要需生成HTML并引入打包资源即可使用。语法介绍npminstallhtml-webpack-plugin--save-devconstHtmlWebpackPlu
- Vite 学习笔记
a鲸
前端
优势vite是vue团队官方出品,vue-cli会在下面两个版本中将vite作为预设构建工具未来适用vue-cli构建vue项目时要写的vue.config.js不再是webpack的配置而是vite的配置(目前只基于浏览器项目)vite也支持构建react项目,也支持构建angular项目,svelte项目也支持构建内容1.什么是构建工具构建工具是运行在服务器的企业级项目里都可能会具备哪些功能t
- Vite构建Typescript简易原生前端项目
Alex程
前端typescript
目录一、Vite简介什么是Vite?核心特点二、环境准备安装Node.js和npm安装Vite,创建项目三、项目结构和配置项目结构tsconfig.json配置文件package.json配置文件vite.config.ts配置文件创建文件常用配置四、编写代码1.HTML基本的HTML格式常用标签常用属性HTML5高级用法示例2.CSS基础概念选择器布局模型示例3.TypeScript详细内容示例
- Vue CLI项目创建指南:选择预设与包管理器(PNPM vs NPM)
瑞金彭于晏
vue.jsnpm前端
在VueCLIv5.0.8版本中,当你创建新项目时,会面临选择预设(preset)和包管理器(packagemanager)的决策。针对你提到的选项,以下是一些建议来帮助你做出选择:选择预设(Preset)预设决定了你的项目将包含哪些基本的配置和依赖。Default([Vue2]babel,eslint):这是一个默认的预设,它基于Vue2,并包含了Babel(用于将ES6+代码转换为向后兼容的J
- npm run serve 启动vue项目时 报错 throw er Unhandled “error” event
菜鸟小营地
Vuenodevue
原由:npmrunserve启动vue项目时,报错thrower;//Unhandled‘error’event;纳闷了昨天下午下班时都是没有问题的,除了问题就解决呗!解决方案:产生这一问题的原因有两个:1.本机端口和设置的ip地址不一致2.可能是端口被占用第一种情况的详细解决流程:我的情况是第一种,更换vue.config.js中的host的值,至此问题完美解决,项目可以重新启动了。第二种情况的
- npm启动vue报错 Error: listen EACCES: permission denied 0.0.0.0:8085
arvin_baichuan
vuevue.jsnpmjavascript
报错日志:D:\****\***>npmrundev>vue-ytd-cli-project@0.0.1dev***>node--max_old_space_size=4096build/dev-server.js。。。。。。>startingdevserver...events.js:292thrower;//Unhandled'error'event^Error:listenEACCES:pe
- 【前端VUE】npm i 出现版本错误等报错 简单直接解决命令
华如锦
2023-FUSE-时代开发本地环境配置前端vue.jsnpm
前端vuenpmi安装时出现报错原因在新版本的npm中,默认情况下,npminstall遇到冲突的peerDependencies时将失败。解决办法使用--force或--legacy-peer-deps可解决这种情况。--force会无视冲突,并强制获取远端npm库资源,当有资源冲突时覆盖掉原先的版本。--legacy-peer-deps:安装时忽略所有peerDependencies,忽视依赖
- npm install --force or --legacy-peer-deps
程序员大侠
npm前端node.js
这个命令中的--force和--legacy-peer-deps是用于控制包管理器(如npm或yarn)在安装依赖时的行为的选项。--force--force选项通常用于强制包管理器执行某些操作,即使这可能会导致一些不期望的副作用。在安装依赖时,使用--force可能会导致以下行为:覆盖已安装的包:如果某个包已经安装,但版本不匹配,使用--force会强制重新安装指定版本的包。忽略缓存:包管理器通
- java工厂模式
3213213333332132
java抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
- nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
- java线程和线程池的使用
dyy_gusi
ThreadPoolthreadRunnabletimer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
- Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
- Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
- 敲代码的一点想法
永夜-极光
java随笔感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
- jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
- Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
- png在Ie6下透明度处理方法
antonyup_2006
css浏览器FirebugIE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
- 表查询常用命令高级查询方法(二)
百合不是茶
oracle分页查询分组查询联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
- uploadify3.1版本参数使用详解
bijian1013
JavaScriptuploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
- 精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle数据库plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
- 【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
- Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
- angular.identity
boyitech
AngularJSAngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
- java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
- Java 日期 周 年
Chen.H
javaC++cC#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
- [高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
- 分层查询(Hierarchical Queries)
daizj
oracle递归查询层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
- 数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
- C语言学习二进制的表示示例
dcj3sjt126com
cbasic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
- NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
- MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
- Ehcache(01)——简介、基本操作
234390216
cacheehcache简介CacheManagercrud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
- 最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
- 提升网站转化率的四步优化方案
php教程分享
数据结构PHP数据挖掘Google活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
- web开发里什么是HTML5的WebSocket?
naruto1990
Webhtml5浏览器socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
- Socket初步编程——简单实现群聊
Everyday都不同
socket网络编程初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
- 面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
- MVC设计模式的总结
xp9802
设计模式mvc框架IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户