Servlet
一、servlet规范介绍
1. servlet规范属于javaEE规范中的一种
2. servlet的作用
- 指定【动态资源文件】开发步骤
- 指定http服务器调用动态资源文件规则
- 指定http服务器管理动态资源文件实例对象规则
二、servlet接口实现类
1. Servlet接口来自Servlet规范下的一个接口,这个接口存在于http服务器提供的jar包中
2. Tomcat服务器下lib文件中有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet接口)
3. 在Servlet规范中认为,http服务器能调用的【动态资源文件】必须是一个Servlet接口的实现类
三、servlet接口实现类开发步骤
抽象类的作用:降低接口实现过程的难度,将接口中不需要使用的抽象方法交给抽象类进行完成,这样接口实现类就只需要对接口需要的方法进行重写
第一步:创建一个Java类继承HttpServlet,使之成为Servlet实现类
第二步:重写HTTPServlet中doGet和doPost方法
浏览器使用get方式请求--->oneServlet调用doGet
浏览器使用post方式请求--->oneServlet调用doPost
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class OneServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet方法被调用 ");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost方法被调用");
}
}
第三步:将Servlet接口实现类信息【注册】到Tomcat服务器
需要在web.xml中编写
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--servlet实现类路径地址告诉Tomcat,servlet-name中是一个变量名可以随意-->
<servlet>
<servlet-name>oneServlet</servlet-name>
<servlet-class>com.xuehaiwuya.controller.OneServlet</servlet-class>
</servlet>
<!--为servlet实现类提供一个简单的别名-->
<servlet-mapping>
<servlet-name>oneServlet</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
</web-app>
四、Servlet对象生命周期
- 网站中所有接口实现类的实例对象,只能由http服务器负责创建,开发人员不能手动创建实现类的实例对象
- 在默认情况下,http服务器接收到对于当前Servlet接口实现类的第一次请求时会自动创建这个Servlet接口实现类的实例对象
在手动配置的情况下,可以要求http服务器在启动时自动创建某个Servlet接口实现类的实例对象
<servlet>
<servlet-name>oneServlet</servlet-name> <!--声明一个变量用来存储类路径-->
<servlet-class>com.xuehaiwuya.controller.OneServlet</servlet-class>
<load-on-startup>9</load-on-startup> <!--服务器启动时创建,要填写大于0的整数-->
</servlet>
- 在http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象
- 在http服务器关闭时,会自动将所有Servlet对象销毁
五、HTTPServletResponse接口
- 接口介绍
1) HttpServletResponse接口来自于Servlet规范中,在servlet-api.jar中
2)HTTPServletResponse接口实现类由http服务器负责提供
3)HTTPServletResponse接口负责将doGet或者doPost方法执行的结果写入到【响应体】中,交给浏览器
4)开发人员习惯于将HTTPServletResponse接口修饰的对象成为【响应对象】
- 主要功能
1) 将执行结果以二进制形式写到响应体中
2)设置响应头中【content-type】属性值,从而控制浏览器使用对应的编译器将响应体二进制数据编译为【文字,图片,视频,命令】
3)设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求
六、请求对象和响应对象生命周期
1. 在http服务器接收到浏览器发送的【http请求协议包】之后,自动为当前的【http请求协议包】生成一个【请求对象】和【相应对象】
2. 在http服务器调用doGet或者doPost方法时,负责将【请求对象】和【响应对象】传递到实参中,确保doGet和doPost正确执行
3. 在http服务器准备推送http响应协议包之前,负责将本次请求关联的请求对象和响应对象销毁
-【请求对象】和【响应对象】声明周期贯穿一次请求的处理过程
-【请求对象】和【响应对象】相当于用户在服务端的代言人
When nothing seems to help, I go look at a stonecutter hammering away at his rock, perhaps a hundred times without as much as a crack showing in it. Yet at the hundred and first blow it will split in two, and I know it was not that blow that did it, but all that had gone before. -- Jacob Riis