这次,我们要完成的功能是实现我们自己定义的MyServlet。废话不多说,直接开始。
为了大家好理解,我们先把类的关系继承图展现出来,然后按照这个图来一步一步实现。
上面就是我们的具体的类图,我们首先在MyServlet中定义方法。我们参照原生的Servlet来写,下面是Servlet的源码。
我们不用写5个方法,我们写3个常用的就行了。我们定义init,service,destroy方法。核心代码如下
public void init();
public void service(MyHttpRequest request, MyHttpResponse response);
public void destroy();
编写了接口以后,我们在MyHttpSetvlet抽象类中对这些方法进行编写,我们都知道,在原生的HttpServlet中,HttpServlet对service方法通过请求方法的不同来调用不同方法。我们还是来看一部分service方法的源码。源码如下
发现service确实是根据不同的请求方法来调用不同方法的,我们也像这样来实现,但是我们肯定要做简化,我们就实现get和post这2种方法即可。代码十分简单,就不多说了,核心代码如下
@Override
public void init() {
System.out.println(getClass().getName()+"调用init方法");
}
@Override
public void service(MyHttpRequest request, MyHttpResponse response) {
if ("GET".equalsIgnoreCase(request.getMethod())){
doGet(request,response);
}else if ("POST".equalsIgnoreCase(request.getMethod())){
doPost(request,response);
}else {
System.out.println("其他方法不做处理");
}
}
public abstract void doGet(MyHttpRequest request, MyHttpResponse response);
public abstract void doPost(MyHttpRequest request, MyHttpResponse response);
@Override
public void destroy() {
System.out.println(getClass().getName()+"被销毁了");
}
从上面代码中,我们可以知道继承了MyHttpServlet的类必须要实现doGet和doPost方法,下面,我们就编写2个简单的类分别是MyDogServlet,MyCatServlet类来继承MyHttpServlet,并且实现这2个方法。
这2个类我们后面用来做测试用。代码十分简单,完整代码如下
import com.clucky.myTomcat.myHttp.MyHttpRequest;
import com.clucky.myTomcat.myHttp.MyHttpResponse;
public class MyDogServlet extends MyHttpServlet{
@Override
public void doGet(MyHttpRequest request, MyHttpResponse response) {
response.write("<h1>我是dog</h1>");
}
@Override
public void doPost(MyHttpRequest request, MyHttpResponse response) {
this.doGet(request,response);
}
}
import com.clucky.myTomcat.myHttp.MyHttpRequest;
import com.clucky.myTomcat.myHttp.MyHttpResponse;
public class MyCatServlet extends MyHttpServlet{
@Override
public void doGet(MyHttpRequest request, MyHttpResponse response) {
response.write("<h1>我是cat</h1>");
}
@Override
public void doPost(MyHttpRequest request, MyHttpResponse response) {
this.doGet(request,response);
}
}
到此,其实我们关于自己定义的Servlet的部分就写完了,但是由于Servlet是通过反射来进行创建的,所有这次我们就不测试了,当然,代码是肯定没有问题的。我们在下一篇文章中将自定义xml元素,通过xml文件模拟tomcat中的web.xml那样进行配置。并通过程序来读取xml文件。
如果对xml不是很了解,请参考xml介绍,xml语法,xml元素,如果不清楚java如何读取xml,请参考java读取xml。