完整Servlet详情介绍

servlet介绍 


Servlet是sun公司提供的一门用于开发动态web资源的技术。

Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:  1、编写一个Java类,实现servlet接口。  2、把开发好的Java类部署到web服务器中。  按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。

Servlet有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javax.Servlet.Servlet接口的init,service和destroy方法表达。

下面就来详细说明servlet生命周期中每个步骤

1、加载和实例化

容器负责加载和实例化一个Servlet。实例化和加载可以发生在引擎启动的时候,也可以推迟到容器需要该Servlet为客户请求服务的时候。

2、初始化

Servlet加载并实例化后,容器必须在它能够处理客户端请求前初始化它。初始化的过程主要是读取永久的配置信息,昂贵资源(例如JDBC连接)以及其它仅仅需要执行一次的任务。通过调用它的init方法并给它传递唯一的一个(每个Servlet定义一个)ServletConfig对象完成这个过程。给它传递的这个配置对象允许Servlet访问容器的配置信息中的名称-值对(name-value)初始化参数。这个配置对象同时给Servlet提供了访问实现了ServletContext接口的具体对象的方法,该对象描述了Servlet的运行环境。

2.1初始化的错误处理

2.2、工具因素

3、处理请求

在Servlet被适当地初始化后,容器就可以使用它去处理请求了。每一个请求由ServletRequest类型的对象代表,而Servlet使用ServletResponse回应该请求。这些对象被作为service方法的参数传递给Servlet。在HTTP请求的情况下,容器必须提供代表请求和回应的HttpServletRequest和HttpServletResponse的具体实现。需要注意的是容器可能会创建一个Servlet实例并将之放入等待服务的状态,但是这个实例在它的生存期中可能根本没有处理过任何请求。

3.1、多线程问题

3.2、处理请求中的异常

3.3线程安全

4、服务结束

容器没有被要求将一个加载的Servlet保存多长时间,因此一个Servlet实例可能只在容器中存活了几毫秒,当然也可能是其它更长的任意时间(但是肯定会短于容器的生存期)当容器决定将之移除时(原因可能是保存内存资源或者自己被关闭),那么它必须允许Servlet释放它正在使用的任何资源并保存任何永久状态(这个过程通过调用destroy方法达到)。容器在能够调用destroy方法前,它必须允许那些正在service方法中执行的线程执行完或者在服务器定义的一段时间内执行(这个时间段在容器调用destroy之前)。一旦destroy方法被调用,容器就不会再向该实例发送任何请求。如果容器需要再使用该Servlet,它必须创建新的实例。destroy方法完成后,容器必须释放Servlet实例以便它能够被垃圾回收。

5.多种Servlet接口介绍Servlet接口:

1.init():

2.service():

3.destroy():

4.getServletConfig():

5.getServletInfo():

GenericServlet类

HttpServlet类

service():

getLatModified():

HttpServletRequest接口

getParameter()

getParametervalues():

GetParameterNames():

setContentType():

getWriter():

getOutputStream():

setHeader():编译条件

Java代码

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{   response.setContentType("text/html");    PrintWriter out = response.getWriter();    out.println("<html>");    out.println("<body>");    out.println("<head>");    out.println("<title>Hello World!</title>");    out.println("</head>");

}

...doPost()...等类似


猜你喜欢

转载自blog.51cto.com/10983206/2563884