Servlet = Server + Applet


生命周期编辑

  1. 客户端请求该 servlet;
  2. 加载 servlet 类到内存;
  3. 实例化、初始化该 servlet;
  4. init() 初始化参数;
  5. service()(doGet() 或者 doPost());
  6. destroy()。
加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet。
Server 创建一个 Servlet的实例
第一个客户端的请求到达 Server
Server 调用 Servlet 的 init() 方法(可配置为 Server 创建 servlet 实例时调用,在 web.xml 中 <servlet> 标签下配置 <load-on-startup> 标签,配置的值为整型,值越小 servlet 的启动优先级越高)
一个客户端的请求到达 Server
Server 创建一个请求对象,处理客户端请求
Server 创建一个响应对象,响应客户端请求
Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数
service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法。
对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。



简单的servlet 例子:



@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String name=req.getParameter("name");
String password=req.getParameter("pwd");
String address=req.getRemoteAddr();
String host=req.getRemoteHost();
String user=req.getRemoteUser();
String sessionid=req.getRequestedSessionId();
String protocol=req.getProtocol();
int  remotePort=req.getRemotePort();


String address1=req.getLocalAddr();
String host1=req.getLocalName();
Locale user1=req.getLocale();
String servername=req.getServerName();
int protocol1=req.getLocalPort();
 
   //输出到控制台
System.out.print("do get---------name="+name+"&password="+password+"&address="+address+"&host="+host+"&user="+user+"sessionid="+sessionid+"&protocol"+protocol+"&port="+remotePort);
System.out.print("do get---------name="+name+"&password="+password+"&address="+address1+"&host="+host1+"&user="+user1+"sessionid="+servername+"&protocol1="+protocol1);
 

         // 输出到页面  
        PrintWriter out=resp.getWriter();
        out.println("do get---------name="+name+"&password="+password+"&address="+address1+"&host="+host1+"&user="+user1+"sessionid="+servername+"&protocol1="+protocol1);
       out.close();

}




本文转载:CSDN博客