【手写Tomcat】7.实现MyServlet

导读:本篇文章讲解 【手写Tomcat】7.实现MyServlet,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        这次,我们要完成的功能是实现我们自己定义的MyServlet。废话不多说,直接开始。

        为了大家好理解,我们先把类的关系继承图展现出来,然后按照这个图来一步一步实现。

【手写Tomcat】7.实现MyServlet


        上面就是我们的具体的类图,我们首先在MyServlet中定义方法。我们参照原生的Servlet来写,下面是Servlet的源码。

【手写Tomcat】7.实现MyServlet

         我们不用写5个方法,我们写3个常用的就行了。我们定义init,service,destroy方法。核心代码如下

    public void init();

    public void service(MyHttpRequest request, MyHttpResponse response);

    public void destroy();

        编写了接口以后,我们在MyHttpSetvlet抽象类中对这些方法进行编写,我们都知道,在原生的HttpServlet中,HttpServlet对service方法通过请求方法的不同来调用不同方法。我们还是来看一部分service方法的源码。源码如下

【手写Tomcat】7.实现MyServlet

         发现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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74879.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!