多种Servlet接口介绍

开发 后端
本文介绍多种Servlet接口,包括GenericServlet类和HttpServlet类的多种Servlet接口的介绍。

Servlet接口:
public interface Servlet
它的生命周期由javax.Servlet.Servlet接口定义。当你在写Servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从javax.Servlet.GenericServlet或javax.Servlet.http.HttpServlet派生。在实现Servlet接口时必须实现它的五个方法:

1.init():
public void init(ServletConfig config) throws ServletException
一旦对Servlet实例化后,容器就调用此方法。容器把一个ServletConfig对象传统给此方法,这样Servlet的实例就可以把与容器相关的配置数据保存起来供以后使用。如果此方法没有正常结束就会抛出一个ServletException。一旦抛出该异常,Servlet就不再执行,而随后对它的调用会导致容器对它重新载入并再次运行此方法。接口规定对任何Servlet实例,此方法只能被调用一次,在任何请求传递给Servlet之前,此方法可以在不抛出异常的情况下运行完毕。

2.service():
public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException
只有成功初始化后此方法才能被调用处理用户请求。前一个参数提供访问初始请求数据的方法和字段,后一个提供Servlet构造响应的方法。

3.destroy():
public void destroy()
容器可以在任何时候终止Servlet服务。容器调用此方法前必须给service()线程足够时间来结束执行,因此接口规定当service()正在执行时destroy()不被执行。

4.getServletConfig():
public ServletConfig getServletConfig()
在Servlet初始化时,容器传递进来一个ServletConfig对象并保存在Servlet实例中,该对象允许访问两项内容:初始化参数和ServletContext对象,前者通常由容器在文件中指定,允许在运行时向sevrlet传递有关调度信息,后者为Servlet提供有关容器的信息。此方法可以让Servlet在任何时候获得该对象及配置信息。

5.getServletInfo():
public String getServletInfo()
此方法返回一个String对象,该对象包含Servlet的信息,例如开发者、创建日期、描述信息等。该方法也可用于容器。

GenericServlet类
Public abstract class GenericServlet implants Servlet,ServletConfig,Serializable
此类提供了Servlet接口的基本实现部分,其service()方法被申明为abstract,因此需要被派生。init(ServletConfig conf)方法把ServletConfig对象存储在一个private transient(私有临时)实例变量里,getServletConfig()方法返回指向本对象的指针,如果你重载此方法,将不能使用getServletConfig来获得ServletConfig对象,如果确实想重载,记住要包含对super.config的调用。2.1版的API提供一个重载的没有参数的init()方法。现在在init(ServletConfig)方法结束时有一个对init()的调用,尽管目前它是空的。2.1版API里面,此类实现了ServletConfig接口,这使得开发者不用获得ServletConfig对象情况下直接调用ServletConfig的方法,这些方法是:getInitParameter(),getInitParameterNames(),getServletContext。此类还包含两个写日志的方法,它们实际上调用的是ServletContext上的对应方法。log(String msg)方法将Servlet的名称和msg参数写到容器的日志中,log(String msg,Throwable cause)除了包含Servlet外还包含一个异常。

HttpServlet类
该类扩展了GenericServlet类并对Servlet接口提供了与HTTP更相关的实现。

service():
protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
该方法作为HTTP请求的分发器,这个方法在任何时候都不能被重载。当请求到来时,service()方法决定请求的类型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把请求分发给相应的处理方法(doGet(),doPost(),doHead(),doOptions(),doDelete(),doPut(),doTrace())每个do 方法具有和***个service()相同的形式。为了响应特定类型的HTTP请求,我们必须重载相应的do方法。如果Servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。

getLatModified():
protected long getLastModified(HttpServletRequest req)
该方法返回以毫秒为单位的的自GMT时间1970年1月1日0时0分0秒依赖的最近一次修改Servlet的时间,缺省是返回一个负数表示时间未知。当处理GET请求时,调用此方法可以知道Servlet的最近修改时间,服务器就可决定是否把结果从缓存中去掉。

HttpServletRequest接口
public interface HttpServletRequest extends ServletRequest
所有实现此接口的对象(例如从Servlet容器传递的HTTP请求对象)都能让Servlet通过自己的方法访问所有请求的数据。下面是一些用来获取表单数据的基本方法。

getParameter()
public String getParameter(String key)
此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的***个值。如果请求信息中没有指定参数,则返回null。

getParametervalues():
public String[] getParametervalues(String key)
如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回null。

GetParameterNames():
Public Enumeration getParameterNames()
此方法返回一个Enumeration对象,包含对应请求的所有参数名字列表。
HttpServletResponse接口
public interface HttpServletResponse extends ServletResponse
Servlet容器提供一个实现该接口的对象并通过service()方法将它传递给Servlet。通过此对象及其方法,Servlet可以修改响应头并返回结果。

setContentType():
public void setContentType(String type)
在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML是就是”text/html”类型。

getWriter():
public PrintWriter getWriter()throws IOException
此方法将返回PrintWriter对象,把Servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的UniCode编码字符转换成正确的编码以使客户端能够阅读。

getOutputStream():
public ServletOutputStream getOutputStream() throws IOException
此方法返回ServletOutputStream对象,它是java.io.OutputStream的一个子类。此对象向客户发送二进制数据。

setHeader():
public void setHeader(String name,String value)
此方法用来设置送回给客户的HTTP响应头。有一些快捷的方法用来改变某些常用的响应头,但有时也需要直接调用此方法。
编译条件
需要从http://java.sun.com/products/Servlet/ 获得一份JSDK的拷贝,并把Servlet.jar移动到JDK安装目录下的\jre\lib\ext目录下。如果是JDK1.1,则移动到\lib下,并在CLASSPATH中加入Servlet.jar的绝对路径。
运行条件
需要Apache Jserv,Jrun Servlet Exec,Java Web Server,Weblogic,WebSphere,Tomcat,Resin等Servlet服务器端程序。
简单范例

  1. import java.io.*;  
  2. import javax.servlet.*;  
  3. import javax.servlet.http.*;  
  4. public class HelloWorld extends HttpServlet {  
  5. public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException  
  6. {  
  7. response.setContentType("text/html");  
  8. PrintWriter out = response.getWriter();  
  9. out.println("<html>");  
  10. out.println("<body>");  
  11. out.println("<head>");  
  12. out.println("<title>Hello World!</title>");  
  13. out.println("</head>");  

【编辑推荐】

  1. Servlet和JSP新特性
  2. 浅谈Servlet的Web服务器
  3. 在Weblogic环境中实现Servlet应用
  4. Servlet和CGI间的通讯
  5. 用MIDlet激活Servlet
责任编辑:佚名 来源: 中国IT实验室
相关推荐

2009-07-09 13:39:52

Servlet Con

2009-07-07 17:32:31

HTTP Servle

2009-07-09 11:27:59

Servlet容器

2009-07-03 13:22:37

调用Servlet

2013-09-02 09:18:59

2009-07-08 11:17:10

Servlet容器Servlet Con

2009-07-09 13:23:44

Servlet 2.4

2009-07-07 15:24:49

Http Servle

2009-07-07 09:51:49

Servlet实例

2009-09-01 10:20:28

C#多种语句

2009-07-03 11:21:43

Servlet和JSPJSP路径

2009-07-07 16:05:15

Servlet和Jav

2009-07-08 17:39:23

Servlet监听器

2010-03-11 09:50:46

Linux VI命令

2009-07-07 14:04:55

JSP入门

2010-02-01 14:57:43

Python接口

2010-02-03 09:43:16

C++单例模式

2024-10-18 08:00:00

SpringBoot框架开发

2010-02-06 18:04:21

Android 接口

2010-02-01 18:06:48

Python Edit
点赞
收藏

51CTO技术栈公众号