JavaEE和JavaEE Web Profile,Tomcat和GlassFish

Java:顶级Java应用程序服务器 — Tomcat、Jetty、GlassFish、WildFly 如果你想编写Java web应用程序,首先需要做出一个艰难的决定:选择运行应用程序的Java应用程序服务器。 阅读详情

Web Profile 是JavaEE的一个子集,从Java6开始允许通过profile的形式定义规范子集。完整的JavaEE还包含EJB等内容,Web Profile中没有

就是说第一个版本(JavaEE6)你可以用来开发部署并运行符合JavaEE规范的全部功能,第二个版本(JavaEE6WebProfile)有些功能不行,例如JMS。

-----------------------------------------------------------------

J2EE: java官方为企业级应用设计的一些库和框架。

Java Web: J2EE里最成功的部分,就是用于做网站。其他部分并算不成功。

(以下展开说明)

J2EE,即JAVA官方为企业设计的一些应用框架,大概包含JDBC、JNDI、EJBs、RMI、JSP、Java Servlets、 XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF等技术或框架。

其中,仅JDBC, JSP , Servlets技术在网站应用中得到业界的广泛认可; 但其他的技术,恐怕就不算是 什么成功的设计。

-----------------------------------------------------------------
 

Java EE是官方出的一套规范,而Java Web是使用Java进行Web开发的行为。

Web开发中,有些部分我们推荐使用EE的规范,例如Servlet(当然你不使用这套规范,硬要自己用netty,nio甚至bio监听80端口,手动解析HTTP报文也不是不可以);

有些部分我们必须使用EE有关的规范,例如连接数据库(自己手撸数据库驱动并且还无视JDBC规范的牛人我还闻所未闻);

有些部分开源社区的类库做了对官方的兼容,例如@Resource和@Component,@Inject和@Autowired。Spring扫描注解的时候,前一对注解功能类似(采用不同的BeanProcesor注入,并且默认是按类型/名称注入),后一对则完全一致;

有些部分我们嫌弃官方做得不够好,自己实现规范(RMI规定使用序列化接口传输对象,而现在比较流行的远程服务调用框架是自己实现对象传输的编码协议的;JSP是官方的模板语言,但是实际上应用较多的是Thymeleaf freemarker等HTML模板引擎);

有些地方官方发现不够好,反过来使用开源社区流行的设计,但是还是成了小众(EJB 3.0以后的版本和Spring都有IOC和DI的功能);

有些东西应该是消失在了历史长河里(8012年了,新开发的应用还有人用JNDI来定位资源,用XML来传输数据吗?)

官方制定的规范,和开源社区的产物从远古开始纠缠,相互借鉴、依赖、淘汰,即使是2018年,使用Spring Boot开发Web应用,本质上也得注册Servlet作为整个容器的启动器(Spring Web Flux异步编程那一套可以不依赖Servlet API 了,这个比较小众所以先论外)。

到现在,主流的互联网应用开发中使用的EE规范也只有Servlet和JDBC,了解和熟悉它们提供的API就足够了。

------------------------------------------------------------------

Tomcat和GlassFish的区别

两者本质上不是一类型的东西。

Tomcat是Servlet容器,GlassFish是JEE容器。JEE容器必然是包含Servlet容器这一部分功能的。

ps:以前版本的GlassFish,其内部的Servlet容器实现就是直接采用的Tomcat。

当然,JEE容器提供了更多的功能,同时也有方便的管理控制台可以在界面上进行各种配置和应用部署等,比Tomcat的Manager应用要功能丰富的多。

而如果你仅仅是写普通的Java Web,用GlassFish就会感觉重了一些。看场景

glassfish 是全认证的Java EE 服务器。包括EJB等等。

Tomcat 是简化的,基本上只是对于Web应用的功能。

glassfish 在控制页面和管理页面上比Tomcat要强大很多

比tomcat更好用的glassfish应用服务器 比tomcat好用的web容器,可靠速度快 立即下载

相关推荐

WinForm多语言切换实战:5分钟搞定中英文界面(附完整代码)

本文提供了WinForm应用实现中英文界面切换的两种高效实战方案。通过利用内置的本地化机制和资源文件,开发者可以在5分钟内为窗体添加多语言支持,并附有完整代码示例,帮助快速应对软件国际化需求。

weixin_29230773的博客 406

几种常见web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)

1. Tomcat是Apache鼎力支持的Java Web应用服务器,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。- 2. Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器,从而受到企业级开发人员的欢迎,从而弥补了Tomcat只是一个Servlet容器的缺憾。- 3. Resin也仅仅是一个Servlet容器,然而由于它...

顺其自然~专栏 2万+

【无标题】IP804A参考资料和管脚作用图

3.3V内置led控制内置EEPROM接口,用于哑应用ip804a,可集成为4X N端口PSE稳压器内置支持外部设备。多个系统和IC总线用于从每个IP804A收集PD电源状态,以支持全局电源管理。多个ip804a可以构建一个具有成本效益的PHY级PSE系统以支持PD分类和电源管理,而无需主机。基于LLDP(IEEE标准8023AT-2009的一部分),可以实时维护PSE和PD之间的动态电源管理,以提高电源效率。IP804A是一款用于POE(以太网供电)系统的4端口PSE(电源设备)控制器IC。

2301_78055735的博客 1059

Glassfish的安装与使用

前言 Glassfish是一款由Sun公司开发的(现由甲骨文公司赞助)开源的免费的应用服务器,它既是EJB容器也是WEB容器。Glassfish支持最新版的Java EE标准。 Glassfish与Tomcat的区别 Tomcat只是WEB容器,并不支持EJB,而Glassfish既是WEB容器也是EJB容器。 Glassfish的安装 首先去Glassfish的官网https://ja...

climy的技术小站 1万+

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 710

android usb读写,安卓(Android)下如何开发USB NFC读写器app

对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF...

weixin_36433781的博客 823

对比 |Tomcat、Jetty、 GlassFish、WildFly

原创于 【模棱博客】 热门Java应用服务器对比 |Tomcat、Jetty、 GlassFish、WildFly 如果要编写Java Web应用程序,首先需要做的是做出一个困难的决定, 我们该选择哪种服务器来运行Java应用程序呢?这是一个艰难的选择,因为那里有许多优秀的选择,它们之间的差异并不总是显而易见的。 首先回顾下什么是应用程序服务器?一般来说,应用服务器执行Java应用程序。您可...

【模棱博客】 – Java技术博客 5233

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1360

Glassfish V3 Web Profile初接触总结

因为导致麻烦的细节太多了,总结一下,备用了。 版本是Glassfish V3 Web Profile,环境是Windows2003/Windows 7.一上来就发现一个bug,安装之后不能卸载,提示什么null之类的消息,无视,暴力删除。   我做的是连接池+虚拟主机+关闭没用的服务+auto_deploy 按说本来挺简单的,捣鼓捣鼓就ok的事儿,结果折腾了几个晚上。 总结一下: 1....

hugeship2002的专栏 194

手搓UDS Bootloader|全网独家复现0x10诊断会话控制、详解会话跳转规则与S3超时机制、助力ECU在线刷写、固件迭代、车规安全升级落地

在车载UDS诊断(ISO 14229)与Bootloader固件升级架构中,0x10诊断会话控制服务是所有高级诊断、固件刷写功能的前置核心与权限管控入口,属于UDS基础必实现服务。车载ECU通过分级会话模式,隔离常规故障诊断、高级标定、固件重编程等高、低权限操作,从协议层面保障车载电控系统的安全性与稳定性。多数嵌入式开发者开发UDS Bootloader时,仅简单实现会话切换报文应答,未吃透会话强制跳转规则、S3安全超时机制、会话权限绑定、APP在线刷写跳转逻辑。

getusushu的博客 465

Matlab安装硬件支持包、simulink离线安装硬件支持包安装,离线安装ESP32、stm32等安装包,Are you up-to-date on SoftWare Maintenance?

注意:如果提示出现“没有可从此位置安装的兼容支持包后,这个问题,请查看步骤5,是不是没有按照步骤5进行操作.一般情况下出现“没有可从此位置安装的兼容支持包”后,重新安装选择了默认路径就可以成功。如果不是很清楚,直接安装在默认的文件夹下面,即使这个文件夹下没有matlab相关的文件夹,也要这么下载,没有为什么,切记尽量按默认路径安装,更改下载的路径不成功,别怪我没提醒。:下载到哪里非常重要,如果下载的不是默认的路径下,就需要将其中这个的是这个archives文件夹,连同其他文件一并要复制出来,拷贝到。

pvmsmfchcs的博客 1746

四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

为什么80%的码农都做不了架构师?>>> ...

weixin_34414196的博客 183

UWB 多传感器通信的纳秒无线位置和时钟同步方法

利用UWB高精度的特点,实现多节点下的无线时钟同步和定位。通过优化硬件架构,减少不确定延迟的影响,系统可以提供纳秒级时钟同步消息

DT程序员的博客 1329

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java ee web profile_Java EE Web Profile与Java EE完整平台

未来2017年底,Oracle将Java EE的责任交给了Eclipse Foundation。 Java EE 8之后的将来版本将称为Eclipse Enterprise Java(EE4J)。 或Project EE4J。 也许是EE.next。 或Jakarta EE。 最近几个月,品牌一直在变化。作为从Oracle过渡的一部分,Eclipse团队将使用其用于存储代码和进行构建的新基础结构将...

weixin_35598104的博客 460

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java ee web profile_Java EE 6 Platform草案包含了Web Profile

Web Profile定位于现代Web应用的开发者。至于“现代”这个词,我们主要是想强调这样一个事实:自从第一个Servlet规范问世以来,Web应用世界已经有了长足的发展。不可避免的,许多 用于创建即便是简单Web应用的技术也得到了跳跃式发展。实际上,今天很少有Web应用是直接用servlet API编写的:大多数应用都依赖于标准的或第三方框架和类库(通常是开源的),它们间接用到了servlet...

weixin_36448083的博客 193

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JSR规范系列(7)——Jakarta EE 10 规范

Jakarta EE 10 规范

ni_hao_fan的博客 1337

java glassfish_java - Tomcat,JBoss和Glassfish有什么区别?

java - Tomcat,JBoss和Glassfish有什么区别?我开始研究Enterprise Java,我所关注的那本书提到它将使用JBoss。 Netbeans随Glassfish一起发货。 我过去使用过Tomcat。这三个项目有什么区别?8个解决方案482 votesTomcat只是一个servlet容器,即它只实现了servlet和JSP规范。 Glassfish和JBoss是完...

weixin_33171271的博客 336

Tomcat、Jetty和Glassfish性能测试

Jetty更轻量级。这是相对Tomcat而言的。由于Tomcat除遵循Java Servlet规范之外,自身还扩展大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。

m0_68965985的博客 734

Glassfish VS Tomcat

Glassfish,尤其是将来的V3版本很值得期待,很多时候大家都会觉得应用服务器运用于Web应用比较笨重,不过Glassfish V3.0版本可是分为了3个版本,一个是适合开发时使用的微版本,一个是适合于Web应用部署的web版本,一个是完全符合j2ee标准的jee服务器版本,真是人性化的设计,一直以来在web应用方面tomcat是龙头老大,而如今Glassfish将会是tomcat的强敌。然后

Fred Lee的程序人生 5264

Java EE 8 Platform SDK 和Java EE 8 Web Profile SDK的区别

进入Java官网下载Java8的时候,看到如下界面:看到Platform SDK和Web Profile SDK两个版本,这两个版本有什么区别呢?web profile版本与platform sdk之间的区别在于,web profile版本仅提供Java EE平台的一个子集。它专为仅应用于大多数Web应用程序所需的技术的Web应用程序开发而设计,并且不包括那些 通常不需要Web应用程序(像JMS等...

jklbtj的博客 7193

web_profile(网站分析)配置

web_profiler: # DEPRECATED, it is not useful anymore and can be removed # safely from your configuration verbose: true # 开关页面显示能分析页面信息的工具条 toolbar: ...

weixin_30828379的博客 306

web项目使用profile实现配置切换

场景:一个web项目,可能有 (开发,测试,生产)几个环境 ,如db.properties url有多个,开发可能是 127.0.0.1 ,测试环境可能是 192.168.8.88,生产环境 www.xxx.com,需要根据环境使用相应的配置 问题:上线的时候可能会频繁的去改配置,导致一些不必出现的问题 实现方法:   1.可以为db.properties分为上述三个环境 db_dev db...

weixin_33804582的博客 319

你真的理解PeopleSoft的Web概要(web profile)嘛

Web概要通过配置门户相关属性来控制门户的所有行为。 在PS系统中可以创建多个web概要,你可以通过不同的web概要来让用户路由到一个特定的web概要来控制超时,外观,缓存设置等。例如,通过PeopleSoft实现招聘解决方案,访问系统的有可能有3类人,HRMS核心用户,寻找工作机会的内网用户,寻找工作机会的互联网用户。可以提供不同的web概要给这三类人来控制页面展示和超时时...

weixin_30627341的博客 445

在Web应用程序中使用Profile

 今天在研究Asp.net 2.0的用户配置文件功能。ASP.NET 2.0 中的用户配置文件功能使您可以定义并存储要在整个应用程序中使用的基于用户的设置。而且,在用户未登录时,可以将这些设置存储在匿名配置文件中,然后在将来某个时间将其迁移到登录用户的配置文件中。网站通常需要一个便捷方法来存储适用于站点范围的特定于用户的数据。配置文件功能为定义特定于用户的数据以及存储和检索这些用户数据提供了一

1978
上一篇: pdAdmin4中的表有把锁,不能编辑
下一篇: Android ConstraintLayout多层布局嵌套子View不显示的原因
JianfeiMa
博客等级 码龄10年 61粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值