首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java Servlet接口及运用

2013-08-13 
java Servlet接口及应用java Servlet接口及应用 ???基本类和接口?一、javax.servlet.Servlet接口?servlet抽

java Servlet接口及应用

java Servlet接口及应用 ?

?

?

基本类和接口

?

一、javax.servlet.Servlet接口

?

servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。

Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。

?

?

servlet接口中的方法 ? ? ??

void init(ServletConfit config)throws ServletException ? ?在servlet被载入后和实施服务前由servlet引擎进行?次

?

性调用。如果init()产生溢出UnavailableException,则servle退出服务。 ? ? ??

ServletConfig getServletConfig() ? ?返回传递到servlet的init()方法的ServletConfig对象 ? ? ??

void service(ServletRequest request, ServletResponse response)throws ServletException,IOException ? ?处理

?

request对象中描述的请求,使用response对象返回请求结果 ? ? ??

String getServletInfo() ? ? ? ?返回描述servlet的一个字符串 ? ? ??

void destory() ? ? ? ?当servlet将要卸载时由servlet引擎调用 ? ?

?

二、javax.servlet.GenericServlet类(协议无关版本)

?

GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后

?

台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。

servlet API提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省

?

实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。

除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到

?

init()方法中的ServletConfig对象的方法。

?

?

GenericServlet类中的方法 ? ? ??

void destory() ? ?编飞组成单词“destory”的一个注册入口 ? ? ??

String getInitParameter(String name) ? ?返回具有指定名称的初始化参数值。通过凋用

?

config.getInitParameter(name)实现。 ? ? ??

Enumeration getInitParameterNames() ? ?返回此serv]et已编码的所有初始化参数的?个枚举类型值。调用

?

config.getInitParameterNames()获得列表。如果未提供初始化参数,则返回?个空的枚举类型值(但不是null) ? ? ??

ServletConfig getServletConfig() ? ?返回传递到init()方法的ServletConfig对象 ? ? ??

ServletContext getServletContext() ? ?返回在config对象中引用的ServletContext ? ? ??

String getServletInfo() ? ?返回空字符串 ? ? ??

void init(ServletConfig config)throws ServletException ? ?在一实例变量中保存config对象。编写组成单词“init

?

”的注册入口,然后调用方法init() ? ? ??

void init()throws ServletException ? ?可以被跳过以处理servlet初始化.在config对象被保存后init(ServletConfig

?

config)的结尾处自动被调用.servlet作者经常会忘记调用super.init(config) ? ? ? ?

void log(String msg) ? ?编写注册servlet的入口.为此调用servlet上下文的log()方法.servlet的名字被加到消息文本

?

的开头。 ? ? ??

void log(String msg,Throwable t) ? ?编写一个入口和servlet注册的栈轨迹。此方法也是ServletContext中相应方法的

?

一个副本。 ? ? ??

abstract void service(Request request,Response response)throws ServletException,IOException ? ?由servlet引

?

擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方

?

法。 ? ? ??

String getServletName() ? ?返回在Web应用发布描述器(web.xml)中指定的servlet的名字。 ? ?

?

三、javax.servlet.http.HttpServlet类(HTTP版本)

?

虽然servlet API允许扩展到其它协议,但最终所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展了

?

GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet。

HttpServlet类通过调用指定到HTTP请求方法的方法实现service(),亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和

?

TRACE,分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对

?

象置入其HTTP指定子类。

?

?

?

HttpServlet类中的方法 ? ? ??

Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ??

?

由servlet引擎调用用处理一个HTTP GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和response

?

对象的输出流中获得。 ? ? ??

Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ??

?

由servlet引擎调用用处理一个HTTP POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和response

?

对象的输出流中获得。 ? ? ??

Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ??

?

由servlet引擎调用用处理一个HTTP PUT请求。本方法中请求URI指出被载入的文件位置。 ? ? ??

Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ?

?

?由servlet引擎调用用处理一个HTTP DELETE请求。请求URI指出资源被删除。 ? ? ??

Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException?

?

? 由servlet引擎调用用处理一个HTTP OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个

?

servlet不需要覆盖此方法,因为HttpServlet方法已经实现规范所需的功能。 ? ? ??

Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ??

?

由servlet引擎调用用处理一个HTTP TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法,因为

?

HttpServlet方法已经实现HTTP规范所需的功能。 ? ? ??

Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException ??

?

Service(Request request,Response response)调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导

?

向doGet()、doPost()等等。不应该覆盖此方法。 ? ? ??

Void service(Request request,Response response)throws ServletException,IOException ? ?将请求和响应对象置入

?

其指定的HTTP子类,并调用指定HTTP的service()方法。 ? ?

?

四、javax.servlet.ServletRequest类(协议无关版本)

?

ServletRequest接口封装了客户端请求的细节。它与协议无关,并有一个指定HTTP的子接口。

ServletRequest主要处理:

1.找到客户端的主机名和IP地址

2.检索请求参数

3.取得和设置属性

4.取得输入和输出流

?

?

ServletRequest类中的方法 ? ? ??

Object getAttribute(String name) ? ?返回具有指定名字的请求属性,如果不存在则返回null。属性可由servlet引擎设

?

置或使用setAttribute()显式加入。 ? ? ??

Enumeration getAttributeName() ? ?返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。 ? ? ??

String getCharacteEncoding() ? ?返回请求所用的字符编码。 ? ? ??

Int getContentLength() ? ?指定输入流的长度,如果未知则返回-1。 ? ? ??

ServletInputStream getInputStream()throws IOException ? ?返回与请求相关的(二进制)输入流。可以调用

?

getInputStream()或getReader()方法之一。 ? ? ??

String getParameter(String name) ? ?返回指定输入参数,如果不存在,返回null。 ? ? ??

Enumeration getParameterName() ? ?返回请求中所有参数名的一个可能为空的枚举。 ? ? ??

String[] getParameterValues(String name) ? ?返回指定输入参数名的取值数组,如果取值不存在则返回null。它在参

?

数具有多个取值的情况下十分有用。 ? ? ??

String get Protocol() ? ?返回请求使用协议的名称和版本。 ? ? ??

String getScheme() ? ?返回请求URI的子串,但不包含第一个冒号前的内容。 ? ? ??

String getServerName() ? ?返回处理请求的服务器的主机名。 ? ? ??

String getServerPort() ? ?返回接收主机正在侦听的端口号。 ? ? ??

BufferedReader getReader()throws IOException ? ?返回与请求相关输入数据的一个字符解读器。此方法与

?

getInputStream()只可分别调用,不能同时使用。 ? ? ??

String getRemoteAddr() ? ?返回客户端主机的数字型IP地址。 ? ? ??

String getRemoteHost() ? ?如果知道,返回客户端主机名。 ? ? ??

void setAttribute(String name,Object obj) ? ?以指定名称保存请求中指定对象的引用。 ? ? ??

void removeAttribute(String name) ? ?从请求中删除指定属性 ? ? ??

Locale getLocale() ? ?如果已知,返回客户端的第一现场或者为null。 ? ? ??

Enumeration getLocales() ? ?如果已知,返回客户端的第一现场的一个枚举,否则返回服务器第一现场。 ? ? ??

boolean isSecure() ? ?如果请求使用了如HTTPS安全隧道,返回true ? ? ??

RequestDispatcher getRequestDispatcher(String name) ? ?返回指定源名称的RequsetDispatcher对象。

?

servlet-api的基本类和其接口介绍 (2) ?

?

五、javax.servlet.http.HttpServletRequest接口(HTTP版本)

?

HttpServletRequest类主要处理:

1.读取和写入HTTP头标

2.取得和设置cookies

3.取得路径信息

4.标识HTTP会话。

?

?

HttpServletRequest接口中的方法 ? ? ??

String getAuthType() ? ?如果servlet由一个鉴定方案所保护,如HTTP基本鉴定,则返回方案名称。 ? ? ??

String getContextPath() ? ?返回指定servlet上下文(web应用)的URL的前缀。 ? ? ??

Cookie[] getCookies() ? ?返回与请求相关cookie的一个数组。 ? ? ??

Long getDateHeader(String name) ? ?将输出转换成适合构建Date对象的long类型取值的getHeader()的简化版。 ? ? ??

String getHeader(String name) ? ?返回指定的HTTP头标指。如果其由请求给出,则名字应为大小写不敏感。 ? ? ??

Enumeration getHeaderNames() ? ?返回请求给出的所有HTTP头标名称的权举值。 ? ? ??

Enumeration getHeaders(String name) ? ?返回请求给出的指定类型的所有HTTP头标的名称的枚举值,它对具有多取值的

?

头标非常有用。 ? ? ??

int getIntHeader(String name) ? ?将输出转换为int取值的getHeader()的简化版。 ? ? ??

String getMethod() ? ?返回HTTP请求方法(例如GET、POST等等) ? ? ??

String getPathInfo() ? ?返回在URL中指定的任意附加路径信息。 ? ? ??

String getPathTranslated() ? ?返回在URL中指定的任意附加路径信息,被子转换成一个实际路径。 ? ? ??

String getQueryString() ? ?返回查询字符串,即URL中?后面的部份。 ? ? ??

String getRemoteUser() ? ?如果用户通过鉴定,返回远程用户名,否则为null。 ? ? ??

String getRequestedSessionId() ? ?返回客户端的会话ID ? ? ??

String getRequestURI() ? ?返回URL中一部分,从“/”开始,包括上下文,但不包括任意查询字符串。 ? ? ??

String getServletPath() ? ?返回请求URI上下文后的子串 ? ? ??

HttpSession getSession() ? ?调用getSession(true)的简化版。 ? ? ??

HttpSession getSession(boolean create) ? ?返回当前HTTP会话,如果不存在,则创建一个新的会话,create参数为

?

true。 ? ? ??

Principal getPrincipal() ? ?如果用户通过鉴定,返回代表当前用户的java.security.Principal对象,否则为null。 ?

?

? ??

boolean isRequestedSessionIdFromCookie() ? ?如果请求的会话ID由一个Cookie对象提供,则返回true,否则为false。

?

? ? ??

boolean isRequestedSessionIdFromURL() ? ?如果请求的会话ID在请求URL中解码,返回true,否则为false ? ? ??

boolean isRequestedSessionIdValid() ? ?如果客户端返回的会话ID仍然有效,则返回true。 ? ? ??

Boolean isUserInRole(String role) ? ?如果当前已通过鉴定用户与指定角色相关,则返回true,如果不是或用户未通过

?

鉴定,则返回false。 ? ?

?

六、javax.servlet.ServletResponse接口(协议无关版本)

?

ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容

?

类型和长度的包容器,它由servlet引擎创建.

?

?

ServletResponse接口中的方法 ? ? ??

void flushBuffer()throws IOException ? ?发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此

?

方法发送状态行和响应头标,以确认请求。 ? ? ??

int getBufferSize() ? ?返回响应使用的缓存大小。如果缓存无效则返加0。 ? ? ??

String getCharacterEncoding() ? ?返回响应使用字符解码的名字。除非显式设置,否则为ISO-8859-1 ? ? ??

Locale getLocale() ? ?返回响应使用的现场。除非用setLocale()修改,否则缺省为服务器现场。 ? ? ??

OutputStream getOutputStream()throws IOException ? ?返回用于将返回的二进制输出写入客户端的流,此方法和

?

getWrite()方法二者只能调用其一。 ? ? ??

Writer getWriter()throws IOException ? ?返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和

?

getOutputStream()二者只能调用其一。 ? ? ??

boolean isCommitted() ? ?如果状态和响应头标已经被发回客户端,则返回true,在响应被确认后发送响应头标毫无作用

?

。 ? ? ??

void reset() ? ?清除输出缓存及任何响应头标。如果响应已得到确认,则引发事件IllegalStateException。 ? ? ??

void setBufferSize(int nBytes) ? ?设置响应的最小缓存大小。实际缓存大小可以更大,可以通过调用getBufferSize()

?

得到。如果输出已被写入,则产生IllegalStateException。 ? ? ??

void setContentLength(int length) ? ?设置内容体的长度。 ? ? ??

void setContentType(String type) ? ?设置内容类型。在HTTP servlet中即设置Content-Type头标。 ? ? ??

void setLocale(Locale locale) ? ?设置响应使用的现场。在HTTP servlet中,将对Content-Type头标取值产生影响。 ?

?

?

?

七、javax.servlet.http.HttpServletResponse接口(HTTP版本)

?

HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解

?

码。

?

?

HttpServletResponse接口中的方法 ? ? ??

void addCookie(Cookie cookie) ? ?将一个Set-Cookie头标加入到响应。 ? ? ??

void addDateHeader(String name,long date) ? ?使用指定日期值加入带有指定名字(或代换所有此名字头标)的响应头

?

标的方法。 ? ? ??

void setHeader(String name,String value) ? ?设置具有指定名字和取值的一个响应头标。 ? ? ??

void addIntHeader(String name,int value) ? ?使用指定整型值加入带有指定名字的响应头标(或代换此名字的所有头

?

标)。 ? ? ??

boolean containsHeader(String name) ? ?如果响应已包含此名字的头标,则返回true。 ? ? ??

String encodeRedirectURL(String url) ? ?如果客户端不知道接受cookid,则向URL加入会话ID。第一种形式只对在

?

sendRedirect()中使用的URL进行调用。其他被编码的URLs应被传递到encodeURL() ? ? ??

String encodeURL(String url) ? ? ? ? ??

void sendError(int status) ? ?设置响应状态码为指定值(可选的状态信息)。HttpServleetResponse定义了一个完整

?

的整数常量集合表示有效状态值。 ? ? ??

void sendError(int status,String msg) ? ? ? ? ??

void setStatus(int status) ? ?设置响应状态码为指定指。只应用于不产生错误的响应,而错误响应使用sendError()。

?

?

servlet-api的基本类和其接口介绍 (3) ?

?

八、javax.servlet.ServletContext接口

?

一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)唯一

?

映射到文件系统的一个目录。

一个servlet可以通过ServletConfig对象的getServletContext()方法得到servlet上下文的引用,如果servlet直接或间接

?

调用子类GenericServlet,则可以使用getServletContext()方法。

Web应用中servlet可以使用servlet上下文得到:

1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。

2.读取Web应用中文件内容和其他静态资源的功能。

3.互相发送请求的方式。

4.记录错误和信息化消息的功能。

?

?

ServletContext接口中的方法 ? ? ??

Object getAttribute(String name) ? ?返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。从

?

Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。或上下文中任意其他

?

servlet访问。 ? ? ??

void setAttribute(String name,Object obj) ? ?设置servlet上下文中具有指定名字的对象。 ? ? ??

Enumeration getAttributeNames() ? ?返回保存在servlet上下文中所有属性名字的枚举。 ? ? ??

ServletContext getContext(String uripath) ? ?返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以“/

?

”开头的绝对路径。 ? ? ??

String getInitParameter(String name) ? ?返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一

?

样,后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。 ? ? ??

Enumeration getInitParameterNames() ? ?返回(可能为空)指定上下文范围的初始化参数值名字的枚举值。 ? ? ??

int getMajorVersion() ? ?返回此上下文中支持servlet API级别的最大和最小版本号。 ? ? ??

int getMinorVersion() ? ? ? ? ??

String getMimeType(String fileName) ? ?返回指定文件名的MIME类型。典型情况是基于文件扩展名,而不是文件本身的

?

内容(它可以不必存在)。如果MIME类型未知,可以返回null。 ? ? ??

RequestDispatcher getNameDispatcher(String name) ? ?返回具有指定名字或路径的servlet或JSP的RequestDispatcher

?

。如果不能创建RequestDispatch,返回null。如果指定路径,必须心“/”开头,并且是相对于servlet上下文的顶部。 ?

?

? ??

RequestDispatcher getNameDispatcher(String path) ? ? ? ? ??

String getRealPath(String path) ? ?给定一个URI,返回文件系统中URI对应的绝对路径。如果不能进行映射,返回null

?

。 ? ? ??

URL getResource(String path) ? ?返回相对于servlet上下文或读取URL的输入流的指定绝对路径相对应的URL,如果资源

?

不存在则返回null。 ? ? ??

InputStream getResourceAsStream(String path) ? ? ? ? ??

String getServerInfo() ? ?返顺servlet引擎的名称和版本号。 ? ? ??

void log(String message)

void log(String message,Throwable t) ? ?将一个消息写入servlet注册,如果给出Throwable参数,则包含栈轨迹。 ??

?

? ?

void removeAttribute(String name) ? ?从servlet上下文中删除指定属性。 ? ?

?

九、javax.servlet.http.HttpSession接口

?

HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了

?

一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并

?

使之对当前请求可用。

?

?

HttpSession接口中的方法 ? ? ??

Object getAttribute(String name) ? ?将会话中一个对象保存为指定名字,返回或删除前面保存的此名称对象。 ? ? ??

void setAttribute(String name,Object value) ? ? ? ? ??

void removeAttribute(String name) ? ? ? ? ??

Enumeration getAttributeName() ? ?返回捆绑到当前会话的所有属性名的枚举值。 ? ? ??

long getCreationTime() ? ?返回表示会话创建和最后访问日期和时间的一个长整型,该整型形式为java.util.Date()构

?

造器中使用的形式。 ? ? ??

long getLastAccessedTime() ? ? ? ? ??

String getId() ? ?返回会话ID,servlet引擎设置的一个唯一关键字。 ? ? ??

ing getMaxInactiveInterval() ? ?如果没有与客户端发生交互,设置和返回会话存活的最大秒数。 ? ? ??

void setMasInactiveInterval(int seconds) ? ? ? ? ??

void invalidate() ? ?使得会话被终止,释放其中任意对象。 ? ? ??

boolean isNew() ? ?如果客户端仍未加入到会话,返回true。当会话首次被创建,会话ID被传入客户端,但客户端仍未进

?

行包含此会话ID的第二次请示时,返回true。

?

example:

?

package com.zqy.test.servlet;

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HttpServletHeaders 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 bgcolor="white">");

? out.println("<head>");

? out.println("<body>");

? out.println("<h3>Headers</h3>");

? out.println("<table border=0>");

? Enumeration e=request.getHeaderNames();

? while(e.hasMoreElements())

? {

? ?String headerName=(String)e.nextElement();

? ?String headerValue=request.getHeader(headerName);

? ?out.println("<tr><td>");

? ?out.println(headerName);

? ?out.println("</td><td>");

? ?out.println(headerValue);

? ?out.println("</td></tr>");

? }

? out.println("</table>"); ?

?}

?

?public void doPost(HttpServletRequest request,HttpServletResponse response) throws

?

IOException,ServletException

?{

? doGet(request,response);

?}

}

?

  可以用下面的配置描述符配置Servlet。如下所示,与前面出现的并不完全相同。

?

?程序代码

<?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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

?

<servlet>

<servlet-name>HttpServletHeaders</servlet-name>

<servlet-class>com.zqy.test.servlet.HttpServletHeaders</servlet-class>

</servlet>

?

<servlet-mapping>

<servlet-name>HttpServletHeaders</servlet-name>

<url-pattern>/HttpServletHeaders</url-pattern>

</servlet-mapping>

</web-app>

热点排行