Servlet基本应用Word文档格式.docx
- 文档编号:927866
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:24
- 大小:552.70KB
Servlet基本应用Word文档格式.docx
《Servlet基本应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《Servlet基本应用Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
javax.servlet和javax.servlet.http包为编写servlet提供了接口和类。
所有的servlet都必须实现Servlet接口,该接口定义了生命周期方法。
当实现一个通用的服务时,您可以使用或扩展由Java
Servlet
API提供的GenericServlet类。
HttpServlet类提供了一些方法,诸如doGet和doPost,以用于处理特定于HTTP的服务。
Servlet的中间层的概念图如图1.2.1所示。
图1.2.1Servlet的中间层的概念图
1.2Serlvet的主要接口和类
本节主要介绍开发Servlet需要用到的接口和类。
Servlet接口
定义publicinterfaceServlet这个接口定义了一个Servlet:
一个在Web服务器上继承了这个功能的Java类。
方法1.init()
publicvoidinit(ServletConfigconfig)throwsServletException;
Servlet引擎会在Servlet实例化之后,置入服务之前精确地调用init方法。
在调用service方法之前,init方法必须成功退出。
如果init方法抛出一个ServletException,你不能将这个Servlet置入服务中,如果init方法在超时范围内没完成,我们也可以假定这个Servlet是不具备功能的,也不能置入服务中。
方法2.service()
publicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException;
Servlet引擎调用这个方法以允许Servlet响应请求。
这个方法在Servlet未成功初始化之前无法调用。
在Servlet被初始化之前,Servlet引擎能够封锁未决的请求。
在一个Servlet对象被卸载后,直到一个新的Servelt被初始化,Servlet引擎不能调用这个方法
方法3.destroy()
publicvoiddestroy();
当一个Servlet被从服务中去除时,Servlet引擎调用这个方法。
在这个对象的service方法所有线程未全部退出或者没被引擎认为发生超时操作时,destroy方法不能被调用。
方法4.getServletConfig()
publicServletConfiggetServletConfig();
返回一个ServletConfig对象,作为一个Servlet的开发者,你应该通过init方法存储ServletConfig对象以便这个方法能返回这个对象。
为了你的便利,GenericServlet在执行这个接口时,已经这样做了。
5、getServletInfopublicStringgetServletInfo();
允许Servlet向主机的Servlet运行者提供有关它本身的信息。
返回的字符串应该是纯文本格式而不应有任何标志(例如HTML,XML等)。
2.GenericServlet类
publicabstractclassGenericServletimplementsServlet,ServletConfig,Serializable;
这个类的存在使得编写Servlet更加方便。
它给出了除service()方法外的其他4个方法的简单实现。
GenericServlet类实现了Servlet接口和ServletConfig接口。
它提供了一个简单的方案,这个方案用来执行有关Servlet生命周期的方法以及在初始化时对ServletConfig对象和ServletContext对象进行说明。
3.HttpServlet类
在大部分网络中,都是客户端通过HTTP协议来访问服务器端的资源。
为了快速开发应用于HTTP协议的Servlet类,javax.servlet.http包中提供一个抽象类HttpServlet。
publicclassHttpServletextendsGenericServletimplementsSerializable这是一个抽象类,用来简化HTTPServlet写作的过程。
它是GenericServlet类的扩充,提供了一个处理HTTP协议的框架。
在这个类中的service方法支持例如GET、POST这样的标准的HTTP方法。
这一支持过程是通过分配他们到适当的方法(例如doGet、doPost)来实现的。
方法1.doDelete()
protectedvoiddoDelete(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPDELETE操作。
这个操作允许客户端请求从服务器上删除URL。
这一操作可能有负面影响,对此用户就负起责任。
这一方法的默认执行结果是返回一个HTTPBAD_REQUEST错误。
当你要处理DELETE请求时,你必须重载这一方法。
方法2.doGet()
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPGET操作。
这个操作允许客户端简单地从一个HTTP服务器“获得”资源。
对这个方法的重载将自动地支持HEAD方法。
GET操作应该是安全而且没有负面影响的。
这个操作也应该可以安全地重复。
方法3.doHead()
protectedvoiddoHead(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPHEAD操作。
默认的情况是,这个操作会按照一个无条件的GET方法来执行,该操作不向客户端返回任何数据,而仅仅是返回包含内容长度的头信息。
与GET操作一样,这个操作应该是安全而且没有负面影响的。
这个方法的默认执行结果是自动处理HTTPHEAD操作,这个方法不需要被一个子类执行。
方法4.doOptions()
protectedvoiddoOptions(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPOPTION操作。
这个操作自动地决定支持哪一种HTTP方法。
例如,一个Servlet写了一个HttpServlet的子类并重载了doGet方法,doOption会返回下面的头:
Allow:
GET,HEAD,TRACE,OPTIONS你一般不需要重载这个方法。
方法5.doPost()
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPPOST操作。
这个操作包含请求体的数据,Servlet应该按照他行事。
这个操作可能有负面影响。
例如更新存储的数据或在线购物。
当你要处理POST操作时,你必须在HttpServlet的子类中重载这一方法。
方法6.doPut()
protectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPPUT操作。
这个操作类似于通过FTP发送文件。
当你要处理PUT操作时,你必须在HttpServlet的子类中重载这一方法。
方法7.doTrace()
protectedvoiddoTrace(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
被这个类的service方法调用,用来处理一个HTTPTRACE操作。
这个操作的默认执行结果是产生一个响应,这个响应包含一个反映trace请求中发送的所有头域的信息。
当你开发Servlet时,在多数情况下你需要重载这个方法。
方法8.getLastModified()
protectedlonggetLastModified(HttpServletRequestrequest);
返回这个请求实体的最后修改时间。
为了支持GET操作,你必须重载这一方法,以精确地反映最后修改的时间。
这将有助于浏览器和代理服务器减少装载服务器和网络资源,从而更加有效地工作。
返回的数值是自1970-1-1日(GMT)以来的毫秒数。
默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一个有条件的GET操作使用。
方法9.service()
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;
publicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException;
这是一个Servlet的HTTP-specific方案,它分配请求到这个类的支持这个请求的其他方法。
当你开发Servlet时,在多数情况下你不必重载这个方法。
4.HttpServletRequest接口和HttpServletResponse接口
HttpServletRequest接口和HttpServletResponse接口,分别继承javax.servlet.ServletRequest和javax.servlet.ServletResponse。
下面列HttpServletRequest中的几个方法。
方法1.getAuthType()
publicStringgetAuthType();
返回这个请求的身份验证模式。
方法2.getCookies()
publicCookie[]getCookies();
返回一个数组,该数组包含这个请求中当前的所有cookie。
如果这个请求中没有cookie,返回一个空数组。
方法3.getDateHeader()
publiclonggetDateHeader(Stringname);
返回指定的请求头域的值,这个值被转换成一个反映自1970-1-1日(GMT)以来的精确到毫秒的长整数。
如果头域不能转换,抛出一个IllegalArgumentException。
如果这个请求头域不存在,这个方法返回-1。
方法4.getHeader()
publicStringgetHeader(Stringname);
返回一个请求头域的值。
(译者注:
与上一个方法不同的是,该方法返回一个字符串)如果这个请求头域不存在,这个方法返回-1。
方法5.getHeaderNames()
publicEnumerationgetHeaderNames();
该方法返回一个String对象的列表,该列表反映请求的所有头域名。
有的引擎可能不允许通过这种方法访问头域,在这种情况下,这个方法返回一个空的列表。
方法6.getIntHeader()
publicintgetIntHeader(Stringname);
返回指定的请求头域的值,这个值被转换成一个整数。
方法7.getMethod()
publicStringgetMethod();
返回这个请求使用的HTTP方法(例如:
GET、POST、PUT)
方法8.getPathInfopublicStringgetPathInfo();
这个方法返回在这个请求的URL的Servlet路径之后的请求URL的额外的路径信息。
如果这个请求URL包括一个查询字符串,在返回值内将不包括这个查询字符串。
这个路径在返回之前必须经过URL解码。
如果在这个请求的URL的Servlet路径之后没有路径信息。
这个方法返回空值。
方法9.getPathTranslated()
publicStringgetPathTranslated();
这个方法获得这个请求的URL的Servlet路径之后的额外的路径信息,并将它转换成一个真实的路径。
在进行转换前,这个请求的URL必须经过URL解码。
如果在这个URL的Servlet路径之后没有附加路径信息。
方法10.getQueryString()
publicStringgetQueryString();
返回这个请求URL所包含的查询字符串。
一个查询字串符在一个URL中由一个“?
”引出。
如果没有查询字符串,这个方法返回空值。
方法11.getRemoteUser()
publicStringgetRemoteUser()返回作了请求的用户名,这个信息用来作HTTP用户论证。
如果在请求中没有用户名信息,这个方法返回空值。
方法12.getRequestedSessionId()
publicStringgetRequestedSessionId();
返回这个请求相应的sessionid。
如果由于某种原因客户端提供的sessionid是无效的,这个sessionid将与在当前session中的sessionid不同,与此同时,将建立一个新的session。
如果这个请求没与一个session关联,这个方法返回空值。
方法13.getRequestURI()
publicStringgetRequestURI();
从HTTP请求的第一行返回请求的URL中定义被请求的资源的部分。
如果有一个查询字符串存在,这个查询字符串将不包括在返回值当中。
例如,一个请求通过/catalog/books?
id=1这样的URL路径访问,这个方法将返回/catalog/books。
这个方法的返回值包括了Servlet路径和路径信息。
如果这个URL路径中的的一部分经过了URL编码,这个方法的返回值在返回之前必须经过解码。
方法14.getServletPath()
publicStringgetServletPath();
这个方法返回请求URL反映调用Servlet的部分。
例如,一个Servlet被映射到/catalog/summer这个URL路径,而一个请求使用了/catalog/summer/casual这样的路径。
所谓的反映调用Servlet的部分就是指/catalog/summer。
如果这个Servlet不是通过路径匹配来调用。
这个方法将返回一个空值。
方法15.getSession()
publicHttpSessiongetSession();
publicHttpSessiongetSession(booleancreate);
返回与这个请求关联的当前的有效的session。
如果调用这个方法时没带参数,那么在没有session与这个请求关联的情况下,将会新建一个session。
如果调用这个方法时带入了一个布尔型的参数,只有当这个参数为真时,session才会被建立。
为了确保session能够被完全维持。
Servlet开发者必须在响应被提交之前调用该方法。
如果带入的参数为假,而且没有session与这个请求关联。
这个方法会返回空值。
方法16、isRequestedSessionIdValid()
publicbooleanisRequestedSessionIdValid();
这个方法检查与此请求关联的session当前是不是有效。
如果当前请求中使用的session无效,它将不能通过getSession方法返回。
方法17.isRequestedSessionIdFromCookie()
publicbooleanisRequestedSessionIdFromCookie();
如果这个请求的sessionid是通过客户端的一个cookie提供的,该方法返回真,否则返回假。
方法18.isRequestedSessionIdFromURL()
publicbooleanisRequestedSessionIdFromURL();
如果这个请求的sessionid是通过客户端的URL的一部分提供的,该方法返回真,否则返回假。
请注意此方法与isRequestedSessionIdFromUrl(此方法已被取消)在URL的拼写上不同。
1.3Servlet的生命周期
一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。
Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。
Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。
Servlet引擎提供网络服务,能够理解MIME请求,并提供一个运行Servlet的容器。
javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。
1.Servlet的解析和载入
Servlet引擎解析并载入一个Servlet,这个过程可以发生在引擎启动时,需要一个Servlet去响应请求时,以及在此之间的任何时候。
Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。
2.Servlet的初始化
Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。
在初始化过程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。
这样,Servlet可以对自己进行配置。
init()方法获得了一个Servlet配置对象(ServletConfig)。
这个对象在Servlet引擎中执行,并允许Servlet通过它获处相关参数。
这个对象使得Servlet能够访问ServletContext对象。
3.Servlet处理请求
Servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描述成一个ServletRequest对象,Servlet的响应被描述成一个ServletResponse对象。
当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。
Servlet也可以执行ServletRequest接口和ServletResponse接口。
ServletRequest接口使得Servlet有权使用客户端发出的请求。
Servlet可以通过ServletInputStream对象读取请求信息。
ServletResponse接口允许Servlet建立响应头和状态代码。
通过执行这个接口,Servlet有权使用ServletOutputStream类来向客户端返回数据。
4.多线程和映射
在多线程的环境下,Servlet必须能处理许多同时发生的请求。
例外的情况是这个Servlet执行了SingleThreadModel接口,如果是那样的话,Servlet只能同时处理一个请求。
Servlet依照Servlet引擎的映射来响应客户端的请求。
一个映射对包括一个Servlet实例以及一个Servlet返回数据的URL,例如:
HelloServletwith/hello/i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet 基本 应用