XML解析结合反射

实现思路:

/*1.解析Xml文档

  • 2.获取控制台输入的值
  • 3.找控制台匹配的serverlet-name的值
  • 4.找到se到和rverlet中匹配好的serverlet-name,通过这个找到server-class
  • 5.找到类名,之后通过反射运行类

*/
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Scanner;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestXML {
public static void main(String[] args) throws Exception {

	while(true) {
		System.out.println("请输入路径:");
		Scanner sc=new Scanner(System.in);
		
		String patt=sc.next();

// 解析xml文档
Document doc=new SAXReader().read(“src/web.xml”);

// 获取根节点
Element root=doc.getRootElement();
// System.out.println(root);
// ,找出所有servlet-mapping
Iterator it=root.elementIterator(“servlet-mapping”);
String name="";
while(it.hasNext()) {
// 获取serverlet-mapping
Element el=it.next();
// 获取子节点url-pattern
String url=el.elementText(“url-pattern”);
if(patt.equals(url)) {
name=el.elementText(“servlet-name”);
}
// System.out.println(name+"…");

		}

// 获得servlet
Iterator its= root.elementIterator(“servlet”);
String classname=" “;
String methodValue=”";
while(its.hasNext()) {
Element el=its.next();
// 获得servlet-name
String sname=el.elementText(“servlet-name”);
if(sname.equals(name)) {
// 获取servlet-class
classname=el.elementText(“servlet-class”);
// 获取servlet-class上的方法
methodValue= el.element(“servlet-class”).attributeValue(“method”);
}
// System.out.println(classname);
}

// 反射
Class<?> clazz = Class.forName(classname);

		Object obj=clazz.newInstance();

// 调用service
Method method=clazz.getMethod(methodValue);
method.invoke(obj);
}
}
}``

测试类:
package com.newer.demo6;

public class UserControll {

//
// public void service() {
// System.out.println(“UserControll--------service”);
// }

public void z() {
	System.out.println("执行z方法---------");
}

}

注意:XML有严格的格式
XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<servlet>
		<servlet-name>b</servlet-name>
		<servlet-class method="z">com.newer.demo6.UserControll</servlet-class>
</servlet>
<servlet-mapping>
		<servlet-name>b</servlet-name>
		<url-pattern>/login</url-pattern>
</servlet-mapping>
发布了12 篇原创文章 · 获赞 1 · 访问量 197

猜你喜欢

转载自blog.csdn.net/weixin_44364444/article/details/103898816