注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

骇客归来

ぁ枫あ

 
 
 

日志

 
 

[原创]Servlet简要说明

2006-10-20 13:48:41|  分类: Jsp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

javax.servlet 包中有12个接口,web容器实现了其中的7个,如下:

ServletContext

ServletConfig

ServletResponse

ServletRequest

RequestDispatcher

FilterChain

FilterConfig

剩下的5个接口一般有web应用程序开发人员根据应用的功能需求自己实现,如下:
Servlet

ServletContextListener

ServletContextAttributeListener

SingleThreadModel

Filter

其中Servlet是开发servlets的关键,这个接口定义了servlet的生命周期,包括:初始化,提供服务,回

收。接口定义如下:
    package javax.servlet;

    import java.io.IOException;

    public interface Servlet {

      public abstract void init(ServletConfig servletconfig)
                               throws ServletException;

      public abstract ServletConfig getServletConfig();

      public abstract void service(ServletRequest servletrequest,
                                   ServletResponse servletresponse)
                           throws ServletException, IOException;
      public abstract String getServletInfo();

      public abstract void destroy();
    }
可以看到这个接口定义了一个获得ServletConfig实例的方法,容器通过ServletConfig向Servlet传递初

始化参数。ServletConfig包含了一个SevrletContext的实例,SevrletContext是web应用程序在web容器

中的一个视图,这样我们就可以使一个web应用程序使用web容器的资源,比如日志记录和请求转发等。

ServletConfig的定义如下:
package javax.servlet;

    import java.util.Enumeration;

    public interface ServletConfig {

      public abstract String getServletName();

      public abstract ServletContext getServletContext();

      public abstract String getInitParameter(String s);

      public abstract Enumeration getInitParameterNames();
    }


ServletContext接口的定义如下:

 package javax.servlet;

    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Enumeration;
    import java.util.Set;

    public interface ServletContext {

      public abstract ServletContext getContext(String s);

      public abstract int getMajorVersion();

      public abstract int getMinorVersion();

      public abstract String getMimeType(String s);

      public abstract Set getResourcePaths(String s);

      public abstract URL getResource(String s)
                                      throws MalformedURLException;
      public abstract InputStream getResourceAsStream(String s);

      public abstract RequestDispatcher getRequestDispatcher(String s);

      public abstract RequestDispatcher getNamedDispatcher(String s);

      /**
       * @deprecated Method getServlet is deprecated
       */

      public abstract Servlet getServlet(String s)
                                      throws ServletException;

      /**
       * @deprecated Method getServlets is deprecated
       */

      public abstract Enumeration getServlets();

      /**
       * @deprecated Method getServletNames is deprecated
       */

      public abstract Enumeration getServletNames();

      public abstract void log(String s);

      /**
       * @deprecated Method log is deprecated
       */

      public abstract void log(Exception exception, String s);

      public abstract void log(String s, Throwable throwable);

      public abstract String getRealPath(String s);

      public abstract String getServerInfo();

      public abstract String getInitParameter(String s);

      public abstract Enumeration getInitParameterNames();

      public abstract Object getAttribute(String s);

      public abstract Enumeration getAttributeNames();

      public abstract void setAttribute(String s, Object obj);

      public abstract void removeAttribute(String s);

      public abstract String getServletContextName();
    }

ServletContextListener 这个接口可以监听ServletContext对象,也就是说当ServletContext对象被创

建或回收的时候开发人员可以被通知,这样就允许开发人员在应用启动和关闭做一些事情,比如在应用程

序内打开或关闭数据库连接等。


ServletContextAttributeListener这个借口监听的主要是在向ServletContext中add,change,delete

Attribute时的一些事件。接口定义如下:
    package javax.servlet;

    import java.util.EventListener;

    public interface ServletContextAttributeListener extends EventListener {

      public abstract void attributeAdded(ServletContextAttributeEvent
                                          servletcontextattributeevent);

      public abstract void attributeRemoved(ServletContextAttributeEvent
                                            servletcontextattributeevent);

      public abstract void attributeReplaced(ServletContextAttributeEvent
                                             servletcontextattributeevent);
    }


RequestDispatcher接口主要管理客户的请求并将他们转发到服务器的适当资源,开发人员可以通过实现

这个接口转发请求到不同的页面或其他Servlet,接口定义如下:
package javax.servlet;

import java.io.IOException;

public interface RequestDispatcher {

  public abstract void forward(ServletRequest servletrequest,
                               ServletResponse servletresponse)
                                      throws ServletException, IOException;
      public abstract void include(ServletRequest servletrequest,
                                   ServletResponse servletresponse)
                                          throws ServletException, IOException;
}


ServletRequest接口:这个接口包装了从客户端发过来的所有信息。这个对象由容器创建,他提供了方法

来访问任何参数-值,属性和输入流。接口定义如下:
 package javax.servlet;

    import java.io.*;
    import java.util.*;

    public interface ServletRequest {

      public abstract Object getAttribute(String s);
      public abstract Enumeration getAttributeNames();
      public abstract String getCharacterEncoding();
      public abstract void setCharacterEncoding(String s)
                           throws UnsupportedEncodingException;
      public abstract int getContentLength();
      public abstract String getContentType();
      public abstract ServletInputStream getInputStream()
                                         throws IOException;
      public abstract String getParameter(String s);
      public abstract Enumeration getParameterNames();
      public abstract String[] getParameterValues(String s);
      public abstract Map getParameterMap();
      public abstract String getProtocol();
      public abstract String getScheme();
      public abstract String getServerName();
      public abstract int getServerPort();
      public abstract BufferedReader getReader()
                                     throws IOException;
      public abstract String getRemoteAddr();
      public abstract String getRemoteHost();
      public abstract void setAttribute(String s, Object obj);
      public abstract void removeAttribute(String s);
      public abstract Locale getLocale();
      public abstract Enumeration getLocales();
      public abstract boolean isSecure();
      public abstract RequestDispatcher getRequestDispatcher(String s);
    }
我们可以使用以下的方法来访问参数:
    public String getParameter(String name)
    public String[] getParameterValues(String name)
    public java.util.Enumeration getParameterNames()
    public java.util.Map getParameterMap()
getParameter返回给定名的参数的值,如果不存在则返回null,如果这个方法用在返回多个值的参数时,

他只返回和getParameterValues得到的数组的第一个值。
getParameterNames返回一个迭带器,getParameterMap返回一个HashMap


javax.servlet包中包含的类:
在这个包中有7个类,他们分别是:
GenericServlet

ServletContextEvent

ServletContextAttributeEvent

ServletInputStream

ServletOutputStream

ServletRequestWrapper

ServletResponseWrapper


GenericServlet抽象类可用做开发协议独立的servlets,他的子类必须实现service()方法即可。一般情

况对于web context来说都直接继承HttpServlet抽象类即可。

ServletContextEvent 和ServletContextAttributeEvent主要用来捕获ServletContext 的创建和属性的

改变事件。

ServletInputStream 和ServletOutputStream 抽象类提供了从客户端读取二进制数据的能力。实现这两个类必须提供java.io.InputStream.read() and java.io.OutputStream.write() 方法,分别在两个类中。

ServletRequestWrapper 和ServletResponseWrapper 提供了对ServletRequest和 ServletResponse 的有用实现,这些类可以被继承以适配开发者的需要。

Servlet的生命周期:
1。当一个servlet被构造的时候他的init()方法被调用
2。接下来执行他的 service()来提供对request的处理。这个方法总是请求被委托到doXxx()之前被执行
3。当一个servlet被销毁的时候,调用他的destroy()方法。

 

Servlet的发布:

在web.xml中进行描述:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">

        <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>com.apress.projsp20.ch02.MyServlet</servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/MyServlet</url-pattern>
        </servlet-mapping>
    </web-app>

 

  评论这张
 
阅读(86)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017