0
点赞
收藏
分享

微信扫一扫

反射&&xml

余寿 2022-08-24 阅读 78


模拟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();
}
}
}


举报

相关推荐

0 条评论