web.xml配置文件
* DOM4J解析XML
* 拿到cn.itcast.servlet.HelloServlet
* 就可以通过反射Class对象可以获得类中的属性和方法。
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
</servlet>
</web-app>
过程:
* 容器(服务器)启动。加载配置文件,读取配置文件,然后进行解析。拿到配置文件内容。通过反射创建实例,拿到类中方法。
* 加载.class文件。不能使用xxx.java文件。
代码
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class> </servlet> </web-app>
package cn.itcast.servlet; public class HelloServlet { public void run(){ System.out.println("正在跑..."); } }
import java.io.FileOutputStream; import java.lang.reflect.Method; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import cn.itcast.reflect.Person; /** * DOM4J的解析XML * @author Administrator * */ public class Dom4jTest { public static void main(String[] args) { try { run1(); } catch (Exception e) { e.printStackTrace(); } } /** * 对XPATH的支持 * @throws Exception */ public static void run1() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); // 解析XML Document document = reader.read("src/myweb.xml"); List<Node> list = document.selectNodes("//servlet-class"); Node packet = list.get(0); System.out.println(packet.getText()); Class clazz = Class.forName(packet.getText()); HelloServlet p = (HelloServlet) clazz.newInstance(); Method m = clazz.getDeclaredMethod("run"); m.invoke(p); } }
结果
cn.itcast.servlet.HelloServlet 正在跑...