JAVA开发基础知识:解析并创建XML文件和Java的反射
2016-10-23 17:06
447 查看
一、解析并创建xml文件
在使用Struts2框架时,在web.xml和struts.xml中都有xml代码,xml代码的主要作用就是配置,那在java中如何读取xml中的内容呢?创建XmlAndReflect的Java项目,在项目中引入dom4j-1.6.1.jar文件,创建struts.xml文件,代码如下。
<mymvc> <actions> <action name="list" class="controller.List"> <result name="toListJSP"> </result> <result name="toShowUserinfoList" type="redirect"> showUserinfoList.ghy </result> </action> <action name="showUserinfoList" class="controller.ShowUserinfoList"> <result name="toShowUserinfoListJSP"> /showUserinfoList.jsp </result> </action> </actions> </mymvc>创建Reader.java类,代码如下:
程序运行后的结果如下图:
上面我们读取并解析了xml文件,那如何创建xml文件呢?
创建Java类Writer.java代码如下。
package com.xml.test; import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Writer { public static void main(String[] args) { try{ Document document = DocumentHelper.createDocument(); Element mymvcElement = document.addElement("mymvc"); Element actionsElement = mymvcElement.addElement("actions"); Element listActionElement = actionsElement.addElement("action"); listActionElement.addAttribute("name", "list"); listActionElement.addAttribute("class", "controller.List"); Element toListJSPResultElemnt = listActionElement.addElement("result"); toListJSPResultElemnt.addAttribute("name", "toListJSP"); toListJSPResultElemnt.setText("/list.jsp"); Element toShowUserinfoListResultElement = listActionElement.addElement("result"); toShowUserinfoListResultElement.addAttribute("name", "toShowUserinfoList"); toShowUserinfoListResultElement.addAttribute("type","redirect"); toShowUserinfoListResultElement.setText("showUserinfoList.ghy"); Element showUserinfoListActionElement = actionsElement.addElement("action"); showUserinfoListActionElement.addAttribute("name", "showUserinfoList"); showUserinfoListActionElement.addAttribute("class", "controller.ShowUserinfoList"); Element toShowUserinfoListJSPResultElement = showUserinfoListActionElement.addElement("result"); toShowUserinfoListJSPResultElement.setText("/showUserinfoList.jsp"); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter("ghy.xml"),format); writer.write(document); writer.close(); }catch (Exception e) { e.printStackTrace(); } } }
运行程序后,在当前项目中创建了名为ghy.xml的文件,文件内容如下:
二、Java的反射
反射技术可以对对象中的内容进行动态访问,在开发底层框架时经常使用到。创建测试用的实体类Userinfo.java,代码如下。
package com.xml.test; import java.util.Date; public class Userinfo { private int id; private String username; private String password; private int age; private Date insertDate; public Userinfo(int id,String username,String password,int age){ super(); this.id = id; this.username = username; this.password = password; this.age = age; } public Userinfo(){ super(); id=100; username = "DaveBobo"; password = "123456"; age = 20; insertDate = new Date(); } public Userinfo(int id,String username,String password,int age,Date insertDate){ super(); this.id = id; this.username = username; this.password = password; this.age = age; this.insertDate = insertDate; } public String printDate(){ System.out.println("调用了printDate()无参方法!"); return "DaveBobo"; } public int getId() { return id; } public void setId(int id) { this.id = id; } 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getInsertDate() { return insertDate; } public void setInsertDate(Date insertDate) { this.insertDate = insertDate; } }
创建运行类Run.Java的代码如下:
package com.reflect.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Run {
public static void main(String[] args) {
try{
//用3种方式获得Userinfo类的Class对象
Class<?>classRef1 = Class.forName("com.reflect.test.Userinfo");
Class<?>classRef2 = new Userinfo().getClass();
Class<?>classRef3 = Userinfo.class;
System.out.println("证明获取的类名称一模一样:"+classRef1.getName()+
"--"+classRef2.getName()+"--"+classRef3.getName());
//使用Class类的newInstance()方法实例化Userinfo对象
Class<?>classRef = Userinfo.class.getClassLoader().loadClass("com.reflect.test.Userinfo");
Userinfo userinfoRef = (Userinfo)classRef.newInstance();
System.out.println("使用Class类的newInstance()方法调用无参的构造函数产生的默认值:id="
+userinfoRef.getId()+"username="
+userinfoRef.getUsername()+"password="
+userinfoRef.getPassword()+"age="
+userinfoRef.getAge()+"insertDate="
+userinfoRef.getInsertDate());
//使用Constructor类的newInstance()方法实例化Userinfo对象
Constructor<?> constructorUserinfo1 = classRef.getDeclaredConstructor(null);
Userinfo userinfoRef1 = (Userinfo)constructorUserinfo1.newInstance(null);
System.out.println("使用Constructor类的newInstance()调用无参的构造函数产生的默认值:id="
+userinfoRef1.getId()+"username="
+userinfoRef1.getUsername()+"password="
+userinfoRef1.getUsername()+"age="
+userinfoRef1.getAge()+"insertDate="
+userinfoRef1.getInsertDate());
//使用Constructor类的newInstance()方法实例化Userinfo对象
Constructor<?> constructorUserinfo2 = classRef.getConstructor(
int.class,String.class,String.class,int.class);
Userinfo userinfoRef2 = (Userinfo)constructorUserinfo2.newInstance(10,"DaveBobo","123456",20);
System.out.println("使用Constructor类的newInstance()方法调用有参的构造函数产生的默认值:id="
+userinfoRef2.getId()+"username="
+userinfoRef2.getUsername()+"password="
+userinfoRef2.getPassword()+"age="
+userinfoRef2.getAge());
System.out.println("打印通过反射对属性进行赋值的password:"+userinfoRef2.getPassword());
//对无参方法进行反射调用
Method methodPrintDate = classRef.getDeclaredMethod("printDate");
System.out.println(methodPrintDate.invoke(userinfoRef));
}catch (Exception e) {
e.printStackTrace();
}
}
}
程序运行结果如下所示。
证明获取的类名称一模一样:com.reflect.test.Userinfo--com.reflect.test.Userinfo--com.reflect.test.Userinfo
使用Class类的newInstance()方法调用无参的构造函数产生的默认值:id=100username=DaveBobopassword=123456age=20insertDate=Sun Oct 23 21:45:24 CST 2016
使用Constructor类的newInstance()调用无参的构造函数产生的默认值:id=100username=DaveBobopassword=DaveBoboage=20insertDate=Sun Oct 23 21:45:25 CST 2016
使用Constructor类的newInstance()方法调用有参的构造函数产生的默认值:id=10username=DaveBobopassword=123456age=20
打印通过反射对属性进行赋值的password:123456
调用了printDate()无参方法!
DaveBobo
相关文章推荐
- Java基础知识_框架的概念以及用反射开发框架的原理
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java软件开发基础知识梳理之(2)------动态创建PreparedStatement解决SQL中带的in条件
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java服务器开发基础知识select、poll、epoll iocp, kqueue
- 初学者入门 JAVA 的 XML 编程实例解析-Java基础-Java-编程开发
- android 反射解析xml文件成为java对象
- 用XMLEncoder和XMLDecoder创建并解析XML文件Java实例
- 创建并解析XML文件Java实例
- Android和java创建xml文件和解析xml文件剖析
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识----反射
- 详细解析抽象类和接口的区别-Java基础-Java-编程开发
- 学习Spring必学的Java基础知识(1)----反射
- Java基础知识_反射
- Java服务器开发基础知识select、poll、epoll iocp, kqueue
- java反射基础知识
- SUN认证Java2程序员考试(SCJP)试题解析-Java基础-Java-编程开发
- 解析Java体系结构对信息安全的支持-Java基础-Java-编程开发