JAVAEE_Servlet_02_Servlet接口实现类HttpServlet
Servlet接口实现类
* Servlet接口: Servlet接口是来自于Servlet规范下的一个接口,存在于HTTP服务器(Tomcat)所提供的jar包中。Servlet-api.jar。
* Servlet-api.jar 该jar包在 Tomcat服务器目录下的lib文件夹下的一个jar包。该jar包中存放了Servlet接口。(javax.servlet.Servlet).
* 在Servlet规范中,规定了Http服务器能调用的【动态资源文件】,必须是一个Servlet接口的实现类。(实现了Servlet接口的类就是一个动态资源文件)
- 例如:
class Student{
//不是一个动态资源文件,没有实现Servlet接口,所以 Servlet无权到调用该类。
}
class Student implements Servlet{
//实现了Servlet接口,属于合法的动态资源文件, Servlet有权调用
Servlet object= new Student();
object.doGet();
}
* Servlet接口实现类开发步骤
- 第一步:创建一个类继承HttpServlet父类,使之成为一个Servlet接口实现类。 oneServlet(HttpServlet实现类)---继承--->HttpServlet(abstract)---继承--->GenericServlet(abstract)---实现---> Servlet接口
- 第二步:重写HttpServlet父类中的两个方法 doGet() 和 doPost()。
- 如果浏览器以---get--> 发送请求给Servlet,那面Servlet就会调用doGet()方法来处理
- 如果浏览器以---post--> 发送请求给Servlet,那面Servlet就会调用doPost()方法来处理
- 第三步:将Servlet接口实现类的信息【注册】到Tomcat服务器中。
-【网站项目】---> web文件夹---> WEB-INF文件夹 ---> web.xml文件 将当前Servlet接口实现类的信息写到该文件中,就相当于完成了【注册】
- 需要在 web.xml 文件中写的内容:
<servlet>
<servlet-name>pathName</servlet-name> <!-- 创建一个变量来存储Servlet类路径 (变量命随意但是要和 <servlet-mapping> 中的<servlet-name> 保持一致)-->
<servlet-class>com.shige.controller.oneServlet</servlet-class> <!-- 声明Servlet接口实现类的类路径:包名+类名 --> Tomcat会声明一个变量 String pathName="com.shige.controller.oneServlet ";
</servlet>
<servlet-mapping> <!-- 由于Servlet接口实现类的路径都比较长(包名+类名),为了更方便访问Servlet接口实现类,所以要给该实现类起一个简单的别名,从而更方便访问-->
<servlet-name>pathName</servlet-name> <!--给Tomcat服务器中虚拟路径名为pathName的路径起别名 -->
<url-pattern>/simple</url-pattern> <!--设置别名,别名必须以 / 开头-->
</servlet-mapping>
- 如果浏览器向Tomcat服务器请求oneServlet实现类时,地址是: http://local:8080/网站名/simple
- 第四步: 将WEB项目部署到Tomcat服务器上,run---->Edit Configurations----->选择Tomcat服务器---->Deplyment 选择要部署的WEB项目----->Application context 定义浏览器访问时的项目名----->ok
* 抽象类的作用:简化接口实现类对接口实现过程中的难度。将接口中不需要实现的抽象方法,交给该抽象父类去完成,这样最后一层继承抽象父类的实现类只需要去实现所需要的方法就可以了。
* 在 Servlet 接口中有五个方法 : init(), getServletConfig(), service(), getServletInfo(), destroy(). 在这五个方法中,目前只需要servic()方法。所以如果直接实现Servlet接口,那么就必须同时重写这五个方法。
* Servlet接口中各方法的使用?
1.无参数构造方法 实例化Servlet实现类对象,创建实例对象。
2.init方法
- 1,2方法执行时间几乎相同,执行次数都是一次,构造方法执行的时候Servlet对象之正在创建,而init方法执行时Servlet方法已经创建,若系统要求在对象创建时刻执行一段特殊程序,这段程序尽量写在init方法中。
- 为什么不建议将代码写在构造方法中呢?
> 因为存在风险,当程序员编写构造方法的时候,可能会导致无参构造方法失效。(因为当一个类中不编写任何构造函数的时候,默认有一个无参数构造方法,但一旦编写一个有参数构造方法的时候,系统则不再提供无参数构造).
> init方法是sun公司为程序员提供的一个初始化时刻,若希望程序在初始化时刻执行一段特殊的程序,该程序可以编写到init方法中,将来会被自动调用。
3.service方法
- service方法是必然要重写的,因为这个方法需要完成业务逻辑处理,请求的处理以及响应。
4.destroy方法
- 这个方法也是为SUN公司为java程序提供的一个特殊时刻,这个特殊时刻被称为对象销毁时刻,若希望在销毁时刻执行一段特殊的代码,需要将该段代码写在destory方法中,自动被程序调用。
5.回顾
1.类加载时刻执行代码写到静态代码块中。
* Service()方法为什么有用:
- service()用来获取浏览器的请求方式,判断浏览器发过来的请求方式的类型。从而决定用哪种方法去处理浏览器的请求。
- Tomcat 根据Servlet规范调用Servlet接口实现类规则:
1. Tomcat有权创建Servlet接口实现类对象 Servlet oneServlet = new oneServlet();
2. Tomcat通过实例对象调用HttpServlet 抽象类中的service方法处理当前请求 oneServlet.service()
3. 因为在HttpServlet父类中已经重写了service方法,在该方法中决定了什么时候调用doGet()方法,什么时候调用doPost()方法。(而这种通过父类决定在何种情况下调用子类方法的作法,在设计模式中称为 模板设计模式)
例如:HttpServlet 中的 service()方法
public void service(){ // HttpServlet service()方法, 在service方法中出现的this,指的是调用service方法的实例对象,哪个实例对象调用service方法,this就指哪个子类
if(浏览器请求方式==Get){
this.doGet(); //oneServlet.service() 此时 this---> oneServlet, 因为子类中重写了doGet()方法,所以son.doGet()调用的是子类中重写的doGet()方法,而不是HttpServlet中的doGet()。
}else if(浏览器请求方式==Post){
this.doPost();
}
}
oneServlet doGet() do Post()
Servlet oneServlet = new oneServlet()
oneServlet.service();
JAVAEE_Servlet_02_Servlet接口实现类HttpServlet的更多相关文章
- servlet接口实现类HttpServlet以及开发中一些细节
1. 但是eclipse不会帮我们改web.xml配置文件,所以我们也要在web.xml文件里面手动改 2. 这个样子的话你在用浏览器访问的时候链接的映射就改成了t_day05,这个主要用于你建立完一 ...
- Servlet API遍程常用接口和类
本文主要总结Servlet API遍程常用接口和类 Servlet API http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html ...
- Servlet基础之一:Servlet基本接口与类
1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.a ...
- javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)
Servlet总结01——servlet的主要接口.类 (一)servlet类 Servlet主要类.接口的结构如下图所示: 要编写一个Servlet需要实现javax.servlet.Servlet ...
- Servlet常用的接口和类
使用接口和类的作用:Servlet也是依靠继承父类和实现接口来实现的.使用Servlet必须要引入两个包:javax.servlet和javax.servlet.http.所有的Servlet应用都是 ...
- Servlet基本用法(二)接口和类
一.摘要 本文主要简单介绍开发Servlet需要用到的接口和类. 二.ServletRequest和ServletResponse接口 当客户请求到来时,由容器创建一个ServletRequest对象 ...
- Servlet基本用法二接口和类
转自:http://www.cnblogs.com/xujian2014/p/4536168.html 一.摘要 本文主要简单介绍开发Servlet需要用到的接口和类. 二.ServletReques ...
- JavaWeb学习——Servlet相关的接口和类
JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...
- Myeclipse中打开接口实现类的快捷键
Myeclipse中打开接口实现类的快捷键-----Ctrl + T Myeclipse中 Open Type快捷键-----Ctrl + Shift + T
随机推荐
- 1102 Invert a Binary Tree——PAT甲级真题
1102 Invert a Binary Tree The following is from Max Howell @twitter: Google: 90% of our engineers us ...
- Oracle VM VirtualBox安装CentOS7
安装VirtualBox6.0 下载地址:https://www.virtualbox.org/ 新建虚拟机 类型:Linux 版本:Other Linux(64-bit)----如果没有出现64-b ...
- linux 查询登陆成功、失败的用户
查询登陆成功的用户: last 单独执行last指令时,它会读取位于/var/log/wtmp的文件,并把该给文件的内容记录的登录系统的用户名单全部显示出来. 如果使用tail.cat命令查看这文件, ...
- KMP(超详细复杂度分析)
从 stackoverflow中找到了一个时间复杂度分析很棒的链接 https://www.inf.hs-flensburg.de/lang/algorithmen/pattern/kmpen.htm ...
- linux_MYSQL 数据库自动备份并压缩和删除历史备份
1. 创建shell脚本 #! /bin/bash# MySQL用户user="root"# MySQL密码userPWD="123456789"# 需要定时备 ...
- JS的this指向深入
this指向深入 this的绑定规则 默认绑定 this默认指向了window 全局环境下this指向了window 函数独立调用,函数内部的this也指向了window <script> ...
- IDEA修改jar包中class文件后重新生成jar包
一.背景 最新想要修改rebeyond大佬的冰蝎项目,特地去网上搜索如何修改jar包中的源码再替换回去的方法,但由于现在的一些文章写的太烂,导致走了很多弯路,因此写下这篇快速使用IDEA修改源码并替换 ...
- P1962 斐波那契数列 【矩阵快速幂】
一.题目 P1962 斐波那契数列 二.分析 比较基础的递推式转换为矩阵递推,这里因为$n$会超出$int$类型,所以需要用矩阵快速幂加快递推. 三.AC代码 1 #include <bits/ ...
- incubator-dolphinscheduler 如何在不写任何新代码的情况下,能快速接入到prometheus和grafana中进行监控
一.prometheus和grafana 简介 prometheus是由谷歌研发的一款开源的监控软件,目前已经贡献给了apache 基金会托管. 监控通常分为白盒监控和黑盒监控之分. 白盒监控:通过监 ...
- MySQL中where和on,where和having 的区别
where和on的区别 用到连接查询时on会常用到,我们以左连接为例,来了解on的作用. on是在生成临时表使用的条件,不管on子句的条件是否为真,其都会返回左表的数据,如果条件为真则右表对应的数据也 ...