日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2原理分析之反射技术动态获取属性

發(fā)布時間:2024/1/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2原理分析之反射技术动态获取属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

反射技術動態(tài)獲取屬性

知道struts2的流程的鄉(xiāng)親們都知道。struts2采用了動態(tài)獲取屬性的方法,
將表單里的數(shù)據傳給了Action。

例如;
在struts2里有如下配置文件

<action name="MyAction" class="com.lin.test.ActionTest" method="execute">

<result name="success">success.jsp</result>
<result name="fail">fail.jsp</result>

</action>

com.lin.test.ActionTest的實現(xiàn)如下:
package com.lin.test;

public class ActionTest {
? ???private String userName;
? ???private String passWord;
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 String execute(){
? ?? ?if((userName==null)||(userName.equals("")))
? ?? ?{
? ?? ? System.out.println("text為空。。。。");
? ?? ? return "fail";
? ?? ?
? ?? ?}else{
? ?? ? System.out.println("username:? ???"+userName);
? ?? ?? ? return "success";
? ?? ??
? ?? ?}
? ?}
}

把test.jsp文件的表單數(shù)據提交給struts2 配置的Action里,這里叫做MyAction

<%@ page language="java" contentType="text/html; charset=GB18030"
? ? pageEncoding="GB18030"%>
? ? <%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>登陸</title>
</head>
<body>
<s:form action="MyAction" method="post">
??<s:textfield label="用戶名" name="userName"/><!--標簽的name 屬性是針對于后臺,id是對前臺-->
??<s:textfield label="密碼" name="passWord"/>
? ?<s:submit value="提交"/>
??</s:form>
</body>
</html>

測試:

輸入用戶名后點擊確定,Action的java代碼里在控制臺里成功的輸出的text的值


若text的內容為空


點擊確定后,由于在Action的方法里對輸入的內容進行了判斷,此時輸出

text為空。


通過以上例子,Action獲取了輸入的值,并且進行了判斷。

那么這個原理是怎么實現(xiàn)的呢?

答案:反射機制

,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法。

demo

User類,加上tostring方法,方便打印

class User {
? ? public User(){}
? ?

? ? private String username;

? ? private String userid;

? ? public String getUserid() {
? ?? ???return userid;
? ? }

? ? @Override
public String toString() {
??return "User [username=" + username + ", userid=" + userid + "]";
}

public void setUserid(String userid) {
? ?? ???this.userid = userid;
? ? }

? ? public String getUsername() {
? ?? ???return username;
? ? }

? ? public void setUsername(String username) {
? ?? ???this.username = username;
? ? }
}

public class Reflect {
public static void main(String[] args) throws Exception {
//創(chuàng)建user1對象
User user1 = new User();
user1.setUsername("arthinking");
user1.setUserid("001");
String username = "arthinking";
String userid = "001";
//通過user1對象獲取Class
Class<?> classType = user1.getClass();

//生成user2對象
Object user2 = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
//從user1對應的Class對象中獲取所有的屬性
Field[] fields = classType.getDeclaredFields();
for(int i=0; i<fields.length; i++){

? ???Field field = fields;
? ???//動態(tài)生成getter和setter方法
? ???String fieldName = field.getName();
? ???String firstChar = fieldName.substring(0,1).toUpperCase();

? ???String getterName = "get" + firstChar + fieldName.substring(1);
? ???String setterName = "set" + firstChar + fieldName.substring(1);
? ???Method getter = classType.getMethod(getterName);

? ???Method setter = classType.getMethod(setterName, new Class[]{field.getType()});
? ???Object result = getter.invoke(user1);
? ???setter.invoke(user2, new Object[]{result});
}

Syso(“User1”+user1);
System.out.println("user2? ?? ?"+user2);
? ?
}

}
有相同的輸出



轉載于:https://blog.51cto.com/wufanxin/1657492

總結

以上是生活随笔為你收集整理的struts2原理分析之反射技术动态获取属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。