Servlet作为JAVAEE支持的标准之一,有着广泛应用。在此手写一个Servlet加深理解。在tomcat的webapps文件夹中新建一个文件夹myServlet,在此文件下新建下新建WEB-INF文件夹,再在此文件夹下新建classes文件夹存放FirstServlet.java,同时在WEB-INF文件夹下新建web.xml文件。
FirstServlet.java文件如下:
package com.bankcomm.servlet;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet{
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
{
OutputStream out = res.getOutputStream();
out.write("hello servlet!".getBytes());
}
}
web.xml文件如下:
<?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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.bankcomm.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
</web-app>
在编译java文件前要将tomcat中的servlet-api.jar文件加入classpath中,再执行javac -d . FirstServlet.java编译java文件。启动tomcat服务器,在浏览器栏中输入http://127.0.0.1:8080/myServlet/FirstServlet即可得到正确响应。
整个Servlet调用过程如下:
1)客户机连上Web服务器
2)发送http请求给服务器
3)服务器解析出客户机想访问的主机名
4)服务器解析出客户机想访问的web应用
5)服务器解析出客户机想访问的web资源
6)web服务器第一次调用FirstServlet.java类创建servlet实例对象(客户第一次访问创建,驻留在内存中,响应后续请求)
7)调用servlet的init方法完成实例对象的初始化
8)创建代表请求的request和代表响应的response对象,然后调用servlet的service方法
9)service方法执行,向代表客户端响应的response对象写入了向客户端输出的数据。
10)service方法返回
11)服务器从response中取出数据,构建一个http响应,会写给客户机
12)客户机解析http响应并显示。
从servlet角度来看,当web服务器收到客户端的Servlet访问请求后,其整个生命周期如下:
1)Web服务器首先检查是否已经装载并创建了该Servlet的实例对象,如果是,则直接跳到第4)步,否则执行第20步。
2)装载并创建该Servlet的一个实例对象。
3)调用Servlet实例对象的init()方法。
4)web服务器创建一个用于封装http请求消息的HttpServletRequest对象和一个封装http响应消息的HttpServletResponse对象。然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5)web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory()方法。