你不可不知的struts2参数处理机制

Struts2框架中Action参数获取的三种实现方式 模型-视图-控制器(MVC)是软件开发中的一种架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。模型代表数据和业务逻辑,视图是用户界面,控制器处理输入,将命令传递给模型和视图。MVC模式的主要目的是实现一种分层架构,以降低模块间的耦合度,提高系统的可维护性和可扩展性。Struts2是一个基于MVC模式的Java Web框架,由Apache软件基金会开发。它的设计目标是简化企业级Web应用程序的开发。 阅读详情

struts2是一个优秀的框架,他的出现让我们和Servlet说good bye,从此以后我们用Action类即可完成以前复杂,冗余的操作。

我们知道在Servlet时代,我们通过request获取到参数,我们还需要进行一系列封装和处理,最终将其传递,而struts2已经帮我们解决了这些问题,让我们更专注于业务,而非这类重复的、机械性的代码的书写。下面我介绍三种参数处理机制。

 

 

  准备工作:

1、struts.xml

2、web.xml

 

3、hello.jsp

 

4、form1.jsp

 

 

一、成功跑起来,说明struts2已经自动帮我们将form表达提交的数据封装成了属性,这就是所谓的属性驱动机制

 

 

 

 

 

二、struts2的对象驱动机制

 

实际开发中,form表单提交的数据会有很多,所以要在Action中写属性的话,get和set方法将写得很多,不太适合开发,所以衍生出了所谓的对象驱动机制

 

首先建立一个User实体类

form表单

然后书写Action类

 

跑起来的效果:

说明数据已经封装到对象之中了。

 

三、模型驱动机制

    由于使用对象驱动时,form表单的name需要书写出对象.属性的格式,不太妥当,进而产生了模型驱动机制,者是基于对象驱动的,称之为改良版对象驱动。

 

Action类

 

form表达填写正常的name即可

运行结果

 

 

敲黑板:1、在开发中,一般使用第三种模型驱动机制用来获取参数并封装成对象,需要注意的是,需要给Action类实现一个ModelDriven<>接口,并且重写它的方法,返回需要封装的对象。

               2、这三种获取参数的底层都是OGNL所完成的

       

Windows下Fortran调用CGNS库的完整踩坑实录:从HDF5、CMake到VS2019+IVF2020的保姆级配置 本文详细记录了在Windows环境下使用Fortran调用CGNS库的完整配置过程,涵盖HDF5安装、CMake配置、VS2019与IVF2020集成等关键步骤。通过实战经验分享,帮助开发者解决常见编译错误和链接问题,实现高效的Fortran与CGNS库集成。 阅读详情

相关推荐

VS2015与QT界面开发中解决‘ui_xxx.h‘文件类名不一致导致的编译错误

本文详细解析了在VS2015与QT界面开发中,因.ui文件顶层部件objectName与生成类名不一致导致'ui_xxx.h'文件出现'不完整的类型'编译错误的根本原因。通过分步排查,指导开发者统一Qt设计师对象名、自动生成文件类名及代码引用名,并提供强制重新编译UI文件、清理中间文件等解决方案,有效解决此类常见编译问题。

weixin_29009339的博客 248

Spring+Struts使用@Scope注解时必须使用prototype

Spring的注解@Scope在Struts的使用注意 scope注解是spring的一种注解,目的是管理bean 注意,Struts + Spring框架设置@Scope时,必须为prototype Spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给...

neoEson 392

C# 读取图片和扫描PDF中的文本

本博客将探讨如何使用C#和OCR库实现从图片和扫描的 PDF 中提取文本。Spire.OCR for .NET 是一个OCR文字识别库,专为在 .NET 应用程序中识别图片的文本而设计。首先,使用 Spire.PDF 将扫描的 PDF 转换为图片,然后利用 Spire.OCR 从这些图片中提取文本。由于该OCR库并不支持直接处理PDF,因此要从扫描的 PDF 中提取文本,我们首先需要将 PDF 文档转换为图片。转换完成后,再利用 Spire.OCR 从生成的图片中提取文本。方法来识别图片中的文本。

nuclear2011的博客 5405

(3)Struts2-参数传递、Json返回、拦截器

1、参数传递 入参:set 出参:get 代码: public class HelloAction4 implements Action { //入参 private String name; public void setName(String name) { this.name = name; } //出参 private String message; public String getMessage() .

allensandy的博客 477

【安徽理工大学】一文带你高分拿下计算机考研复试(85+的秘密)

一文带你高分拿下安徽理工大学计算机考研复试(85+的秘密)

猫天意的博客 1525

基于YOLOv26的卫星遥感环境监测系统

本文介绍了一个基于YOLOv26的卫星遥感环境监测系统。该系统采用分层架构设计,包含数据采集、预处理、目标检测、图像分析、变化检测等核心模块。技术栈包括YOLOv26、PyTorch、OpenCV等深度学习框架和图像处理工具,以及GDAL、rasterio等地理信息处理库。系统支持获取多种卫星数据源(如Sentinel、Landsat、MODIS)的遥感图像,并进行时间序列分析。通过代码示例展示了数据采集模块的实现,包括卫星图像获取和模拟生成功能。该系统可应用于环境要素检测、变化监测等场景,为环境监测提供智

一键难忘的博客 936

struts2传递参数的三种方式

在传统的servlet中我们采用request和response传递参数,但是struts2如果想用同样的方式传递参数,必须先: HttpServletRequest req = ServletActionContext.getRequest(); HttpServletResponse resp = ServletActionContext.getResponse(); 获取reque

yytoo2的博客 1万+

EUV光源技术路线深度解析

EUV光刻技术的关键瓶颈在于13.5纳米光源的稳定高效获取。主流技术路线从DPP放电等离子体发展为LPP激光等离子体方案,后者通过激光轰击锡液滴实现更高功率输出。新出现的LDP技术综合激光预热与放电优势,虽功率扩展性有限,但为光源技术提供了有益补充。目前LPP仍是唯一通过量产验证的方案,而LDP可能作为过渡技术应用于特定场景。EUV光源的发展实质是能量转化效率与系统可靠性的持续优化过程,各种技术路线的探索共同推动着这一核心工艺的进步。

硬核科技 558

struts2请求参数处理

今天总结一下struts2中有关action处理请求参数的两部分核心内容,第一:请求参数的封装,第二:请求参数的校验。 Action处理请求参数 struts2 和 MVC 定义关系 StrutsPrepareAndExecuteFilter: 控制器 JSP : 视图 Action : 可以作为模型,也可以是控制器   struts2 Action 接受请求参数 :属性驱动 和

Awna的博客 1798

Vue3 + uniapp 踩坑:iOS 真机调试一直报错Maximum call stack size exceeded,和(in promise)MiniProgramError err的解决方法

不是你写错代码,是微信开发工具和 iOS 真机调试的兼容问题。开个空项目都报错,勾个设置就没问题,不是你,是工具的锅。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1268

ChatGPT充值,银行卡被拒绝,图文教程

ChatGPT充值,银行卡被拒绝

weixin_46713695的博客 2万+

struts2框架处理请求参数的方法

目录 ·方法一:获取servlet API ·方法二之属性驱动之第一种(1): 方法二之属性驱动之第二种(2): 方法三:模型驱动 ·方法一:获取servlet API 获取servlet API,然后通过servlet api获取请求参数(不推荐,失去了使用框架的意义) ·方法二之属性驱动之第一种(1): 在action类中声明你要获取的参数,然后设置set/get方法。你就得到...

漫漫学习成长之路 437

古月学院《如何在Gazebo中实现阿克曼转向车的仿真》课程资料在ROS Noetic版本中运行时的常见错误及解决方法

   最近想在Gazebo中开发一些仿真内容,于是购买了古月学院的《如何在Gazebo中实现阿克曼转向车的仿真》课程,但是由于ROS 版本的更新,拿到手的课程资料不能直接在ROS Noetic版本中运行,经过我这几天的探索,对遇到的错误及解决方法进行了整理,方便后面购买课程的小伙伴更快的成功运行程序    在文章正式开始之前,先放一下我之前为了寻找该资料报错的原因,而写的两篇与该课程相关的文章链接,感兴趣的可以自行阅读    以阿克曼转向车为例对URDF和XACRO文件进行解读(点击可跳转)    将x

慕羽★的博客 5975

Struts1.x和Struts2在处理请求参数上区别

(1)Struts1.x 对于客户端的请求参数,如果上配有name属性,且对应有formbean,那么struts1.x会按照请求参数名与formbean的成员变量名匹配,相同的则调用其setter方法,为其赋值,没有匹配的,则可以通过request.getParameter("paramName")取得参数值。注意,填充formbean时,struts是按照formbean的成员变量名与请求参数

ITSTAR 3953

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Struts2的异常处理机制

任何成熟的MVC框架都应该提供成熟的异常处理机制,当然也可以在execute方法中手动捕捉异常,当捕捉到特定异常时返回特定的逻辑视图名。这种处理方式完全是手动处理异常,非常烦琐且维护性不好。如果我们要改变异常处理方式,就必须修改Action代码。最好的方式是可以通过声明式的方式管理异常处理。 手动捕捉异常示例: public String execute() throws Ex

想念的专栏 719

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Struts2(三)struts2处理请求参数及其校验

一、Action处理请求参数 1.Action处理请求参数三种方式 1.1.Action本身作为model对象,通过成员setter封装(属性驱动) // 页面: 用户名 <input type="text" name="username" /> <br/> // Action : public class ...

weixin_30539625的博客 212

深度学习工具包 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")

struts2的set get方法工作原理 在处理参数上的机制

1,其实,你在调用这个ACTION的时候是首选调用了2的一个拦截机制(拦截器) 2,调用拦截机制的时候,2会把你的URL作为一个参数进行解析 3,通过一个反射机制和STRUTS2.XML的配置解析出你的动作 4,通过解析后得到你的域名。类名,方法名,属性名 5,然后通过你的类名(其实是个字符串比如com.cn.test.myname.myaction)然后用反射机制初始化你的类实例 6,然后透过线

星星_月亮的光芒 1033

struts2对请求参数的处理

struts2对请求参数的处理   struts2 拦截器 请求参数 更改 

wanxiaotao12-126-com 167

复习struts2之请求参数接收

以get方式发送参数 步骤一:在action中定义两个参数name和age,并定义出相应的set和get方法 private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name;

1222

struts2请求参数的接收

HelloWorld.java: package blog.action; public class HelloWorld { private String name; private int age; public String getName() { return name; } public v...

SYL269794967的博客 223

Struts2的参数封装

1. 静态注入静态参数注入是由一个叫做staticParams的拦截器完成的。public class Demo1Action extends ActionSupport{ private String name = "窦虎"; public String getName(){ return name; } public void setName(Str

秋殇 381

Struts 2.3.24源码解析+Struts2拦截参数,处理请求,返回到前台过程详析

Struts2官网:http://struts.apache.org/ 目前最新版本:Struts 2.3.24 Struts1已经完全被淘汰了,而Struts2是借鉴了webwork的设计理念而设计的基于MVC的框架。感兴趣的可以了解一下webwork概念,这里不做涉及。我们常说的Struts2 Spring Hibernate三大面试中常被问到的框架,其实Struts2和Sp...

angjiu8534的博客 286

Struts 2 filterDispatcher机制

9.4  Struts 2的核心机制Struts 2的处理流程已经和Struts 1大相径庭了,但是和WebWork比较相似,这都是因为Struts 2和WebWork合并的缘故,并吸取了WebWork大部分设计思想。下面讲解Struts 2的核心流程,以及其他一些处理机制。9.4.1  FilterDispatcher处理流程在Struts 2中,最重要的一个类是org.apache

hejunPurple的专栏 3565

SpringMVC与Struts2对比教学

面试时如果被问到,可以笑着说:“这就像问现在出门是骑马(Struts2)还是开车(SpringMVC)。当然,如果贵司马厩里(老系统)还有几匹 Struts2 的千里马需要照顾,我也略懂驯马术(维护经验)😉。SpringMVC 和 Struts2 就像武林中的两大门派,虽然都是处理 Web 请求的高手(MVC 框架),但招式风格和内功心法大不相同。来,咱们用最接地气的方式掰扯掰扯,保准你笑着记住!记住这些核心点,结合生动的类比,面试官想不给你加分都难!

了凡 1207

Struts2技术详解

1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueStack的属性里。获取valueStack对象: ValueStack vs = (ValueStack) request.getAttribute("struts.valueSta

爱是一种信仰 4454

struts2处理机制探索

初学Struts2,对其工作机制的一点猜测与总结:首先在不使用struts的情况下,一般采用jsp+servlet+javabean的模式来进行开发这种开发也可以形成MVC模式,但当servlet的数量比较多的时候,web.xml的配置就会非常的复杂需要为每一个servlet进行配置操作。struts的使用简化了servlet的配置操作,只需要在web.xml中加入一个过滤器对用户所输入的路径进行

JavaMan_chen的专栏 2286
上一篇: 如何用struts2获得ServletAPI?
下一篇: SpringBoot使用总结
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值