Servlet API
来源:互联网 发布:支付宝知托付 广告 编辑:程序博客网 时间:2024/05/21 20:24
二、servlet/jsp的网络拓扑图
三、Servlet的开发流程(以Tomcat为例,纯手工建立)
1、在%TOMCAT_HOME%\webapps下 WEB-INF的文件夹建立classes、lib目录,classes目录存放编译后的文件,lib目录存放要用到的外部库文件,另外创建一个很重要的文件:web.xml。web.xml是网站的配置文件,配置了网站的相关内容和servlet的信息,通过这个文件Tomcat知道系统有哪些 servlet,以及如何调用这些servlet。
2、开发servlet(引入servlet-api.jar。J2SE中的JDK不包括这个库文件,要从Tomcat或J2EE等其他途径去拷贝),实现servlet的相关接口,其中重要的三个接口init()、service()、 destroy()就代表了servlet的生命周期。
3、部署servlet,在web.xml文件中添加配置信息
4、启动Tomcat,访问servlet
....................................................................................
一、Servlet API结构
Servlet API包含两个包:javax.servlet包与javax.servlet.http包。
1)javax.servlet包中定义的类和接口是独立于协议的。
2)javax.servlet.http中包含了具体于HTTP协议的类和接口。
3)javax.servlet.http包中的某些类或接口继承了某些javax.servlet包中的类或接口。
1、Servlet主要类结构
1)Servlet
Servlet:Servlet接口,包括初始化方法init、销毁方法destroy和请求处理方法service,可通过init方法获得ServletConfig实例
GenericServlet:基础Servlet类,对Servlet一些常用的方法做简单的封装
HttpServlet:HTTP协议相关的Servlet类,将服务方法拆分成doGet、doPost、doDelete等
ServletConfig:可通过ServletConfig获得相关的Servlet的配置信息和获得应用全局上下文信息
2)全局环境
ServletContext:ServletContext 接口定义了servlet运行环境的信息,通过该对象servlet能够获得log事件,资源的URL,设置或存储servlet之间通信的变量。对于每个web应用,在每个java虚拟机上有且只有一个ServletContext实例
3)请求
ServletRequest:代表了Web请求的对象,通过该对象可以获取到请求内容、参数、请求客户端相关数据等
HttpServletRequest:除ServletRequest的功能之外,增加一些跟http相关的功能,譬如获取Cookie、Head信息等
ServletResponse:代表了Web响应的对象,通过该对象可以设置响应的内容等
HttpServletResponse:除ServletResponse的功能之外,增加一些跟http相关的功能,譬如Cookie、响应码等
HttpSession:超文本转移协议(HTTP)是无状态的协议,servlet规范中提供了一个简单的HttpSession接口,不需要开发者关心会话跟踪的具体细节,可通过该接口处理会话相关的功能
2、Servlet中重要的类和接口
1)在javax.servlet包中的GenericServlet类封装了Servlet的基本特征和功能。它实现了Servlet和ServletConfig接口。该类中的service()方法是抽象方法,所有子类都应当实现这个方法。
2)在javax.servlet.http包中的HttpServlet类是 GenericServlet的子类,该类提供了处理HTTP协议的基本架构。在继承HttpServlet的Servlet类中不仅仅可以使用 HttpServlet类中提供的方法,而且还可以使用在Servlet、ServletConfig接口和GenericServlet类中定义的一些方法。
二、servlet的生命周期
基本类和接口
一、javax.servlet.Servlet接口
servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。
Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。
servlet接口中的方法
void init(ServletConfit config)throws ServletException
ServletConfig getServletConfig()
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException
String getServletInfo()
void destory()
GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。
servlet API提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。
除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。
GenericServlet类中的方法
void destory()
String getInitParameter(String name)
Enumeration getInitParameterNames()
ServletConfig getServletConfig()
ServletContext getServletContext()
String getServletInfo()
void init(ServletConfig config)throws ServletException
void init()throws ServletException
void log(String msg)
void log(String msg,Throwable t)
abstract void service(Request request,Response response)throws ServletException,IOException
String getServletName()
虽然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
Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
Void service(Request request,Response response)throws ServletException,IOException
ServletRequest接口封装了客户端请求的细节。它与协议无关,并有一个指定HTTP的子接口。
ServletRequest主要处理:
1.找到客户端的主机名和IP地址
2.检索请求参数
3.取得和设置属性
4.取得输入和输出流
ServletRequest类中的方法
Object getAttribute(String name)
Enumeration getAttributeName()
String getCharacteEncoding()
Int getContentLength()
ServletInputStream getInputStream()throws IOException
String getParameter(String name)
Enumeration getParameterName()
String[] getParameterValues(String name)
String get Protocol()
String getScheme()
String getServerName()
String getServerPort()
BufferedReader getReader()throws IOException
String getRemoteAddr()
String getRemoteHost()
void setAttribute(String name,Object obj)
void removeAttribute(String name)
Locale getLocale()
Enumeration getLocales()
boolean isSecure()
RequestDispatcher getRequestDispatcher(String name)
五、javax.servlet.http.HttpServletRequest接口(HTTP版本)
HttpServletRequest类主要处理:
1.读取和写入HTTP头标
2.取得和设置cookies
3.取得路径信息
4.标识HTTP会话
HttpServletRequest接口中的方法
String getAuthType()