Servlet的接口和方法
Servlet API 主要由 javax.servlet 和 javax.servlet.http 两个包组成。?在javax.servlet包中定义了Servlet接口及相关的通用和类?在javax.servlet.http包中主要定义了与HTTP协议相关的 HttpServlet类、HttpServletRequest接口和HttpServletResponse接口?Servlet API的核心是java.servlet.Servlet接口,所有的Servlet类都必须 实现 这一接口。Servlet接口中定义了5个方法,其中有3个方法都由Servlet容器来调用这3个方法是:init(ServletConfig config):容器创建Servlet对象后会调用init方法初始化Servlet对象service(ServletRequest arg1,ServletResponse arg2):当容器收到客户端请求,访问特定的Servlet对象时,调用该Servlet对象的service()方法destroy():当Servlet对象结束生命周期时调用destroy()释放Servlet对象占用的资源还有两个方法:getServletConfig()返回一个ServletConfig对象,包含Servlet初始化信息getServletInfo()返回一个字符串,包含了Servlet的创建者、版本和版权的信息?javax.servlet.GenericServlet抽象类 实现 了Servlet接口,还实现了ServletConfig接口和Serializable接口。javax.servlet.GenericServlet抽象类没有实现Servlet接口的service()方法,service()方法是GenericServlet抽象类中唯一的抽象方法,所以GenericServlet抽象类的子类必须实现service()方法由于GenericServlet抽象类实现了ServletConfig接口,因此,GenericServlet抽象类的子类可以直接调用在ServletConfig接口中定义的getServletContext()、getInitParameter()、getInitParameterNames()等方法?javax.servlet.http.HttpServlet抽象类是 GenericServlet抽象类的 子类 ??所以开发自己的Servlet类时,可以选择扩展GenericServlet类或者HttpServlet类??ServletRequest接口提供了一系列用于读取客户端请求数据的方法:getContentLength()返回请求正文的长度。如果请求正文的长度未知,则返回-1getContentType()获得请求正文的MIME类型。如果请求正文的类型未知,返回nullgetInputStream()返回用于读取请求正文的输入流getLocalAddr()返回服务器端IPgetLocalName()返回服务器端主机名getLocalPort()返回服务器端端口号getParameter(String name)返回客户端请求中的匹配的请求参数值getProtocol()返回客户端与服务器端通信所用的协议的名称和版本号getReader()返回用于读取字符串形式的请求正文的BufferedReader对象getRemoteAddr()返回客户端IPgetRemoteHost()返回客户端主机名getRemotePort()返回客户端端口号此外,ServletRequest接口还定义了一组用于 在 请求范围内 存取 共享 数据的方法*setAttribute(String name,Object object)在请求范围内保存一个属性 name是属性名 object是属性值*getAttribute(String name)在请求范围内获取一个属性的匹配属性值*removeAttribute(String name)从请求范围内删除一个属性ServletResponse接口中定义了一系列与生成响应结果相关的方法setCharacterEncoding(String charset)设置响应正文的字符编码,默认为ISO-8859-1setContentLenght(int Len)设置响应正文的长度setContentType(String type)设置响应正文的MIME类型getCharacterEncondig()返回响应正文的字符编码getContentType()返回响应正文的MIME类型setBufferSize(int size)设置用于存放响应正文数据的缓冲区大小getBufferSize()返回用于存放响应正文数据的缓冲区大小reset()清空缓冲区内的正文数据,并且清空响应状态代码及响应头resetBuffer()仅仅清空缓冲区内的正文数据flushBuffer()强制性的把缓冲区内的响应正文数据发送到客户端isComitted()缓冲区内的数据是否已经提交给客户端,如果是 返回 truegetOutputStream()返回一个ServletOutputStream对象,Servlet用它来输出二进制的正文数据getWriter()返回一个PrintWriter对象,Servlet用它来输出字符串形式的正文数据?HttpServletRequest接口是ServletRequest的子接口(子类),提供了用于读取HTTP请求中的相关信息的方法getContextPath()返回客户端请求访问的web应用的URL入口getCookies()返回HTTP请求中的所有CookiegetHeader(String name)返回HTTP请求的头部的特定项getHeaderNames()返回一个Enumeration对象,它包含了HTTP请求头部的所有项目名getMethod()返回HTTP请求方式getRequestURI()返回HTTP请求的头部的第1行中的URIgetQueryString()返回HTTP请求中的查询字符串,即URL中的“?”后面的内容HttpServletResponse接口是ServletResponse接口的子接口(子类),提供了与HTTP协议相关的一些方法,来设置HTTP响应头或向客户端写CookieaddHeader(String name,String value)向HTTP响应头中加入一项内容sendError(int sc)向客户端发送一个代表特定错误的HTTP响应状态代码sendError(int sc,String msg)向客户端发送一个代表特定错误的HTTP应状态代码,并且发送具体的错误消息setHeader(String name,String value)设置HTTP响应头中的一项内容。如果响应头中已经存在这项内容,就将其覆盖setStatus(int sc)设置HTTP响应的状态代码addCookie(Cookie cookie)向HTTP响应中加入一个Cookie?ServletConfig接口getInitParameter(String name)根据给定的初始化参数名,返回匹配的初始化参数值getInitParameterNames()返回一个Enumeration对象,里面包含了所有的初始化参数名getServletContext()返回一个ServletContext对象getServletName()返回Servlet的名字,即web.xml中<servlet-name>子元素的值?ServletContext接口,是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象,每个web应用都有唯一的ServletContext对象。ServletContext接口提供的方法分为以下几种类型(1)在web应用范围内存取共享数据的方法setAttribute(String name,Object object)把一个对象与一个属性名绑定,并存放到ServletContext中getAttribute(String name)根据属性名返回匹配的属性值getAttributeNames()返回一个Enumeration对象,该对象包含了所有存放在ServletContext对象中的属性名removeAttribute(String name)根据属性名,从ServletContext中删除匹配的属性(2)访问当前web应用的资源getContextPath()返回当前应用的URL入口getInitParameter(String name)根据给定的参数名,返回web应用范围内的匹配的初始化参数值getInitParameterNames()返回一个Enumeration对象,它包含了web应用范围内的所有初始化参数名getServletContextName()返回web应用的名字,即web.xml中<display-name>元素的值 getRequestDispatcher(String path)返回一个用于向其它web组件转发请求的RequestDispatcher对象(3)访问Servlet容器中的其它web应用