模拟Servlet
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>xml.dom4j.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
IServlet接口
package xml.dom4j;
public interface IServlet {
public void init();
public void service();
public void destory();
}
MyServlet类
package xml.dom4j;
public class MyServlet implements IServlet {
@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("myServlet初始化!");
}
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("myServlet开始服务!");
}
@Override
public void destory() {
// TODO Auto-generated method stub
System.out.println("myServlet销毁了!");
}
}
TestMyServlet类
package xml.dom4j;
import java.lang.reflect.Method;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
public class TestMyServlet {
@Test
public void TestServlet() {
try {
SAXReader sr = new SAXReader();
Document doc = sr.read("src/xml/dom4j/web.xml");
Element rootElement = doc.getRootElement();
String className = rootElement.element("servlet").element("servlet-class").getText();
// System.out.println(className);
// 根据名称获取其对应的字节码文件对象
Class clazz = Class.forName(className);
MyServlet ms = (MyServlet) clazz.newInstance();
// 直接调用
// ms.init();
// ms.service();
// ms.destory();
/*
* 调用字节码文件对象的方法getMethod获取class对象所表示的类的公共成员方法(指定方法),
* 参数为方法名和当前方法的参数,无需创建对象,它是静态方法
*
* 调用class对象所表示的类的公共成员方法,需要指定对象和方法中的参数列表
*/
Method method1 = clazz.getMethod("init", null);
Method method2 = clazz.getMethod("service", null);
Method method3 = clazz.getMethod("destory", null);
method1.invoke(ms, null);
method2.invoke(ms, null);
method3.invoke(ms, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}