1.Servlet规范介绍
当Http服务器接收请求后,如何知道调用哪些java类来处理请求呢? 有些类可能就是用来封装变量的,有些类才是用来处理请求的。为了识别出那些具有处理请求的类,定义了一个接口,这个接口就叫Servlet接口,如果想要让业务类具备处理请求的能力,都必须实现这个接口,实现了接口的业务类叫做Servlet。对于特定的请求,Http服务器如何知道由哪个Servlet来处理?Servlet又是由谁来实例化呢? 于是又有了Servlet容器。Http服务器把请求交给Servlet容器去处理,Servlet容器会将请求转发到具体的Servlet,如果这个Servlet还没创建,就加载并实例化这个Servlet,然后调用这个Servlet的接口方法。Servlet接口其实是Servlet容器和具体业务类之间的接口: Http服务器不直接调用业务类,而是把请求交给容器来处理,容器通过Servlet接口调用业务类。因此Servlet接口和Servlet容器的出现,使Http服务器和业务类解耦。
1.1.servlet规范来自于JavaEE规范中的一种
Servlet规范:Servlet接口 + Servlet容器。Tomcat按照Servlet规范的要求实现了Servlet容器,同时它也具有Http服务器的功能。(如果我们要实现新的业务功能,只需要实现一个Servlet,然后把它注册到Tomcat(Servlet容器)中,剩下的事情由Tomcat帮我们来处理)。
1.2.作用:
1)在Servlet规范中,指定【动态资源文件】开发步骤 2)在… … … …中,指定Http服务器调用【动态资源文件】规则 3)在… … … …中,指定Http服务器管理【动态资源文件】实例对象规则
2.Servlet接口实现类
2.1.Servlet接口来自于Servlet规范下的一个接口,这个接口在Http服务器提供jar包。2.2.Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet)2.3.Servlet规范中,Http服务器能调用的【动态资源文件】必须是Servlet接口实现类 例子:1、不是动态资源文件,Tomcat无权调用 class Student{
//不是动态资源文件,Tomcat无权调用
}
2、合法动态资源文件,Tomcat有权利调用
class Teacher implements Servlet{
Servlet obj = new Teacher()
obj.doGet();
}
3.Servlet接口实现类开发步骤
1.创建一个Java类继承HttpServlet父类,使之成为1个Servlet接口实现类
2.重写HttpServlet父类两个方法。doGet()或doPost() get 浏览器----> oneServlet.doGet() post 浏览器----> oneServlet.doPost()
3.将Servlet接口实现类信息注册到Tomcat服务器 【网站】----> 【web】 ----> 【web-inf】----> web.xml
<!------将Servlet接口实现类,类路径地址交给Tomcat-------->
<servlet>
<servlet-name>mm<servlet-name> <!------声明1个变量,存储servlet接口实现类类路径-------->
<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class><!--声明servlet接口实现类类路径-->
</servlet>
<!--Tomcat String mm = "com.bjpowernode.controller.OneServlet"-->
<!--为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名-->
<servlet-mapping>
<servlet-name>mm</servlet-name>
<url-pattern>/one</url-pattern> <!--设置简短请求别名,别名在书写时必须以"/"为开头-->
</servlet-mapping>
如果现在浏览器向Tomcat索要OneServlet时地址 http://localhost:8080/myWeb/one
4.Servlet对象生命周期
1.网站中所有Servlet接口实现类的实例对象,只能由Http服务器负责创建 开发人员不能手动创建Servlet接口实现类的实例对象
2.默认情况下,Http服务器接收到对于当前Servlet接口实现类第1次请求时,自动创建Servlet接口实现类的实例对象。
在手动配置情况下,要求Http服务器在启动时自动创建某个Servlet接口实现类的实例对象。
<servlet>
<servlet-name>mm</servlet-name> <!--声明一个变量,存储servlet接口实现类类路径-->
<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class>
<load-on-startup>30<load-on-startup><!--填写一个大于0的整数即可-->
</servlet>
3.在Http服务器运行期间,1个Servlet接口实现类只能被创建出1个实例对象
4.在Http服务器关闭时刻,自动将网站中所有Servlet对象进行销毁。
5.HttpServletResponse接口
5.1.介绍:
1.HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar2.HttpServletResponse接口实现类由Http服务器负责提供3.HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】4.开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】
5.2.主要功能
1.将执行结果以二进制形式写入【响应体】2.设置响应头中【content-type】属性值, 从而控制浏览器使用对应编译器将响应二进制数据编译为【文字、图片、视频、命令】3.设置响应头中【location】属性, 将一个请求地址赋值给location,从而控制浏览器向特定服务器发送请求。
6.HttpServletRequest接口
1.HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar2.…………………………实现类由Http服务器负责提供3.…………………………负责在doGet/doPost方法运行时读取Http请求协议包中信息4.开发人员习惯于将………………修饰的对象称为【请求对象】
作用:
1.可以读取Http请求协议包中【请求行】信息2.可以读取保存在Http请求协议包中【请求头】或则【请求体】中请求参数信息3.可以代替浏览器向Http服务器申请资源文件调用
7.请求对象和响应对象生命周期
1.在Http服务器接收到浏览器发送的【Http请求协议包】之后, 生成一个【请求对象】和一个响应对象2.在Http服务器调用doGet/doPost方法时,负责将【请求对象】和【响应对象】 作为实参传递到方法,确保doGet/doPost正确执行3.在Http服务器准备推送Http响应协议包之前, 负责将本次请求关联的【请求对象】和【响应对象】销毁
【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程中 【请求对象】和【响应对象】相当于用户在服务端的代言人