目录--“供自己回看的粗略笔记”
!!是markdown文件导入,存在格式问题,可直接看附件文档
Servlet概述
servlet简介
Servlet是运行在Servlet容器中的Java类,能处理Web客户端的HTTP请求,并产生HTTP响应
servlet 请求和访问过程
(servlet本身不做业务处理,通过调用其他类处理)
步骤:
- 接收HHTP请求
- 取得请求信息,包括请求头部信息和请求参数数据
- 调用其他Java类方法,完全具体的业务功能
- 实现到其他Web组件的跳转(包括重定向或请求转发)
- 生成HTTP响应(包括HTML或非HTML响应)
servlet特点
高效、方便、功能强大、可移植性好
servlet是Java EE(java 企业级的开发技术,一套规范)的基础,随Java EE规范一起发布,是Java EE的一部分。
页面跳转
-
(主要)请求转发:jsp不能直接传值,需要通过HttpServletRequest request对象传值,forward
-
重定向:response对象提供的:重定向redirect
servlet容器
servlet容器也就是Servlet所运行的环境
-
servlet容器先接受请求,通过请求找到对应的servlet,再实例化servlet类对象(servlet不需要手动实例化,容器可以自动实例化 )
-
tomcat是servlet容器之一
-
servlet运行需要在容器里运行
Serlvet API
servlet是使用Serlvet API(应用程序设计接口)及相关类和方法的Java程序
Serlvet API 包含两个软件包:
- javax.servlet包
- javax.servlet.http包
接口
javax.servlet.Servlet
所有的Servlet都必须直接或间接地实现javax.servlet.Servlet接口(继承父类)
❗❗Servlet接口中的重要方法
跟生命周期相关的方法重要!
-
init方法初始化:在servlet实例化后,由**servlet容器调用的对servlet进行初始化;servlet实例只能被调用一次**
-
service方法:处理用户请求的方法,然后判断调用什么方法
-
destroy方法销毁方法:servlet一旦被实例化之后就一直在内存当中,容器在终止servlet服务前调用此方法(tomcat正常停止运行后)
…config:调用servlet配置信息
javax.servlet.http.HttpServlet
HttpServlet指能够处理HTTP请求的Sevlet,它在原有Servlet接口上添加了对HTTP协议的处理
HttpServlet中的重要方法
service
doGet
doPost
❗❗servlet生命周期
Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程.
Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期
❗这些方法在哪执行,执行几次要会
-
构造方法:执行一次
-
inti():执行一次
-
sevice()可能被多次调用:执行多次
-
destroy():执行一次
可划分为四个阶段:加载和实例化、初始化、处理请求、销毁!!!!!!
简单来说,实例化调用servlet构造方法,初始化调用init方法,合为servlet创建过程
当请求到了tomcat里tom会先找对象,没找到就实例化,然后实例化
请求处理完毕之后,不会立即销毁,先存放在容器之中,后续可能还会访问到
service:会为每个用户的请求创建一个线程(每一个请求都在一个线程调用一次service)(一个实例多线程)
测试例子
重写方法,加个输出
右键 - > Gennerate - > override
TestServlet.java
package com.example.web_demo3;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "TestServlet", value = "/test")
public class TestServlet extends HttpServlet {
//重写这些方法,加一个打印输出让我看到这些方法运行过程
public TestServlet() {
super();
System.out.println("TestServlet Constructor");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.service(req, resp);
System.out.println("Service method");
}
//一般在这一般不会调用,停止tomcat时会执行
@Override
public void destroy() {
System.out.println("Destroy method");
super.destroy();
}
@Override
public void init() throws ServletException {
System.out.println("Init method");
super