java中List存值的原理,就是为什么能往List里面存值。还有Struts2为什么能直接匹配jsp里面的值。

Lisp存值的原理,以前servlet是要通过Primary获取页面的值为什么Struts2中直接定义一个和jsp中name相同的属性就行了呢,原理是什么。求大侠解答... Lisp存值的原理,以前servlet是要通过Primary获取页面的值为什么Struts2中直接定义一个和jsp中name相同的属性就行了呢,原理是什么。求大侠解答 展开
 我来答
百度网友e82546a27
2012-12-10 · TA获得超过403个赞
知道小有建树答主
回答量:264
采纳率:100%
帮助的人:243万
展开全部
1、List存值原理:
List本身并不能存值,因为其只是个接口,只是种规范,规定了实现类应该具备的存值取值的功能,具体List存值原理,得具体到实现类来说。
(1)实现类ArrayList,查看ArrayList源码就会知道,其内部有个数组叫Object[] elementData,当调用add方法的时候,对象实际被存储在elementData数组中,这也就是为什么ArrayList可以存值了,add方法会自动判断当前elementData数组的长度是否足够大,否则,根据内部算法重新分配空间,所以可以一直给ArrayList中存值,而不用考虑其容量问题。
(2)实现类LinkedList,LinkedList是采用循环链表的方式去实现List接口的,其静态内部类Entry表示链表上的一个节点。Entry有三个属性element:表示节点对象内容,next:表示下一个节点,previous表示上一个节点,当调用add方法的时候,LinkedList内部会在链表的最后端插入Entry对象,所以LinkedList可以存值,取值。
2、Struts2自动装配原理。
Struts2要求Action层组件中参与自动装配的属性,均需提供对应的set方法,所以原理就是Struts2会将页面上的元素属性名字,和Action组件的属性名字进行对比,如果一致的话,则在实例化Action(Struts2会在每一个请求到来的时候实例化Action组件,然后装配,然后执行业务代码)后,调用其名字一致属性的set方法,将页面上的属性值设置进去,这样就完成了装配,无须程序员编写额外代码。
在调用set方法的时候,是通过java反射机制完成的。
3、反射set方法简介。
比如页面上有属性名字叫name,值123,set方法为setName,对象为user,那么反射调用可以这么进行。
String str = "set" + StringUtils.capitalize(“name”); // 将name变为 Name
Class<?> clazz = user.getClass().getDeclaredField("name").getType(); // 读取name属性类型
Method m= user.getClass().getMethod(str, new Class[] { clazz }); // 获得name的set方法
m.invoke(user, new Object[] { “123”}); // 调用 setName方法
------------
这时候,反射已经完成,此时调用 user.getName() 将会打印 123。
88568700zzp
2012-12-09 · TA获得超过138个赞
知道小有建树答主
回答量:145
采纳率:100%
帮助的人:112万
展开全部
首先,你得知道struts2都是基于拦截器的,最底层的原理就是反射,通过actionMapping找到映射的action,然后通过反射得出这个类的域属性,比如name,user的,然后struts就去request的getParam,然后注入action中,如果没有对应的name属性,这个属性自然为空了
追问
那List集合存值的原理了,为什么能往里面存值
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻轻的子衿
2012-12-09 · 超过31用户采纳过TA的回答
知道答主
回答量:106
采纳率:100%
帮助的人:72.3万
展开全部
你这个List我没看到,是List集合吗?
至于struts2取JSP页面的值,这是通过反射机制,根据你在JSP中设置的属性动态的找到类的setter方法,把值传进去,就是你封装了属性提供的方法。这些实际上struts2底层已经帮你实现了。
追问
嗯,是List集合。这个反射机制又是怎么样的,怎么样反射的能不能把代码给我贴出来让我看下,非常感谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式