JavaWeb学习笔记(五)Servlet

第五章、Servlet

1、Servlet技术

1.1、什么是Servlet

  • Servlet是Java EE的规范之一,规范就是接口。
  • Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序、Filter过滤器、Listener监听器。
  • Servlet是运行在服务器上的一个Java小程序,它可以接受科幻段发动来的请求,并响应数据给客户端

1.2、实现Servlet程序

  1. 编写一个类,去实现Servlet接口
  2. 实现service方法,处理请求并响应数据
  3. 到web.xml中配置Servlet程序的访问地址

1.3、url地址到Servlet程序的访问

image-20201019232637000

1.4、Servlet的生命周期

1、执行Servlet构造器方法

2、执行init初始化方法

3、执行service方法

4、执行destroy销毁方法

说明:

1和2:在第一次访问时,创建Servlet程序时,被调用

3:每次访问都会调用

4:停止web工程时调用

1.5、GET和POST请求的分发处理

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
	// 类型转换(因为它有 getMethod()方法)
	HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
	// 获取请求的方式
	String method = httpServletRequest.getMethod();
    
	if ("GET".equals(method)) {
		doGet();
	}
    else if ("POST".equals(method)) {
		doPost();
	}
}

/**
* 做 get 请求的操作
*/
public void doGet(){}

/**
* 做 post 请求的操作
*/
public void doPost(){}

1.6、通过记成HttpServlet实现Servlet程序(开发中常用方法)

  1. 编写一个类去继承HttpServlet类
  2. 根据需求重写doGet()和doPost()方法
  3. 在web.xml中配置Servlet程序的访问地址
public class HelloServlet2 extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//这里是具体的方法
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//这里是具体的方法
    }
}
<servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.javalove.servlet.HelloServlet2</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
  		<url-pattern>/hello2</url-pattern>
</servlet-mapping>

1.7、使用idea创建Servlet程序(同样可以实现如上效果)

1.8、Servlet类的继承体系

image-20201019235049109

2、ServletConfig类

  • 顾名思义,ServletConfig类,是Servlet程序的配置信息类
  • Servlet程序和ServletConfig对象,是由Tomcat创建的,我们只需要使用就ok
    • Servlet 程序默认是第一次访问的时候创建
    • ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象;因此,每个Servlet只能访问到自己的Servlet程序的配置信息。

2.1、ServletConfig类的三大作用

  1. 可以获取 Servlet 程序的别名 servlet-name 的值
  2. 获取初始化参数 init-param
  3. 获取 ServletContext 对象
@Override
public void init(ServletConfig servletConfig) throws ServletException {
	//1、可以获取 Servlet 程序的别名 servlet-name 的值
	System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());

	//2、获取初始化参数 init-param
	System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
	System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));

	//3、获取 ServletContext 对象
	System.out.println(servletConfig.getServletContext());

}

注意:重写init方法,一定要调用父类的init(ServletConfig)。

  • 因为子父类中都有init时,会调用子类的init()
  • 而父类中的init(),使用了this.config = config 保存了ServletConfig类型的配置信息
  • 因此必须要调用一下父类
@override
public void init(ServletConfig config){
    super.init(config);
    //下面是自己重写的操作
}

3、ServletContext类

3.1、什么是ServletContext类

  • 是一个接口,表示:Servlet上下文对象

  • ServletContext类型的对象是域对象

    • 域对象:可以向Map一样存取数据的对象

    • 域:指的是存取对象的操作范围---整个web工程

    • Map和域对象对比

      存数据 取数据 删除数据 说明
      Map put() get() remove()
      域对象 setAttribute() getAttribute() removeAttribute() 方法名中有Attribute---》域对象
  • 一个web工程只有一个ServletContext对象实例

  • ServletContext类型的对象是在web工程部署的时候创建,停止的时候销毁

3.2、ServletContext类的四个作用

  1. 获取 web.xml 中配置的上下文参数 context-param
  2. 获取当前的工程路径, 格式: /工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像 Map 一样存取数据

4、HTTP协议

4.1、是什么HTTP协议

  • 协议:双方、多方约定好的规则
  • HTTP协议:客户端和服务器之间通信,要遵守的规则
  • 报文:协议中的数据

4.2、请求的HTTP协议格式

1、GET请求
  • 请求行
    • 请求的方式:GET
    • 请求的资源路径【+?+请求参数】
    • 请求的协议版本号:HTTP/1.1
  • 求情头
    • 很多key:value

image-20201020024036689

2、POST请求
  • 请求行

    • 请求的方式:POST
    • 请求的资源路径【+?+请求参数】
    • 请求的协议版本号:HTTP/1.1
  • 请求头

    • key:value
  • 空行

  • 请求体:发给服务器的数据

image-20201020024244463

3、哪些是GET、哪些是POST

  • GET 请求有哪些:

    1、form 标签 method=get

    2、a 标签

    3、link 标签引入 css

    4、Script 标签引入 js 文件

    5、img 标签引入图片

    6、iframe 引入 html 页面

    7、在浏览器地址栏中输入地址后敲回车

  • POST 请求有哪些:

    8、form 标签 method=post

4.3、响应的HTTP协议格式
  • 响应行
    • 响应的协议和版本号
    • 响应状态码
    • 响应状态描述符
  • 响应头
    • key : value 不同的响应头,有其不同含义
  • 空行
  • 响应体 ---->>> 就是回传给客户端的数据

image-20201020024827387

4.4、响应码的说明

响应码 含义
200 请求成功
302 请求重定向
404 服务器收到请求,但是数据不存在或请求地址错误
500 服务器收到请求,服务器里的代码错误

4.5、MIME类型说明

  1. MIME 的英文全称是" Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。 MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应

  2. 常用MIME类型

image-20201020025252559

image-20201020025304861

原文地址:https://www.cnblogs.com/liuzhixian666/p/13844242.html