实现思路:
/*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文档:
<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>