【手写Tomcat】7.实现MyServlet
  TEZNKK3IfmPf 2023年11月12日 16 0

        这次,我们要完成的功能是实现我们自己定义的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。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   30   0   0 服务器
  TEZNKK3IfmPf   2024年05月31日   52   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   30   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   43   0   0 服务器java
  TEZNKK3IfmPf   2024年05月31日   37   0   0 服务器http
TEZNKK3IfmPf