1 Servlet概述
Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序.
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。
Servlet的作用:
接收用户发送的请求数据
调用其他的java程序来处理请求
根据处理结果,将结果响应给客户端
2 Servlet创建和使用
1.创建一个类继承javax.servlet.http包下的HttpServlet
因为我们现在是在本地操作,所以需要借用tomcat中的jar包(tomcat-api.jar)
最终是不需要的,因为我们的java程序最终是部署到tomcat中运行的,tomcat中有这个jar包
jar包必须放在WEB-INF这个目录里面,所以我们在该目录下创建名字为lib的文件夹,用来放我们导入的jar包
import javax.servlet.http.HttpServlet;
// 创建类并继承HttpServlet
public class LoginServlet extends HttpServlet { }
2.在web.xml文件中配置Servlet
Web.xml文件:
xml指可扩展性标记语言,主要是存储数据,以特定的格式存储项目配置信息
Web.xml文件用于对web应用下的web资源进行配置,必须放在web应用目录WEB-INF目录下, 服务器在启动时会读取web.xml文件中的内容
像servlet、过滤器、监听器等等都在web.xml文件中配置
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成:
<servlet>元素用于注册Servlet
<servlet-name>为生成的Servlet注册名称
<servlet-class>类的地址 服务器根据类的地址+反射机制动态获取类信息,创建对象
<servlet-mapping>映射一个已注册的Servlet的一个对外访问路径
<servlet-name>指定Servlet的注册名称
<url-pattern>指定Servlet的对外访问路径
url-pattern配置模式:"/"代表当前web应用的根目录
精确匹配:例如/test 访问http://127.0.0.1/项目名/test
3.运行Servlet程序
- 通过浏览器访问http:localhost:8080/ 项目名/配置的url
ip(找到计算机)+端口(找到计算机上的某一个程序,这里也就是找到服务器)+项目名(一个服务器中有可能部署了多个项目,所以需要通过名称找到项目)+配置注册的servlet的名称(找到对应的servlet访问地址)
3 Servlet程序执行流程
一次http请求发送到后端找到servlet程序,是按照一个特定的顺序调用方法的。
构造方法 ---> init() ---> service() ---> destroy()
那么在哪规定的调用顺序呢?
在最上层定义了一个servlet接口(init,service,desteoy),所有的javaEE(实现了servlet接口的类),都会按照这个规范来执行。
执行流程详解:
package com.ffyc.webback.servlet;
import javax.servlet.ServletConfig;
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 LoginServlet_back extends HttpServlet {
/*
1.创建阶段
*/
public LoginServlet_back() {
System.out.println("LoginServlet无参构造方法");
}
/*
2.初始化阶段
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init:"+config.getInitParameter("n"));//init:jim
}
/*
3.服务阶段
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(req);//org.apache.catalina.connector.RequestFacade@5219cfdb
System.out.println(resp);//org.apache.catalina.connector.ResponseFacade@171b5bfc
System.out.println("service");
}
/*
4.销毁阶段
*/
@Override
public void destroy() {
System.out.println("destroy");
}
}
1.创建阶段(构造方法)
servlet对象是由服务器创建的,创建时有两种情况:
默认情况下,当我们第一次向servlet发送请求时,由服务器创建此servlet对象,始终只创建一个,也就是只执行一次
- 在web.xml文件中通过<load-on-startup>0</load-on-startup>根据需要来设置什么时候创建servlet对象(大于等于0,在服务器启动时创建,小于0,第一次访问时创建)
2.初始化阶段(init(ServletConfig config))
在servlet创建成功后(也就是构造方法执行后)立即执行,初始化一些参数配置, 只执行一次
ServletConfig参数,用来封装servlet配置信息,我们可以在web.xml中配置,并通过config.getInitParameter(""),来获取对应的值,也就是通过参数读取配置信息
3.服务阶段(service())
service是为前端提供服务的,一旦有客户端请求,就会执行service(),提供服务
HttpServletRequest 表示请求,封装请求数据;HttpServletResponse 表示响应,它们都是接口,tomcat想要运行java程序,就要去写具体的实现类来实现该接口
4.销毁阶段(destroy())
当服务器关闭时,在servlet真正销毁之前,服务器会调用destroy(,)让我们的servlet程序可以去执行一些最终的操作
例如:打印日志、将内存数据保存到硬盘等
4 Servlet生命周期
servlet在容器中开始实例化到实例销毁的整个过程
实例化:
构造方法:第一次访问或者服务器启动时,只被调用一次,只有第一次访问Servelt时或服务器启动时创建Servlet实例。
初始化:
Init方法:只被调用一次,在Servlet实例创建好实例后立即执行, 用于执行一些初始化Servlet的操作。
就绪状态:
service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。
注意:此时不会重新创建servlet实例,也不会调用init()方法
销毁状态:
destroy:只被调用一次,在服务器关闭时调用,执行一些操作。