servlet和jsp精要打印.docx
- 文档编号:10484938
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:68
- 大小:68.46KB
servlet和jsp精要打印.docx
《servlet和jsp精要打印.docx》由会员分享,可在线阅读,更多相关《servlet和jsp精要打印.docx(68页珍藏版)》请在冰点文库上搜索。
servlet和jsp精要打印
API参考
Servlet
javax.servlet.Servlet定义所有servlet都必须实现的方法。
servlet是运行在Web服务器中的小型Java程序。
servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。
要实现此接口,可以编写一个扩展javax.servlet.GenericServlet的一般servlet,或者编写一个扩展javax.servlet.http.HttpServlet的HTTPservlet。
此接口定义了初始化servlet的方法、为请求提供服务的方法和从服务器移除servlet的方法。
这些方法称为生命周期方法,它们是按以下顺序调用的:
1.构造servlet,然后使用init方法将其初始化;2.处理来自客户端的对service方法的所有调用;3.从服务中取出servlet,然后使用destroy方法销毁它,最后进行垃圾回收并终止它。
除了生命周期方法之外,此接口还提供了getServletConfig方法和getServletInfo方法,servlet可使用前一种方法获得任何启动信息,而后一种方法允许servlet返回有关其自身的基本信息,比如作者、版本和版权。
publicinterfaceServlet{
publicvoidinit(ServletConfigconfig)throwsServletException;//由servlet容器调用,指示将该servlet放入服务。
servlet容器仅在实例化servlet之后调用init方法一次。
在servlet可以接收任何请求之前,init方法必须成功完成。
servlet容器无法将servlet放入服务,如果init方法:
抛出ServletException;未在Web服务器定义的时间段内返回。
publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;//由servlet容器调用,以允许servlet响应某个请求。
此方法仅在servlet的init()方法成功完成之后调用。
应该为抛出或发送错误的servlet设置响应的状态代码。
servlet通常运行在可同时处理多个请求的多线程servlet容器中。
开发人员必须知道要同步对所有共享资源(比如文件、网络连接以及servlet的类和实例变量)的访问。
publicvoiddestroy();//由servlet容器调用,指示将从服务中取出该servlet。
此方法仅在servlet的service方法已退出或者在过了超时期之后调用一次。
在调用此方法之后,servlet容器不会再对此servlet调用service方法。
此方法为servlet提供了一个清除持有的所有资源(比如内存、文件句柄和线程)的机会,并确保任何持久状态都与内存中该servlet的当前状态保持同步。
publicServletConfiggetServletConfig();//返回ServletConfig对象,该对象包含此servlet的初始化和启动参数。
返回的ServletConfig对象是传递给init方法的对象。
此接口的实现负责存储ServletConfig对象,以便此方法可以返回该对象。
实现此接口的GenericServlet类已经这样做了。
publicStringgetServletInfo();//返回有关servlet的信息,比如作者、版本和版权。
此方法返回的字符串应该是纯文本,不应该是任何种类的标记(比如HTML、XML,等等)。
}
GenericServlet
javax.servlet.GenericServlet定义一般的、与协议无关的servlet。
要编写用于Web上的HTTPservlet,请改为扩展javax.servlet.http.HttpServlet。
GenericServlet实现Servlet和ServletConfig接口。
servlet可以直接扩展GenericServlet,尽管扩展特定于协议的子类(比如HttpServlet)更为常见。
GenericServlet使编写servlet变得更容易。
它提供生命周期方法init和destroy的简单版本,以及ServletConfig接口中的方法的简单版本。
GenericServlet还实现log方法,在ServletContext接口中对此进行了声明。
要编写一般的servlet,只需重写抽象service方法即可。
publicabstractclassGenericServletimplementsServlet,ServletConfig,java.io.Serializable{
privatetransientServletConfigconfig;//
publicGenericServlet(){}//不执行任何操作。
所有servlet初始化都由init方法中的一个方法来完成。
publicvoidinit(ServletConfigconfig)throwsServletException;//由servlet容器调用,指示将放入服务中的servlet。
此实现存储它从servlet容器中获得的ServletConfig对象,以便将来使用。
在重写方法的这种形式时,调用super.init(config)。
publicvoidinit()throwsServletException;//可重写的便捷方法,这样就不必调用super.init(config)。
不用重写#init(ServletConfig),只需重写此方法即可,它由GenericServlet.init(ServletConfigconfig)调用。
仍然可以通过#getServletConfig获取ServletConfig对象。
publicabstractvoidservice(ServletRequestreq,ServletResponseres)//由servlet容器调用,以允许servlet响应某个请求。
此方法已声明为抽象方法,因此子类(比如HttpServlet)必须重写它。
throwsServletException,IOException;//
publicvoiddestroy(){}//由servlet容器调用,指示将从服务中取出的servlet。
publicStringgetInitParameter(Stringname);//返回包含指定初始化参数的值的String,如果参数不存在,则返回null。
提供此方法是为了方便使用。
该方法从servlet的ServletConfig对象获取指定参数的值。
publicEnumeration
publicServletConfiggetServletConfig();//返回此servlet的ServletConfig对象。
publicServletContextgetServletContext();//返回对此servlet在其中运行的ServletContext的引用。
该方法从servlet的ServletConfig对象获取上下文。
publicStringgetServletInfo();//返回有关servlet的信息,比如作者、版本和版权。
默认情况下,此方法返回一个空字符串。
重写此方法使其返回有意义的值。
publicvoidlog(Stringmsg);//将前置有servlet名称的指定消息写入servlet日志文件。
publicStringgetServletName();//返回此servlet实例的名称。
}
HttpServlet
javax.servlet.http.HttpServlet供将要被子类化以创建适用于Web站点的HTTPservlet的抽象类。
HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果servlet支持HTTPGET请求;doPost,用于HTTPPOST请求;doPut,用于HTTPPUT请求;doDelete,用于HTTPDELETE请求;init和destroy,用于管理servlet的生命周期内保存的资源;getServletInfo,servlet使用它提供有关其自身的信息。
几乎没有理由重写service方法。
service通过将标准HTTP请求分发给每个HTTP请求类型的处理程序方法(上面列出的doXXX方法)来处理它们。
同样,几乎没有理由重写doOptions和doTrace方法。
servlet通常运行在多线程服务器上,因此应该意识到servlet必须处理并发请求并小心地同步对共享资源的访问。
共享资源包括内存数据(比如实例或类变量)和外部对象(比如文件、数据库连接和网络连接)。
publicabstractclassHttpServletextendsGenericServlet{
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理GET请求。
重写此方法以支持GET请求,也就自动支持了HTTPHEAD请求。
HEAD请求是一个返回响应中没有正文、只有请求头字段的GET请求。
重写此方法时,读取请求数据、写入响应头、获取响应的编写者或输出流对象,最后,写入响应数据。
最好包括内容类型和编码。
使用PrintWriter对象返回响应时,在访问PrintWriter对象之前设置内容类型。
提交响应前,servlet容器必须写入响应头,因为在HTTP中响应头必须在响应正文之前发送。
如有可能,应设置Content-Length头(使用javax.servlet.ServletResponse#setContentLength方法),以允许servlet容器使用持久连接向客户端返回响应,从而改进性能。
如果响应缓冲区能够容纳整个响应,则自动设置内容长度。
使用HTTP1.1存储块编码时(这意味着响应具有Transfer-Encoding头),不要设置Content-Length头。
GET方法应该是安全的,也就是说,没有需要用户负责的任何副作用。
例如,大多数形式查询没有副作用。
如果某个客户端请求用于更改存储数据,则该请求应该使用某个其他HTTP方法。
GET方法还应该是幂等的,这意味着可以安全地重复使用它。
有时使某个方法是安全的也会使其成为幂等的。
例如,重复查询既是安全的,又是幂等的,但在线购买某个产品或修改数据则既不是安全的又不是幂等的。
如果不正确地格式化请求,则doGet将返回一条HTTP"BadRequest"消息。
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理POST请求。
HTTPPOST方法允许客户端一次将不限长度的数据发送到Web服务器,这在发送诸如信用卡号之类的信息时很有用。
此方法不需要是安全的或幂等的。
通过POST请求的操作可能产生用户需要负责的副作用,例如,更新存储数据或在线购买商品。
如果不正确地格式化HTTPPOST请求,则doPost返回一条HTTP"BadRequest"消息。
protectedlonggetLastModified(HttpServletRequestreq);//返回上次修改HttpServletRequest对象的时间,该时间是自格林威治标准时间1970年1月1日午夜起经过的毫秒数。
如果该时间是未知的,则此方法返回一个负数(默认值)。
支持HTTPGET请求并且可以快速确定其上次修改时间的servlet应该重写此方法。
这使浏览器和代理缓存更有效地工作,减少服务器和网络资源上的负载。
protectedvoiddoHead(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//接收来自受保护service方法的HTTPHEAD请求并处理该请求。
当客户端只想看到响应的头(比如Content-Type或Content-Length)时,它可以发送一个HEAD请求。
HTTPHEAD方法计算响应中的输出字节数,以便准确设置Content-Length头。
如果重写此方法,可以避免计算响应正文而仅直接设置响应头,从而提高性能。
确保编写的doHead方法是既安全又幂等的(也就是说,保护它自己不被一个HTTPHEAD请求多次调用)。
protectedvoiddoPut(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理PUT请求。
PUT操作允许客户端将文件放在服务器上,类似于通过FTP发送文件。
在重写此方法时,随请求一起发送的所有内容头都要保持原样,这些内容头包括Content-Length、Content-Type、Content-Transfer-Encoding、Content-Encoding、Content-Base、Content-Language、Content-Location、Content-MD5和Content-Range。
如果某个方法无法处理内容头,则它必须发出一条错误消息(HTTP501-NotImplemented)并丢弃该请求。
有关HTTP1.1的更多信息,请参见RFC2616。
此方法不需要是安全的或幂等的。
doPut执行的操作可能具有用户需要负责的副作用。
使用此方法时,在临时存储器中保存受影响URL的副本可能会很有用。
protectedvoiddoDelete(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理DELETE请求。
DELETE操作允许客户端从服务器中移除文档或Web页面。
此方法不需要是安全的或幂等的。
通过DELETE请求的操作可能具有用户需要负责的副作用。
使用此方法时,在临时存储器中保存受影响URL的副本可能会很有用。
protectedvoiddoOptions(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理OPTIONS请求。
OPTIONS请求可确定服务器支持哪些HTTP方法,并返回相应的头。
例如,如果servlet重写doGet,则此方法返回以下头:
Allow:
GET,HEAD,TRACE,OPTIONS。
无需重写此方法,除非servlet实现了HTTP1.1实现的那些方法以外的新HTTP方法。
protectedvoiddoTrace(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//由服务器调用(通过service方法),以允许servlet处理TRACE请求。
TRACE将随TRACE请求一起发送的头返回给客户端,以便在调试中使用它们。
无需重写此方法。
protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException;//接收来自publicservice方法的标准HTTP请求,并将它们分发给此类中定义的doXXX方法。
此方法是javax.servlet.Servlet#service方法的特定于HTTP的版本。
无需重写此方法。
@Overridepublicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;//将客户端请求分发给受保护的service方法。
无需重写此方法。
@WebServlet
javax.servlet.annotation.WebServlet@WebServlet用于将一个类声明为Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。
该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是vlaue或者urlPatterns通常是必需的,且二者不能共存,如果同时指定,通常是忽略value的取值)
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)
public@interfaceWebServlet{
Stringname()default"";//指定Servlet的name属性,等价于
如果没有显式指定,则该Servlet的取值即为类的全限定名。
String[]value()default{};//该属性等价于urlPatterns属性。
两个属性不能同时使用。
String[]urlPatterns()default{};//指定一组Servlet的URL匹配模式。
等价于
intloadOnStartup()default-1;//指定Servlet的加载顺序,等价于
设置大于0的值表示启动应用程序后就要初始化Servlet,数字代表了Servlet的初始化顺序,Web容器必须保证有较小数字的Servlet先初始化。
WebInitParam[]initParams()default{};//指定一组Servlet初始化参数,等价于
booleanasyncSupported()defaultfalse;//声明Servlet是否支持异步操作模式,等价于
StringsmallIcon()default"";//Servlet的小图标
StringlargeIcon()default"";//Servlet的大图标
Stringdescription()default"";//该Servlet的描述信息,等价于
StringdisplayName()default"";//该Servlet的显示名,通常配合工具使用,等价于
}
@WebInitParam
javax.servlet.annotation.WebInitParam该注解通常不单独使用,而是配合@WebServlet或者@WebFilter使用。
它的作用是为Servlet或者过滤器指定初始化参数,这等价于web.xml中
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented
public@interfaceWebInitParam{
Stringname();//指定参数的名字,等价于
Stringvalue();//指定参数的值,等价于
Stringdescription()default"";//关于参数的描述,等价于
}
ServletConfig
javax.servlet.ServletConfigservlet容器使用的servlet配置对象,该对象在初始化期间将信息传递给servlet。
publicinterfaceServletConfig{
publicStringgetServletName();//返回此servlet实例的名称。
该名称可能是通过服务器管理提供的,在Web应用程序部署描述符中分配,或者对于未注册(和未命名)的servlet实例,该名称将是该servlet的类名称。
publicServletContextgetServletContext();//返回对调用者在其中执行操作的ServletContext的引用。
publicStringgetInitParameter(Stringname);//返回包含指定初始化参数的值的String,如果参数不存在,则返回null。
publicEnumeration
}
ServletContext
javax.servlet.ServletContext定义一组方法,servlet使用这些方法与其servlet容器进行通信,例如,获取文件的MIME类型、分发请求或写入日志文件。
每个Java虚拟机的每个“Web应用程序”都有一个上下文。
(“Web应用程序”是servlet和内容的Collection,这些servlet和内容安装在服务器的URL名称空间(比如/catalog)的特定子集下,并且可能通过.war文件安装。
)如果Web应用程序在其部署描述符中标记为"distributed",那么每个虚拟机都将有一个上下文实例。
在这种情况下,不能将上下文用作共享全局信息的位置(因为该信息不会是真正全局共享的)。
请使用外部资源(如数据库)替代。
ServletContext对象包含在ServletConfig对象中,ServletConfig对象在初始化servlet时由Web服务器提供给servlet。
publicinterfaceServletContext{
publicstaticfinalStringTEMPDIR="javax.servlet.cont
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- servlet jsp 精要 打印