自定义框架_属性设置 | 学习笔记

简介: 快速学习自定义框架_属性设置,介绍了自定义框架_属性设置系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门自定义框架_属性设置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7331


自定义框架_属性设置

 

一、自定义框架_属性设置

核心过滤器里:

//已将对应得action映射到对应请求上。

Action targetAction=reqToAction(req);

//创建action对象

Try{

ObjectproxyAction= crteateProxyAction(targetAction.getClasses())

//将用户提交的数据设置到action的属性上

setProperty(req, proxyAction, targetAction. getClasses());

//执行action的方法

//处理结果

}catch (Exception e){

//TODO Auto-generated catch block

e.printStackTrace();

}

创建 action 对象是几个步骤里最简单的。接下来创建 action 对象。去做件事情,返回的是 Object 对象。crteateProxyAction 只是代用的 Actionx 型,不是真正的 Action 型,当然这里是真正的 Action 型。
String className 创始人建立的,应先判断一下。当名字等于空时,就会报错。在framework.xml 里,就会不显示 class

<?xml version="1.0" encoding="UTF-8"?><framework><action name= "hello"class="cn.sxt.action.HelloAction"<result name= "success "type="redirect ">/index. jsp</result><result name= "failed"type="redirect">/ index. jsp</result>

</action></ framework>

办法一:

在解析时不给报错,继续运行。

办法二:

private Object crteateProxyAction(String className){
时就报错,

接着就去获得 Class clzz = Class.forName(className)。给它后,通过它创建对象。防止异常,用 Exception。接着正常调用,取名为 Object proxyAction=,将这个方法调用。

调用方法的参数是根据 Action targetAction=reqToAction(req);目标上得到的。

接着处理异常,将异常往外处理。将将用户提交的数据设置到 action 的属性上、执行action 的方法、处理结果放入异常里。说明已将将用户提交的数据设置到 action 的属性上,接着就会处理事情。接着讲解将用户提交的数据设置到 action 的属性上

思考问题:

现将数据传给 Action 对象,对象会传给 proxyAction ,给 proxyAction 设属性,就要将对象给 proxyAction,这是第一。现数据在HttpServletRequest req = (HttpServletRequest)rq;的对象里,现要将数据设入Object proxyAction,就要通过 class 进行设置。

理论上要把 class 传给

private void setProperty(HttpServletRequest req, Object obj,),

现没有 class,就转 className

private void setProperty(HttpServletRequest req, Object obj,)调setProperty 方法,

req, proxyAction, targetAction. getClasses给 setPropert。首先用户提交哪些参数,是 Map 对象,将 Map 对象取出。取出后,它的本质是用于存放尺寸,前面是尺寸,后面是数据。将 Map 数据解代,得到K型,接着写 Object,接着测试。

Console:

java. lang. ClassNotFoundException:at org. apache. catalina. loader . WebappClassLoader . loadClass (WebappClassLoat org.apache. catal ina. loader . WebappClassLoader.loadClass (WebappClassLo;

at java. lang. class. forName(Native Method)at java. lang. Class. forName(Class . java:171)at cn. sxt. filter . CoreFilter. createProxyAction(CoreFilter. java:64)

没有找到对象,报出异常。将对象写出,因为需要对象传参。做简单属性处理。接着重新启动,得出 pwd 和 name,Y 是数组,所以只需获取 K。不用取里面的数组。接着刷新,得到 ped---1111和 name---zhangsan。因为 keySet 没有顺序,所以 pwd 和name 不用管顺序。将数据取出后,将数据给对象 obj。首先创建 class 这样String className 就不用传了。用一次即可,得到 Object

HelloAction.java:

package cn. sxt. action;public class HelloAction {private String name ;private String pwd;

publice String execute() {

System. out . println(name+"----"+pwd) ;

return “success";public String getName() {return name ;}public void setName(String name) {this . name = name ;}public String getPwd() {return pwd ;public void setPwd(String pwd) {this . nwd=nwd:

Console:

2015-8-21 9:33:04 org. apache. catalina.startup.Catalina start
信息: Server startup in 893 ms
pwd---[Ljava. lang . string;@40363068
name---[Ljava. lang. String;@25a41cc7

/ /得清求名String reqName-path. substring( path.1astIndex0f("/")+1, path.lastIndereturn ActionMapper . actionMap. get(reqName);}private Object crteateProxyAction(String className)throws Exception{Class clzz = Class.forName(className)

Return clzz.newInstance();}

//将用户提交的数据设置到 action 的属性上—简化很多

private void setProperty(HttpServletRequest req, Object obj, String className)

//创建class

Class clzz=obj.getClass();

Map map=req. getParameterMap();

for(Iterator iter = map. keySet(). iterator();iter . hasNext();){

object key=iter .next();

//根据提交参数去找Field

当 Field 为空时,不用作或报异常。先将异常往外抛。不为空往下走,进行赋值。不知道 obj 是什么对象用 obj

若想做好,在Field field = clzz.getDeclaredField(key.toString())

判断类型,是 inter 给 inter,double 给 double,便于进行类型转换。

Field field = clzz.getDeclaredField(key.toString())

if(field==null){

continue;

}

field.setAccessible(true);

//在这进行设值时,要进行相应的类型转换---省略了

field.set(obj, req. getParameter(key . toString()));field. setAccessihlel(false):

field.set(obj,value)

System. out . println(key+”---“+rep.getParmeter(key.toString()));

相关文章
|
API
免费节假日api接口使用教程-聚合数据
免费节假日api接口使用教程-聚合数据
4878 0
免费节假日api接口使用教程-聚合数据
|
JavaScript 前端开发 API
core-js介绍及安装使用
core-js介绍及安装使用
core-js介绍及安装使用
|
存储 消息中间件 网络协议
金鱼哥RHCA回忆录:DO447Ansible Tower的维护和常规管理--基本的故障排除
第十四章 Ansible Tower的维护和常规管理--基本的故障排除
929 0
金鱼哥RHCA回忆录:DO447Ansible Tower的维护和常规管理--基本的故障排除
|
10月前
|
机器学习/深度学习 资源调度 算法
半监督学习
半监督学习(SSL)结合少量标注数据和大量未标注数据,提升模型性能。经典方法包括自训练、协同训练和生成式方法;深度学习时代则涌现了一致性正则化、对比学习增强和基于图的SSL等技术。前沿突破涵盖扩散模型和大语言模型驱动的SSL。当前面临理论与工程挑战,未来探索方向包括量子SSL和神经符号融合。最新性能评估显示,在多个数据集上SSL方法显著优于传统全监督学习。
|
10月前
|
机器学习/深度学习 存储 自动驾驶
《深度剖析:设计最优深度Q网络结构,精准逼近Q值函数》
深度Q网络(DQN)结合深度学习与Q学习,通过神经网络逼近Q值函数,指导智能体在不同状态下选择最优动作。其核心优势在于解决高维状态空间下的决策问题,利用经验回放机制和目标网络提高训练稳定性。设计高效DQN需考虑输入层、隐藏层及输出层结构,针对不同任务选择合适的网络架构,如CNN处理图像数据,MLP应对数值型状态。案例分析显示,在CartPole和Atari游戏中,DQN通过优化网络结构和策略,取得了显著效果。未来研究将聚焦于更智能的网络设计和跨领域技术融合,拓展DQN的应用范围。
741 14
|
存储 编解码 算法
视频编码格式和封装格式有什么关系?相机常见的编码格式有哪些?
视频编码格式与封装格式的关系类似于酒与酒瓶的关系。编码格式是视频的核心内容,如H.264、H.265等,而封装格式则是将视频、音频、字幕等集成在一起的外壳,如MP4、MKV等。不同的封装格式适应不同的播放需求,例如MP4兼容性最好,MKV适合网络传播。
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之遇到报错:Nested transactions are not supported,该怎么办
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。
388 1
|
存储 安全 网络协议
游戏服务器:构建与运行的艺术
游戏服务器:构建与运行的艺术
283 1
|
编解码 测试技术 数据库连接
【软件测试】基础篇 -- 详解
【软件测试】基础篇 -- 详解
|
JavaScript 前端开发
JavaScript 中 callee 与 caller 的作用
JavaScript 中 callee 与 caller 的作用