(Struts2)Struts2框架的数据封装

struts2封装数据的三种方式 整合了Struts2 的数据封装的三种方式,以及其知识点整合 立即下载

1、为什么要使用数据的封装?

     >  作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中

     >  封装数据为开发提供了很多便利之处

     >  Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装!!!


2、Struts2中提供了两种数据封装的方式

      第一种方式:属性驱动

             >  提供对应属性的set方法进行数据的封装

                  *   表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。

                  *   表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。

             >  注意点:

                  *  Struts2的框架采用的拦截器完成数据的封装.

                  *  这种方式不是特别好:因为属性特别多,提供特别多的set方法,而且还需要手动将数据存入到对象中.

                  *  这种情况下,Action类相当于一个JavaBean,就没有体现出MVC的思想,Action类又封装数据,又接收请求处理,耦合性较高。

              页面代码:

<h3>属性驱动的方式</h3>
<form action="${ pageContext.request.contextPath }/register1.action" method="post">
	姓名: <input type="text" name="username" /><br/>
	密码: <input type="password" name="password"/><br/>
	年龄: <input type="text" name="age"/><br/>
	<input type="submit" value="注册" />
</form>

             Action类代码:

/**
 * 属性驱动
 * @author Administrator
 */
public class Regist1Action extends ActionSupport {
	private String username;
	private String password;
	private Integer age;
	
	public void setUsername(String username) {
		this.username = username;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String execute() throws Exception {
		System.out.println(username + " " + password + " " + age);
		return NONE;
	}
}

    配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="demo2" namespace="/" extends="struts-default">
	        <!-- 属性驱动的方式 -->
            <action name="register1" class="com.itheima.demo2.Register1Action" method="execute"></action>
	</package>
</struts>


     >   在页面上,使用OGNL表达式进行数据封装

           *   在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中

           *   在页面中定义一个JavaBean,并且提供set方法。例如:private  User  user;

           *   页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:<input name="user.username" />

           *   注意:只提供一个set方法还不够,必须还需要提供user属性的get方法!!!

                   >>   先调用get方法,判断是否有user对象的实例对象,如果没有,调用set方法把拦截器创建的对象注入进来。

           Jsp页面代码:

<h3>属性驱动的方式(把对象封装到JavaBean的对象中)</h3>
<!-- 注意一: 页面的编写规则,发送了变化,使用的OGNL表达式的写法 -->
<form action="${ pageContext.request.contextPath }/register2.action" method="post">
    姓名: <input type="text" name="user.username" /><br/>
    密码: <input type="password" name="user.password"/><br/>
    年龄: <input type="text" name="user.age"/><br/>
    <input type="submit" value="注册" />
</form>

           JavaBean代码:

// JavaBean
public class User {
	private String username;
	private String password;
	private Integer age;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", age=" + age + "]";
	}
}

         Action类的代码:

/**
 * 属性驱动方式,把数据封装到JavaBean的对象中
 * @author Administrator
 */
public class Regist2Action extends ActionSupport {
	
	// 注意二: 属性驱动的方式,现在要提供的是get和set方法
	private User user;
	
	public User getUser() {
		System.out.println("getUser...");
		return user;
	}

	public void setUser(User user) {
		System.out.println("setUser...");
		this.user = user;
	}

	public String execute() throws Exception {
		System.out.println(user);
		return NONE;
	}
	
}

         配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="demo2" namespace="/" extends="struts-default">
		<!-- 属性驱动的方式,把数据封装到JavaBean对象中 -->
		<action name="register2" class="com.itheima.demo2.Register2Action" method="execute"></action>
	</package>
</struts>


     第二种方式:模型驱动

            >  使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别!

            >  编写的页面不需要任何变化,正常编写name属性的值

            >  模型驱动的编写步骤:

                    *   手动实例化JavaBean,即:private  User  user  =  new  User();

                    *   必须实现ModelDriven<T> 接口,实现getModel()的方法,在getModel()方法中返回user即可

           页面代码:

<h3>模型驱动方式</h3>
<form action="${ pageContext.request.contextPath }/register3.action" method="post">
	姓名: <input type="text" name="username" /><br/>
	密码: <input type="password" name="password"/><br/>
	年龄: <input type="text" name="age"/><br/>
	<input type="submit" value="注册" />
</form>

           JavaBean代码:

// JavaBean
public class User {
	private String username;
	private String password;
	private Integer age;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", age=" + age + "]";
	}
}

           Action类代码:

/**
 * 模型驱动的方式
 *    实现ModelDriver接口
 *    必须要手动实例化对象(需要自己new)
 * @author Administrator
 */
public class Regist3Action extends ActionSupport implements ModelDriven<User>{
	// 必须要手动实例化
	private User user = new User();
	
	// 获取模型对象
	public User getModel() {
		return user;
	}
	
	public String execute() throws Exception {
		System.out.println(user);
		return NONE;
	}
}

            配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="demo2" namespace="/" extends="struts-default">
		<!-- 模型驱动的方式 -->
		<action name="register3" class="com.itheima.demo2.Register3Action" method="execute"></action>
	</package>
</struts>

3、属性驱动另外两种方式:把数据封装到List和Map集合中

         *   封装到List集合中

<h3>向List集合封装数据(默认情况下,采用的是属性驱动的方式)</h3>
<!-- 后台: List<User> list -->
<form action="${ pageContext.request.contextPath }/register4.action" method="post">
	姓名: <input type="text" name="list[0].username" /><br/>
	密码: <input type="password" name="list[0].password"/><br/>
	年龄: <input type="age" name="list[0].age"/><br/>
		
	姓名: <input type="text" name="list[1].username" /><br/>
	密码: <input type="password" name="list[1].password"/><br/>
	年龄: <input type="age" name="list[1].age"/><br/>
	      <input type="submit" value="注册" />
</form>
        Action类:
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 属性驱动的方式,把数据封装到List集合中
 */
public class Register4Action extends ActionSupport{
	private List<User> list;
	public List<User> getList() {
		return list;
	}
	public void setList(List<User> list) {
		this.list = list;
	}

	public String execute() throws Exception {
		for (User user : list) {
			System.out.println(user);
		}
		return NONE;
	}
}

          JavaBean:

// JavaBean
public class User {
	private String username;
	private String password;
	private Integer age;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", age=" + age + "]";
	}
}

          配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="demo2" namespace="/" extends="struts-default">
		<!-- 把数据封装到List集合中 -->
		<action name="register4" class="com.itheima.demo2.Register4Action" method="execute"></action>
	</package>
</struts>


    *   数据封装到Map集合中

<h3>向Map集合封装数据(默认情况下,采用的是属性驱动的方式)</h3>
<form action="${ pageContext.request.contextPath }/register5.action" method="post">
	姓名: <input type="text" name="map['one'].username" /><br/>
	密码: <input type="password" name="map['one'].password"/><br/>
	年龄: <input type="age" name="map['one'].age"/><br/>
		
	姓名: <input type="text" name="map['two'].username" /><br/>
	密码: <input type="password" name="map['two'].password"/><br/>
	年龄: <input type="age" name="map['two'].age"/><br/>
	      <input type="submit" value="注册" />
</form>

        Action类代码:

/**
 * 属性驱动的方式,把数据封装到Map集合中
 */
public class Register5Action extends ActionSupport {
	private Map<String, User> map;
	public Map<String, User> getMap() {
		return map;
	}

	public void setMap(Map<String, User> map) {
		this.map = map;
	}

	public String execute() throws Exception {
		System.out.println(map);
		return NONE;
	}
}
        JavaBean代码:
// JavaBean
public class User {
	private String username;
	private String password;
	private Integer age;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", age=" + age + "]";
	}
}
         配置文件代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="demo2" namespace="/" extends="struts-default">
		<!-- 把数据封装到Map中 -->
		<action name="register5" class="com.itheima.demo2.Register5Action" method="execute"></action>
	</package>
</struts>


下一篇:Struts2的拦截器技术

腾讯地图自定义瓦片地图开发实战:从坐标定位到图层融合 本文详细介绍了腾讯地图自定义瓦片地图开发的全流程,从坐标定位到图层融合的实战技巧。通过具体代码示例和常见问题解决方案,帮助开发者快速掌握腾讯地图API的自定义瓦片功能,实现室内外地图的无缝衔接和特殊图层的叠加展示。 阅读详情

相关推荐

Unity3d实现红外热成像效果

1.将需要在红外图像中高亮的物体设置到图层PostProcessing。 2.新建一个相机CameraHighLight,设置其Culling Mask为PostProcessing,也就是在这个相机中只有PostProcessing图层的物体可见。 3.新建一个RenderTexture,命名为HightLightRt,将CameraHighLight的Target Texture设HightLightRt。 4.新建一个相机Camera2,这个相机用于显示其他物体。 接下来将CameraHigh

zouxin_88的专栏 8327

Struts2获取表单数据并封装的三种方式,详解版

Struts2获取数据到实体类的三种封装方式~超详解简单准备一,属性封装二,模型驱动封装(推荐方式)三,表达式封装四,比较表达式封装与模型驱动封装 简单准备 1, .jsp文件 ${pageContext.request.contextPath}表示指向了项目的根目录。 2, action文件 实体类 3, struts.xml 在jsp中路径写上data3.action 就会找到此被配置...

心比天高,仗剑走天涯,保持热爱,奔赴向梦想! 2137

手把手教你用nRF52832+RFX2401C设计远距离蓝牙模块(附完整原理图/PCB文件)

本文详细介绍了如何利用nRF52832 SoC与RFX2401C射频前端芯片设计远距离蓝牙模块,涵盖芯片选型、阻抗匹配、PCB布局等关键环节。通过实战指南和完整原理图/PCB文件,帮助工程师实现输出功率可达20dBm的蓝牙模块设计,适用于智能家居、运动追踪等物联网应用。

weixin_29214199的博客 287

Struts2数据封装

Struts2数据封装      Struts2提供了一些基于拦截器的数据封装方式,一共有四种,分为静态参数封装和动态属性封装,动态属性封装又可分为属性驱动和模型驱动,属性驱动又可分为基本属性驱动和对象图导航语言(OGNL,Object Graph Navigation Language)驱动。 思维导图 静态参数封装 在struts.xml文件中配置

Switch的博客 5403

kali破解WIFI密码

今天我们来学习一下通过kali和一个好的字典来破解WIFI密码。 声明:此教程仅供学习研究使用,严禁使用此技术进行非法行为 首先我们需要一个具有监听功能的无线网卡(这里我给大家推荐:rt3070) 本章实验通过虚拟机VMware进行: 先通过services.msc来打开VMware USB Arbitration Service 插上监听网卡,连接USB到虚...

#的博客 5810

视频帧插学习(三):ema-vfi代码拆解和分析

video interp EMA-VFI

mikhailbran的博客 709

Struts2数据封装机制

一,属性驱动的数据封装示例代码:public class AttributeAction extends ActionSupport { // 属性直接放在action类中,并且每一个属性都得写get和set方法 private String name; private String passwd; // 经过struts2的封装,可以直接在这里获取到我们需要的数据

老高是我 6298

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4577

Struts2的三种数据封装方法

第一种方法:属性封装(action提供属性对应的set方法)这种方式需要手动封装数据,但是如果属性很多,提供很多的set方法,导致Action类易读性变差。页面代码:&lt;body&gt;&lt;h1&gt;Struts2的数据封装&lt;/h1&gt;&lt;h3&gt;数据封装的方式一:提供属性的set方法的方式&lt;/h3&gt;&lt;form action="${ pageConte...

smggjessica的博客 1251

深度学习实战:基于YOLOv5/v8/v10的快递暴力分拣检测系统(完整版)

在电商物流高速发展的今天,快递包裹日均处理量已突破亿件级别。然而,快递分拣过程中的暴力抛扔行为不仅造成包裹损坏,更带来巨大的经济损失。据统计,每年因暴力分拣导致的快递破损投诉占总投诉量的30%以上。传统的人工监控方式存在疲劳、疏漏等问题,因此开发一套智能化的快递暴力分拣检测系统具有重要的现实意义。

YOLO 275

Java 实现 MP3 音频合并工具类:摆脱 FFmpeg,高效低 CPU 的纯本地方案【需求已解决】

本方案充分发挥了 Java 音频 SPI 的潜力,实现了轻量、跨平台、低 CPU 消耗的 MP3 音频合并工具类。 对于希望在服务器或桌面应用中集成音频处理功能的开发者而言,这无疑是一个可行且优雅的解决方案。

一键难忘的博客 543

七、Struts2框架的数据封装

什么叫框架的数据封装? 就是将原本需要使用Servlet的Api手动去解析请求参数,然后封装成model的操作交给了Struts2框架来完成。Struts2的框架采用了拦截器来完成数据的封装。 两类数据封装的方式 1.属性驱动方式 提供对应属性的set方法进行数据的封装。 表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。 表单中的数据提交,最终找到Action类...

热爱不止,前行不息 287

大模型复杂问答能力评测框架:从原理到实践

在人工智能领域,大语言模型(LLM)的评估是衡量其实际应用价值的关键环节。其核心原理在于通过系统化的评测框架,对模型的理解、推理、整合与表达能力进行量化分析。传统的NLP基准测试往往侧重于事实性检索或简单推理,难以全面反映模型在应对多跳推理、隐含条件、长上下文整合等复杂现实任务时的真实性能。因此,专门针对复杂问答设计的评测技术应运而生,其价值在于为模型选型、效果优化和瓶颈诊断提供数据驱动的科学依据。该技术广泛应用于需要深度逻辑判断的业务场景,如智能投顾、法律咨询、医疗诊断等。本文聚焦的`tan92hl/Co

weixin_28679635的博客 362

Struts2框架的数据封装

1. 为什么要使用数据的封装呢? * 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 * 封装数据为开发提供了很多方便 * Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!!   2. Struts2中提供了两类数据封装的方式? * 第一种方式:属性驱动 &gt; 提供对应属性的set方法进行数据的封装。...

qq_37186314的博客 175

VC中sqlite的使用

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Struts2 框架 2 -转发/重定向、获取表单数据(ActionContext获取、属性封装、模型驱动封装、封装到集合里面)

转发、重定向 dispatcher redirec redirectAction:重定向到action chain:转发到action 获取表单数据 使用 ActionContext 类 使用 ServletActionContext 类 使用接口注入方式 # 使用ActionContext类获取 获取当前线程的 ActionContext 对象: getContext() 返回一个包含...

LawssssCat的博客 392

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JAVA框架Struts2 数据封装

一、strust2封装数据包含二部分: 数据在到Action类的时候,会经过拦截器,拦截器会有很多功能:比如数据封装、类型转换等。 我可以查看下strust-default.xml文件,看那些拦截器默认执行。 中的默认栈中的拦截器执行如下: 其中拦截器params和modelDriven分别为:属性封装和模块封装。 1、属性封装 常用的:需要注意的是实现set方法。拦截器通过...

weixin_30394333的博客 76

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【Struts2框架】Struts2中的Action封装数据

1.struts2中的Action封装数据的方式 方式1 方式2 页面 Action类 方法3 2.在Action中如何控制作用域对象(request,session,application) 方式一:使用代码的方式获取经过struts2重新封装过(struts2把HttpServletRequest/HttpSession/ServletContext接口重新封装成...

qq_41614424的博客 340

Struts2框架把数据封装到List集合中

在学习Struts2框架把数据封装到List集合中,遇到了如下一个问题 无论怎么修改代码,访问网页之后总是报空指针异常,通过debug发现数据根本没封装进去,这个问题居然纠结我快两个小时。。。 最后发现问题居然出现在Action类中。。。在提供List集合的时候要同时提供get和set方法,而我只提供了set方法,导致数据封装不了。。 真的要细心。。 ...

weixin_44247784的博客 284

Struts2框架封装数据

主要解决的问题:是在action中如果获取请求参数主要有两种方式:1.属性驱动直接在action类中提供与请求参数匹配属性,提供get/set方法在action类中创始一个javaBean,对其提供get/set ,在请求时页面上要进行修改,   例如 user.username  user.password ,要使用ognl表达式以上两种方式的优缺点:第一种比较简单,在实际操作我们需要将acti...

缺钙的蜗牛 208

Struts2框架数据封装大全

属性封装 --基本类型和String类型 条件: 1 需要有成员属性 2 需要有set方法 <h1>基本类型和String类型封装</h1> <form action="${pageContext.request.contextPath}/servlet6" method="...

未来架构师的博客 197

Struts2框架自学之路——Action获取表单数据的方式以及表单数据的封装

目录目录 Action获取表单数据的方式 通过ActionContext类获取 使用ServletActionContext类获取 通过特定接口访问 在Action中操作域对象 Action中原始方式封装表单数据 Struts2中表单数据的封装 属性封装Action获取表单数据的方式  在使用servlet处理请求的过程中,可以通过request对象获得表单提交过来的数据。采用struts2后将采用

梦空间 2090

Struts2框架笔记02_API_结果页面配置_数据的封装

文章目录1. Struts2的Servlet的API的访问1.1 方式一:完全解耦合的方式1.1.1 环境搭建1.1.2 代码1.1.3 测试1.1.4 向域对象中存入数据1.2 方式二:使用Servlet的API的原生方式【掌握】1.2.1 jsp文件1.2.2 Action类RequestDemo21.2.3 配置文件struts_demo.xml1.2.4 测试1.3 方式三:接口注入的方...

itzhouq的博客 234

Struts2框架的数据封装一之属性封装(属性封装的第一种方式:对参数进行封装)...

request带着参数来,aciton对其进行处理。在学习action之前,使用的是servlet对request进行处理。request请求时会带有参数,所以我们要对这些参数进行封装。 1. 为什么要使用数据的封装呢? * 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 * 封装数据为开发提供了很多方便 * Struts2框架...

weixin_30619101的博客 203

7.Struts2框架封装数据

Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!! 第一种方式:属性驱动   > 提供对应属性的set方法进行数据的封装。--经常使用     * 表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。     * 表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。 ...

weixin_34247155的博客 71

Struts2框架与页面的数据交互(1)--数据封装

2、Struts2框架与页面的数据交互(1)--数据封装 上接Sturts2框架入门学习:https://blog.youkuaiyun.com/biggerchong/article/details/84540183 目录 2、Struts2框架与页面的数据交互 2.1 Struts2框架访问servlet的API 2.1.1 完全解耦和方式(了解) 2.1.2 使用servlet的API原...

知飞翀的博客 604
上一篇: (Struts2)结果页面的跳转
下一篇: (Struts2)Struts2的拦截器技术
Jadan-Z
博客等级 码龄10年 8粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值