Servlet APIjavasky.docx
- 文档编号:25056655
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:26
- 大小:26.53KB
Servlet APIjavasky.docx
《Servlet APIjavasky.docx》由会员分享,可在线阅读,更多相关《Servlet APIjavasky.docx(26页珍藏版)》请在冰豆网上搜索。
ServletAPIjavasky
ServletAPI
(1)publicvoidinit(ServletConfigconfig)
作用:
在Servlet实例化之后,Servlet容器会调用init(),来初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化的工作。
例如:
建立数据库的连接,获取配置信息等。
对于每一个Servlet实例,init()方法只能被调用一次。
init()方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。
Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数。
另外,在Servlet中,还可以通过它获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。
(2)publicvoidservice(ServletRequestrequest,ServletResponseresponse)
作用:
容器调用service()方法来处理客户端的请求。
要注意的是,在service()方法被容器调用之前,必须确保init()方法正确完成。
容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()方法。
在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
(3)publicvoiddestroy()
作用:
当容器检测到一个Servlet对象应该从服务器中被移除的时候,容器会调用该对象的destroy()方法,以便让Servlet对象可以释放它所使用的资源,保存数据到持久存储设备中,例如:
将内存中的数据保存到数据库中,关闭数据库的连接等。
当需要释放内存或者容器关闭时,容器就会调用Servlet对象的destroy()方法。
在Servlet容器调用destroy()方法前,如果还有其他的线程正在service()方法中执行,容器会等待这些线程执行完毕或等待服务器设定的超时值到达。
一旦Servlet对象的destroy()方法被调用,容器不会再把其他的请求发送给该对象。
如果需要该Servlet再次为客户端服务,容器将会重新产生一个Servlet对象来处理客户端的请求。
在destroy()方法调用之后,容器会释放这个Servlet对象,在随后的时间内,该对象会被Java的垃圾收集器所回收。
(4)publicServletConfiggetServletConfig()
作用:
该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。
(5)publicStringgetServletInfo()
作用:
返回一个String类型的字符串,其中包括了关于Servlet的信息,例如,作者、版本和版权。
该方法返回的应该是纯文本字符串,而不是任何类型的标记(HTML、XML)等。
ServletRequest
(1)publicObjectgetAttribute(Stringname)
作用:
该方法返回以name为名字的属性的值。
如果该属性不存在,该方法将返回null。
(2)publicEnumerationgetAttributeNames()
作用:
该方法返回请求中所有可用的属性的名字。
如果在请求中没有属性,该方法将返回一个空的枚举集合。
(3)publicvoidremoveAttribute(Stringname)
作用:
该方法移除请求中名字为name的属性。
(4)publicvoidsetAttribute(Stringname,Objectobj)
作用:
该方法在请求中保存名字为name的属性。
如果请求没有指定字符编码,该方法将返回null.
(5)publicStringgetCharacterEncoding()
作用:
该方法返回请求正文使用的字符编码的名字。
如果请求没有指定字符编码,该方法将返回null.
(6)publicStringgetContentType()
作用:
返回请求正文的MIME类型。
如果类型不可知,该方法返回null.
(7)publicintgetContentLength()
作用:
以字节为单位,返回请求正文的长度。
如果长度不可知,该方法返回-1.
(8)publicServletInputStreamgetInputStream()
作用:
返回一个输入流,使用该输入流以二进制数据方式读取请求正文的内容。
ServletInputStream是一个抽象类,继承至java.io.InputStream.
(9)publicStringgetLocalAddr()
作用:
返回接收到请求的网络接口的IP地址。
(10)publicStringgetLocalName()
作用:
返回接收到请求的IP接口的主机名。
(11)publicintgetLocalPort()
作用:
返回接收到请求的网络接口的IP端口号。
(12)publicStringgetParameter(Stringname)
作用:
返回请求中name参数的值。
如果name参数有多个值,那么该方法将返回值列表中的第一个值。
如果请求中没有找到这个参数,该方法将返回null.
(13)publicEnumerationgetParameterNames()
作用:
返回请求中包含的所有的参数的名字。
如果请求中没有参数,该方法将返回一个空的枚举集合。
(14)publicString[]getParameterValues(Stringname)
作用:
返回请求中name参数所有的值。
如果这个参数在请求中并不存在,该方法将返回null.
(15)publicStringgetProtocol()
作用:
返回请求使用的协议的名字和版本,例如:
HTTP/1.1
(16)publicBufferedReadergetReader()
作用:
返回BufferedReader对象,以字符数据方式读取请求正文。
(17)publicStringgetRemoteAddr()
作用:
返回发送请求的客户端或者最后一个代理服务器的IP地址。
(18)publicStringgetRemoteHost()
作用:
返回发送请求的客户端或者最有一个代理服务器的完整限定名。
(19)publicintgetRemotePort()
作用:
返回发送请求的客户端或者最后一个代理服务器的IP源端口。
(20)publicRequestDispatchergetRequestDispatcher(Stringpath)
作用:
返回RequestDispatcher对象,作为path所定位的资源的封装。
(21)publicStringgetServerName()
作用:
返回请求发送到服务器的主机名。
(22)publicvoidsetCharacterEncoding(Stringenv)
作用:
该方法覆盖在请求正文中所使用的字符编码的名字。
ServletResponse
(1)publicvoidflushBuffer()
作用:
该方法强制把任何在缓存中的内容发送到客户端。
(2)publicintgetBuffer()
作用:
该方法返回实际用于响应的缓存的大小。
如果没有缓存,该方法将返回0.
(3)publicStringgetCharacterEncoding()
作用:
返回在响应中发送到的正文所使用的字符编码(MIME字符集)。
(4)publicStringgetContentType()
作用:
返回在响应中发送的正文所使用的MIME类型。
(5)publicServletOutputStreamgetOutputStream()
作用:
返回ServletOutputStream对象,用于在响应中写入二进制数据。
ServletOutputStream是一个抽象方类,继承至java.io.OutputStream。
(6)publicPrintWritergetWriter()
作用:
返回PrintWriter对象,用于发送字符文本到客户端。
PrintWriter对象使用getCharacterEncoding()方法返回的字符编码。
如果没有指定响应的字符编码方式,默认将使用ISO-8859-1。
(7)publicbooleanisCommitted()
作用:
返回一个boolean值,指示是否已经提交了响应。
(8)publicvoidreset()
作用:
清除在缓存中的任何数据,包括状态代码和信息报头。
如果响应已经被提交,该方法将抛出IllegalStateException异常。
(9)publicvoidresetBuffer()
作用:
清除在缓存中的响应内容,保留状态代码和消息报头。
如果响应已经被提交,该方法将抛出IllegalStateException异常。
(10)publicvoidsetBufferSize(intsize)
作用:
该方法设置响应正文的缓存大小。
Servlet容器将使用一个缓存,其大小至少是请求的尺寸大小。
该方法必须在响应正文被写入之前调用,如果内容已经被写入或者响应对象已经被提交,该方法将抛出IllegalStateException异常。
(11)publicvoidsetCharacterEncoding(Stringcharset)
作用:
该方法设置发送到客户端的响应的字符编码,例如:
UTF-8.
(12)publicvoidsetContentLength(intlen)
作用:
对于HTTPServlet,在响应中,设置内容正文的长度,该方法设置HTTPContent-Length实体报头。
(13)publicvoidsetContentType(Stringtype)
作用:
该方法设置发送到客户端的响应的内容类型,此时响应应该还没有提交。
给出的内容类型可以包括字符编码说明,例如:
text/html;charset=UTF-8。
如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。
该方法如果在getWriter()方法被调用之后后者在响应被提交之后调用,将不会设置响应的字符编码。
在使用HTTP协议的情况中,该方法设置Content-Type实体报头。
GenericServlet
如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现Servlet接口中定义的5种方法,为了简化Servlet编写,在javax.servlet包中,给我们提供了一个抽象的类GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。
GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。
(1)publicabstractclassGenerciServletextendsjava.lang.ObjectimplementsServlet,ServletConfig,java.io.Serializable
如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service().
(2)在GenericServlet类中,提供了两种重载的init()方法:
publicvoidinit(ServletConfigconfig)throwsServletException
publicvoidinit()throwsServletException
第一种init()方法是Servlet接口中init()方法的实现。
在这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们编写继承自GenericServlet的Servlet类时,只需要重写第二种不带参数的init()方法就可以了。
如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码的调用。
HttpServlet
(1)protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
(2)protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
(3)doHead()doPut()doDelete()doTrace()doOptions()
当容器接收到一个针对HttpServlet对象的请求时,调用该对象的方法顺序如下:
1)调用公共的(public)service()方法
2)在公共的service()方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,然后调用保护的(protected)service()方法,将转换后的HttpServletRequest对象和HttpServletReponse对象作为参数传递进去。
3)在保护的service()方法中,首先调用HttpServletRequest对象的getMethod()方法,获取HTTP请求方法的名字,然后根据请求方法的类型,调用相应的doXXX()方法。
因此我们在编写HttpServlet的派生类时,通常不需要去覆盖service()方法,而只需要重写相应的doXXX()方法。
HttpServletRequest接口中新增的常用方法
(1)publicStringgetContextPath()
作用:
该方法返回请求URI中表示请求上下文的部分。
例如:
请求URI为”/sample/test”,调用该方法返回路径为”/sample”
(2)publicCookie[]getCookies()
作用:
该方法返回客户端在此次请求中发送的所有Cookie对象。
(3)publicStringgetHeader(Stringname)
作用:
该方法返回名字为name的请求报头的值。
如果请求中没有包含指定名字的报头,该方法返回null。
(4)publicEnumerationgetHeaderNames()
作用:
该方法返回此次请求中包含的所有报头名字的枚举集合。
(5)publicEnumerationgetHeaders(Stringname)
作用:
返回名字为name的请求报头所有的值的枚举集合。
(6)publicStringgetMethod()
作用:
返回此次请求所使用的HTTP方法的名字,例如GET,POST或PUT.
(7)publicStringgetPathInfo()
作用:
返回与客户端发送的请求URL相联系的额外的路径信息。
额外的路径信息跟在Servlet的路径之后,查询字符串之前的路径,并以斜杠(/)字符开始。
例如:
客户端请求的URL是http:
//localhost:
8080/javasky/myservlet/test,其中Servlet的路径是http:
//localhost:
8080/javasky/myservlet,在这种情况下,getPathInfo()将返回/test。
如果没有额外的路径信息,该方法返回null.
(8)publicStringgetPathTranslated()
作用:
该方法将额外的路径信息转换为真实的路径。
例如:
在上面的例子中,如果myservlet类位于D:
\tomcat\webapps\javasky\WEB-INF\classes目录下,该方法将返回D:
\tomcat\webapps\javasky\test
(9)publicStringgetQueryString()
作用:
该方法返回URL中在路径后的查询字符串。
如果在URL中没有查询字符串,该方法返回null.例如:
有如下的请求URL:
http:
//localhost:
8080/javasky/login.jsp?
action=login
调用getQueryString()方法将返回action=login
(10)publicStringgetRequestURI()
作用:
该方法返回在HTTP请求行中请求URI的一部分。
例如:
请求行返回值
POST/some/path.htmlHTTP/1.1/some/path.html
GEThttp:
//foo.bar/a.htmlHTTP/1.0/a.html
HEAD/xyz?
a=bHTTP/1.1/xyz
(11)publicStringBuffergetRequestURL()
作用:
该方法重新构造客户端用于产生请求的URL.返回的URL包括了协议、服务器的名字,端口号和服务器的路径,但是不包括查询字符串参数。
(12)publicStringgetServletPath()
作用:
该方法返回请求URI中调用Servlet的部分。
这部分的路径以斜杠(/)开始,包括了Servlet的名字或路径,但是不包括额外的路径信息和查询字符串。
在上面的例子中,这个方法将返回/myservlet。
如果要用于处理请求的Servlet与URL样式”/*”相匹配,那么这个方法将返回空字符串(“”).
(13)publicHttpSessiongetSession()
作用:
该方法返回和此次请求相关联的Session,如果没有给客户端分配Session,则创建一个新的Session.
(14)publicHttpSessiongetSession(booleancreate)
作用:
该方法返回和此次请求相关联的Session,如果没有给客户端分配Session,而create参数为true,则创建一个新的Session。
如果create参数为false,而此次请求没有一个有效的HttpSession,则返回null。
HttpServletResponse新增的方法
(1)publicvoidaddCookie(Cookiecookie)
作用:
该方法增加一个Cookie到响应中。
该方法可以被多次调用用于设置多个Cookie.
(2)publicvoidaddHeader(Stringname,Stringvalue)
作用:
该方法用给出的name和value,增加一个响应报头到响应中。
(3)publicbooleancontainsHeader(Stringname)
作用:
该方法判断以name为名字的响应报头是否已经设置。
(4)publicStringencodeRedirectURL(Stringurl)
作用:
该方法使用SessionID对指定的url进行编码,以便用于sendRedirect()方法中。
如果该url不需要编码,则返回未改变的url。
(5)publicStringencodeURL(Stringurl)
作用:
该方法使用SessionID对指定的url进行编码。
如果该url不需要编码,则返回未改变的url。
(6)publicvoidsendError(intsc)
作用:
该方法使用参数sc表示的状态代码发送一个错误响应到客户端。
服务器默认会创建一个包含了指定消息的服务器端错误页面作为响应,设置内容类型为”text/html”。
如果Web应用程序已经声明了对应于指定状态代码的错误页面,则服务器会将这个页面发送给客户端,而不理会参数msg指示的错误消息。
如果响应已经被提交,这个方法将抛出IllegalStateException异常。
(7)publicvoidsendRedirect()
作用:
该方法发送一个临时的重定向响应到客户端,让客户端访问重新定位的URL。
如果指定的位置是相对URL,Servlet容器在发送响应到客户端之前,必须将相对URL转换为绝对URL。
如果响应已经被提交,该方法将抛出IllegalStateException异常。
(8)publicvoidsetHeader(Stringname,Stringvalue)
作用:
该方法用给出的name和value,设置一个响应报头。
如果这个报头已经被设置,新的值将覆盖先前的值。
(9)publicvoidsetStatus(intsc)
作用:
该方法为响应设置状态代码.
ServletConfig
(1)publicEnumerationgetInitParameterNames()
作用:
该方法返回Servlet所有初始化参数的名字的枚举集合。
如果Servlet没有初始化参数,该方法将返回一个空的枚举集合.
(2)publicServletContextgetServletContext()
作用:
该方法返回Servlet上下文对象的引用。
(3)publicStringgetServletName()
作用:
该方法返回Servlet实例的名字。
这个名字是在Web应用程序的部署描述符中指定的。
如果是一个没有登记的Servlet实例,该方法返回的将是Servlet的类名.
(4)publicStringgetInitParameter(Stringname)
作用:
该方法返回名字为name的初始化参数的值,初始化参数在web.xml配置文件中进行配置。
如果参数不存在,该方法将返回null。
Servlet异常
在javax.servlet包中定义了两个异常类:
ServletException和UnavailableException。
ServletException类
ServletException类定义了一个一般的异常,可以被init()、service()和doXXX()方法抛出,这个类提供了4种构造方法和1种实例方法。
(1)publicServletException()
该方法构造一个新的Servlet异常
(2)publicServletException(java.lang.Stringmessage)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet APIjavasky