一、什么是Servlet?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,它是一种运行在服务器端的程序,主要的功能在于交互式的浏览和修改数据,生成动态的web内容。从原理上讲Servlet可以响应任何类型请求,但是大多数情况下,都是用来扩展基于HTTP协议的web服务器。
二、Servlet简介
Servlet是sun公司提供的一种用于开发动态web资源的技术。
sun公司在其API中提供了servlet接口,用户如果需要开发一个动态的web资源,就必要要实现这个接口,并把开发好的类,部署到服务器内。
tips:我们把实现了Servlet接口的Java程序,称为servlet。
三、Servlet的运行过程。
1、客户端向web服务器发送一个Servlet请求
2、web服务器检查是否已经装载并创建了一个servlet如果没有则依次向下执行,如果有则跳到第五步
3、web服务器装载并创建于一个Servlet的实例对象
4、调用Servlet的init()方法进行初始化
5、创键一个用于封装Http请求的HttpServletRequest的对象和用于封装Http响应的HttpServletResponse对象,并通过servle中的service方法将对象作为参数传递进去。
6、Servlet对客户端的请求做出响应
7、web应用程序终止,调用servlet的destroy()方法,servlet引擎卸载该Servlet程序。
四、servlet的生存周期。
--加载:把一个Servlet.class的文件load进来放到web容器中
--实例化:new一个Servlet的实例出来
--初始化:调用init()来初始化对象
||该初始化的目的是为了让Servlet在处理请求前完成一些初始化的工作
--处理服务:调用Service方法 如HttpServlet中的doGet(),doPost()方法
--销毁:当整个服务器退出时,自动销毁,解除掉占用的内存
package com.luther.ServletStudy;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ser")
public class ServletLifeCycle extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("初始化方法执行");
}
@Override
public void destroy() {
System.out.println("销毁方法执行");
}
public ServletLifeCycle(){
System.out.println("构造方法执行");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget方法执行");
}
}
理解servelt的生命周期测试代码总结:
(1)测试这几个方法先后的执行顺序,经过测试先构建对象
(2)只是构建一个对象,不管你访问多少次,只是由这一个对象提供服务,在初始化,最后调用doGet方法
(3)servlet不管你访问多少次,只构建一个对象,访问几次调用几次doGet()方法,init方法只执行一次,第一次初始化的时候执行
(4)当webapp退出时,会调用destroy方法,也就是说servlet对象真正的从内存中消失时,才会调用destroy方法
(5)ServletConfig 中的config对象可以读取web.xml中的初始化参数,得到servlet的配置信息
五、Servlet的映射配置
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。
<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注 册名称和Servlet的完整类名。
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。
<?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>
<servlet-name>same</servlet-name> 两次名称要相同
<servlet-class>com.luther.ServletStudy.ServletLifeCycle</servlet-class>这里一定要是完整的路劲,包名加上类名
</servlet>
<servlet-mapping>
<servlet-name>same</servlet-name>
<url-pattern>/ser</url-pattern>前面一定要有 / !!!
</servlet-mapping>
</web-app>
tips:我们也可以使用注解来进行对servlet的配置,servlet3.0以上。