ServletDemo


Servlet的实例 实现思路是:

定义一个解析XML的Servlet功能实例

主要是实现Servlet中的基本功能

1 首先是建立一个Servlet接口 定义三个功能 主要是定义 init() service() destory() 功能

package com.itheima.servletdemo;

/*
 * 这个是一个模拟servlet接口
 *
 **/
public interface Servlet {

	void init();
	void service();
	void destory();
	
}


2 其次建立一个ServletOne实例

用于实现Serlet接口中的抽象方法

package com.itheima.servletdemo.servlet;

import com.itheima.servletdemo.Servlet;


public class ServletOne implements Servlet{

	@Override
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("Servlet:inti");
	}

	@Override
	public void service() {
		// TODO Auto-generated method stub
		System.out.println("Servlet:service");
	}

	@Override
	public void destory() {
		// TODO Auto-generated method stub
		System.out.println("Servlet:destory");
	}

}

定义另外一个实例 servletTow

package com.itheima.servletdemo.servlet;

import com.itheima.servletdemo.Servlet;

public class ServletTow implements Servlet {

	@Override
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("ServletTow.init()");
	}

	@Override
	public void service() {
		// TODO Auto-generated method stub
		System.out.println("ServletTow.service()");
	}

	@Override
	public void destory() {
		// TODO Auto-generated method stub
		System.out.println("ServletTow.destory()");
	}

}

3 写一个用于配置servlet的XML文件web.xml


<?xml version="1.0" encoding="UTF-8"?>
<wab-app>
	<servlet>
		<servlet-name>Server1</servlet-name>
		<servlet-class>com.itheima.servletdemo.servlet.ServletOne</servlet-class>
	</servlet>
	
	<servlet>
		<servlet-name>Server2</servlet-name>
		<servlet-class>com.itheima.servletdemo.servlet.ServletTow</servlet-class>
	</servlet>
</wab-app>

4 由于对XML的解析需要用到DOM4J技术 所以我们建立lib文件夹 用于导入dom4j-1.6.1.jar包 然后通过导入到类中


5 建立一个main类接口 

其中为了简便 我们将对xml的解析和对函数的调用直接定义到main主函数中


package com.itheima.servletdemo;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MainClass {
	public static <SAReader> void main(String[] args) throws Exception {
		// 解析web.xml xml文件 从文件中 读取servlet-class
		// 1.获得document对象
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("web.xml"));
		
		
		// 2 获得根元素对象
		Element rootElement = document.getRootElement();

		// 3 获得所有的servlet元素
		List elements = rootElement.elements();
		

		// 遍历servlet元素集合
		for (int i = 0; i < elements.size(); i++) {
			Element servletElement = (Element) elements.get(i);// 获得所有的element并将获得的element强转Element类
			// 获取servlet元素中的所有的子元素合集
			List childElement = servletElement.elements();

			// 获得每一个子元素 如servlet name 、servlet class
			for (int j = 0; j < childElement.size(); j++) {
				Element child = (Element) childElement.get(j);
				//System.out.println(child);
				// 做一个判断 如果字元素是我们想要的那么就运行className
				if ("servlet-class".equals(child.getName())){
					String className = child.getText();
					//System.out.println(className);
					runServlet(className);
				}

			}

		}

	}

		private static void runServlet(String className) throws Exception {

		// 采用反射的方式获取Servlet类 并执行serlet中方法
		@SuppressWarnings("unchecked")
		Class<Servlet> clazz = (Class<Servlet>) Class.forName(className);

		Servlet servlet = clazz.newInstance();/*
											 * ////字节码文件.newInstance
											 * 可以直接new出调用的字节码对象从而直接使用字节码对象中的方法和实例
											 * 
											 * 可以调用获得的方法时要用到上面相同类型的实例对象
											 * 
											 * 通过Class类中的newInstance()方法也可创建类的实例,
											 * 其内部工作原理是先得无参的构造方法,再用构造方法创建实例对象。
											 
*/
		// 下面的方法 会在合适的时候去执行
		//System.out.println(servlet);
		servlet.init();
		servlet.service();
		servlet.destory();
	}
}

运行结果如下:


ServletOne---:---inti
ServletOne---:---service
ServletOne---:---destory
ServletTow.init()
ServletTow.service()
ServletTow.destory()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值