Servlet基础
1>Servlet规范
1、Servlet规范来自于JAVAEE规范中的一种
2、作用:
~~~~
1) 在Servlet规范中,指定《动态资源文件》开发步骤。
~~~~
2) 在Servlet规范中,指定Http服务器调用动态资源文件规则。
~~~~
3) 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则。
宏观地说,Servlet是连接Web服务器与服务器Java程序的协议,是一种通信规范。这个规范是以一套接口的形式体现的。
- 通常来说,Servlet是宏观上Servlet规范中的一个具体的接口,Servlet规范中包含一套接口。而Servlet接口仅仅是其中之一。
- 微观地说,Servlet是Servlet接口实现类的一个实例对象,是运行在服务器上的一段Java小程序,即Server Applet,也就是Servlet这个单词的来历。Servlet的主要功能是根据客户端提交的请求,调用服务器端相关Java代码,完成对请求的处理与运算。
2>Servlet接口实现类
- 1、Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器提供jar包
- 2、Tomcat服务器下lib文件有一个servlet-api.jar包存放在Servlet接口(javax.servlet.ServletJIEKOU1)
- 3、Servlet规范中任务,Http服务器能调用的<动态资源文件>必须是一个Servlet接口实现类。
例子:
class student{
//不是动态资源文件,Tomcat无权调用
}
class Teacher implements Servlet{
//合法动态资源文件,Tomcat有权调用
Servlet obj = new Teacher();
obj.doGet();
}
3>Tomcat根据Servlet规范调用Servlet接口实现类规则
1、Tomcat有权创建Servlet接口实现类实例对象
Servlet oneServlet = new OneServlet();
2、Tomcat根据实例对象调用service()方法处理当前请求
oneServlet.service();
4> Servlet接口抽象类开发步骤
1、创建一个Java类继承于HttpServlet父类,使之成为一个Servlet接口实现类。
public class OneServlet extends HttpServlet{...}
2、重写HttpServlet父类两个方法。doGet或者doPost方法。
3、将Servlet接口实现类信息注册到Tomcat服务器。
get
浏览器--------》oneServlet.doGet();
post
浏览器--------》oneServlet.doPost();
4.1、为什么继承了HttpServlet类就成为了Servlet实现类?
鼠标中键点击HttpServlet进入观看源码
再继续看GenericServlet的源码
发现爷类实现了Servlet。
子类—》父类—》A接口
此时子类也是A接口的实现类。
4.2、为什么不直接实现Servlet接口?
简化开发的难度,降低实现接口的难度。
抽象类的作用:降低接口实现类对接口实现过程难度,将接口中不需要使用抽象方法交给抽象类进行完成,这样接口实现类只需要对接口需要方法进行重写。
如果要实现Servlet接口,需要重写如上五个方法,而实际上,我们只需要service()这个方法。
servlet接口:init、getServletConfig、getServletInfo、destroy------四个方法对于Servlet接口实现类没用。
4.3、为什么要复写doGet、doPost方法?
1、浏览器有七种请求方式,所以实际上可以复写的有七个方法,但目前仅考虑doGet和doPost方法。
2、Tomcat可以调用实例对象的service()方法,而这个service()方法继承自HttpServlet抽象类中,而在HttpServlet类中service()方法需要使用到doGet()与doPost方法。
3、通过父类决定在何种情况下调动子类中方法在设计模式中叫做模板设计模式。
4.4、如何注册?
在WEB-INF中的web.xml文件中 如下输入
<!-->servlet接口实现类路径地址交给Tomcat-->
<servlet>
<servlet-name>mm</servlet-name>
<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class>
</servlet>
<!--为servlet接口实现类提供简短别名-->
<servlet-mapping>
<servlet-name>mm</servlet-name>
<url-pattern>/some</url-pattern>
</servlet-mapping>