一、Servlet简介
其实质就是运行在 Web 应用服务器上的 Java 程序,与普通 Java 程序不同,它是位于 Web 服务器内部的服务器端的 Java 应用程序,可以对 Web 浏览器或其他 HTTP 客户端程序发送的请求进行处理。通常我们也把实现了servlet接口的java程序,称之为Servlet
二、Servlet运行过程
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①客户端键请求数据包打包,并且发送给web容器(也就是发送请求(url))
②web容器解析出客户端的数据包,将解析后的数据封装到request对象,同时容器还要创建response对象
③web容器要依据请求资源路径("/web01/hello")找到servlet的配置,然后创建servlet对象。
④web容器调用servlet对象的service方法。容器会将事先创建好的request,response作为参数传递给service方法。
⑤在service方法里面,可以通过request对象获得请求参数,并进行相应的处理,处理结果会放到response对象里面。
⑥web容器从response对象中取出处理结果,然后打包(按照http协议,该数据包称之为响应数据包)。再将响应数据包发送给浏览器。
⑦浏览器收到响应数据包之后,解析处理结果,然后生成相应的页面。
三、Servlet例子
创建一个helloservlet2类实现servlet接口
package com.sxw.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet2 implements Servlet {
//初始化
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化操作");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//service方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello.");
}
@Override
public String getServletInfo() {
return null;
}
//销毁
@Override
public void destroy() {
System.out.println("销毁.");
}
}
配置web.xml文件
<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>com.sxw.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
这个例子同时也反映了servlet的生命周期
加载 Servlet:当 Tomcat 第一次访问 Servlet 的时候,Tomcat 会负责创建 Servlet 的实例。
初始化 Servlet:当 Servlet 被实例化之后,Tomcat 会调用 init() 方法来初始化这个对象。
处理服务:当浏览器访问 Servlet 的时候,Servlet 会调用 service() 方法处理请求。
销毁:当 Tomcat 关闭或者检测到 Servlet 要从 Tomcat 删除的时候,会自动调用 destroy() 方法,让该实例所占用的资源释放掉。一个 Servlet 如果长时间不被使用的话,也会被 Tomcat 自动销毁。
简单总结:只要访问 Servlet ,就会调用其对应的 service() 方法,init() 方法只会在第一次访问 Serlvet 的时候才会被调用
测试: