servlet接口实现类

servlet概述

  • servlet规范来自与javaEE规范中的一种
  • 作用:
    • 在servlet规范中,指定【动态资源文件】的开发步骤
    • 在servlet规范中,指定http服务器调用动态资源文件规则
    • 在servlet规范中,指定http服务器管理动态资源文件实例对象规则

servlet接口实现类

  • servlet接口来自于servlet规范下的一个接口,这个接口存在于http服务器所提供的jar包中。

  • tomcat服务器下 lib文件夹中有一个叫做servlet-api.jar 用于存放servlet接口(javax.servlet.servlet)

  • servlet规范中认为,http服务器能调用的【动态资源文件】必须是一个servlet接口实现类

  • 例子:

    class Student(){
          
          
    //不是动态资源文件,tomcat无权调用
    }
    
    class Teacher implements Servlet(){
          
          
    //这是一个合法的动态资源文件,tomcat有权调动他
      servlet obj = new TEacher();
      obj.doget();
      }
    

servlet接口实现类开发步骤

  • 只有作为servlet接口的实现类,才有资格作为动态资源文件
  • servlet接口由http服务器厂商负责提供
  • tomcat/lib/servlet-api.jar servlet接口来自于这个包

第一步:

创建一个java类,继承HttpServlet父类(抽象类)。使之成为一个Servlet接口实现类。

Oneservlet extends HttpServlet implements Servlet

servlet接口中的init getservletconfig getservletinfo destroy这四个方法对于servlet接口实现类没用。

只有service()方法是有用的。

tomcat根据servlet规范调用servlet接口实现类规则:

  1. tomcat有权创建servlet接口实现类实例对象

servlet oneservlet = new oneservlet();

  1. tomcat根据实例对象调用service方法处理当前请求

oneservlet.service()

子父类的关系

oneservlet继承----->(abstract)httpservlet继承----->(abstract)Genericservlet 实现------->servlet接口

servlet接口中的init getservletconfig getservletinfo destroy这四个方法都在Genericservlet实现。service()方法在Genericservlet类中依旧是抽象方法

service()在oneservlet中实现

第二步:

重写httpservlet父类的两个方法,doGet或者doPost

根据浏览器发送的请求方式,重写父类中doget或者dopost方法来处理请求。

浏览器以get方式发送请求------------->onservlet.doget()

浏览器以post方式发送请求------------->oneservlet.dopost()

doget和dopost的调用,是通过httpservlet类中重写过的service()方法来调用的。httpservlet类中的this代表的是oneservlet类

image-20210211014607105

通过父类决定在何种情况下调用子类中的方法,【设计模式】----模板设计模式

httpservlet类:
service(){
		if(请求方式==post){
		this.dopost();
		}else if(请求方式==GET){
			this.doGet();
		}
}
onservlet类:
doGet  doPost

补充:this的指向问题

this指向的是调用service方法的实例对象。

因为是oneservlet.service(),所以,service中的this.doGet中的this,指的是oneservlet,执行的方法是oneservlet中重写后的doGet方法。

如果oneservlet中没有重写doGet方法,则oneservlet.service()中的this.doGet执行的才是父类的doGet

第三步:

将servlet接口实现类信息【注册】(通知)到tomcat服务器

到网站的核心配置文件(web.xml)向tomcat注册动态资源文件

【网站文件】—【web】—【web-inf】—【web.xml】

image-20210211022845648

将servlet接口实现类类路径地址交给tomcat

<servlet>
<servlet-name>name</servlet-name> <!-- 声明一个变量储存servlet接口实现类的路径-->
<servlet-class>com.test.controller.Oneservlet</servlet-class> <!-- 声明servlet接口实现类的路径-->  
</servlet>

Tomcat:

String name = “com.test.controller.Oneservlet”;

为了降低用户访问访问servlet接口实现类的难度,需要设置简短请求别名

<servlet-mapping>
<servlet-name>name</servlet-name>
<url-pattern>/one</url-pattern><!--在此设置简短的请求别名。书写时以‘/’开头-->
</servlet-mapping>

如果现在浏览器向tomcat服务器索要oneservlet地址时,写成

http://localhost:8080/myweb/one

猜你喜欢

转载自blog.csdn.net/weixin_43903813/article/details/113798050