该接口定义了以下5个方法
1. init()
2. service()
3. destroy()
4. setServletConfig()
5. getServletInfo()
也就意味着,若是咱们要经过实现Servlet接口来编写Servlet类,须要实现Servlet接口中定义的5个方法,这样编写比较麻烦,因而有了GenericServlet抽象类。java
该类定义了一个通用的、不依赖于具体协议的Servlet,他实现了Servlet接口和ServletConfig接口。
因为该类给出了除了service()
方法的其余4个方法的简单实现。因此,经过继承GenericServlet来编写Servlet类,只须要实现service()方法便可。服务器
大多数的网络应用中,都是客户端经过HTTP协议去访问服务器端的资源,而咱们所编写的Servlet也主要用于HTTP协议的请求和响应。为了快速开发应用于HTTP协议的Servlet类,Sun公司在javax.servlet.http包中给咱们提供了一个抽象的类HttpServlet,它继承自GenericServlet类,用于建立适合Web站点的HTTP Servlet。网络
另外,针对HTTP1.1中定义的7种请求方法GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS,HttpServlet分别提供了7个处理方法: doGet()
,doPost()
,doHead()
,doPut()
,doDelete()
,doTrace()
,doOptions()
当容器接收到一个针对HttpServlet对象的请求时,调用该对象中的方法的顺序以下:
1. 调用公共(public) service()
方法。
2. 在公共的 service()
方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,而后调用保护的(protected) service()
方法,将转换后的HttpServletRequest对象和HttpServletResponse对象做为参数传递进去。
3. 在保护的service()
方法中,首先调用HttpServletRequest对象的getMethod()
方法,获取HTTP请求方法的名字,而后跟去请求方法的类型,调用相应的doXxx()
方法。spa
所以咱们在编写HttpServlet派生类的时候,通常不须要去覆盖service()
方法,而只须要重写相应的doXxx()
方法便可。日志
HttpServlet对这7种方法的实现:
1. TRACE和OPTIONS作了适当实现,不须要去覆盖。
2. 其余5个提供的实现都是返回HTTP错误。code
Servlet由Servlet容器管理,当用户请求到来时,容器建立一个ServletRequest对象,封装请求数据,同时建立一个ServletResponse对象,封装响应数据。这两个对象被容器做为service()
方法的参数传递给Servlet,Servlet利用ServletRequest对象获取客户端发送来的请求数据,利用ServletResponse对象发送响应数据。对象
对于HttpServletRequest对象和HttpServletResponse对象分别继承与ServletRequest对象和ServletResponse对象,而且在原有方法基础上新增一些方法。但都是用做封装请求数据和响应数据。继承
Servlet容器使用ServletConfig对象在Servlet初始化期间向它传递配置信息,一个Servlet只有一个ServletConfig对象。
在ServletConfig接口中,只定义了4个方法:
1.getInitParameter()
2. getInitParameterNames()
3. getServletContext()
接口
4. getServletName()
资源
运行在Java虚拟机中的每个Web应用程序都有一个与之相关的Servlet上下文。Java Servlet API提供了一个ServletContext接口用来表示上下文。在这个接口中定义了一组方法,Servlet可使用这些方法与它的Servlet容器进行通讯。例如,获得文件的MIME类型,转发请求,或者向日志文件中写入日志信息。
Servlet容器在Web应用程序加载时建立ServletContext对象,做为Web应用程序的运行时表示,ServletContext对象能够被应用程序中全部的Servlet所访问。
获得ServletContext对象的方法:
1. 经过ServletConfig对象的getServletContext()
方法获得。
2. GenericServlet类的getServletContext()
方法获得(其实质也是调用ServletConfig对象的getServletContext()
方法获得的)。
实现请求转发是经过RequestDispatcher接口实现的
获得RequestDispatcher对象的方法:
1. 利用ServletRequest接口中的RequestDispatcher()
方法
2. 利用ServletContext接口中的getNamedDispatcher()
方法
3. 利用ServletContext接口中的getRequestDispatcher()
方法
请求转发的两种方法:
1. forward()
2. include()
二者区别在于,利用include()
方法将请求转发给其余的Servlet,被调用的Servlet对该请求做出的响应将并入原先的响应对象中,原先的Servlet还能够继续输出响应信息。而利用forward()
方法将请求转发给其余的Servlet,将由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。
另外还能够经过HttpServletResponse接口的sendRedirect()方法利用另外的资源来为客户端进行服务。
sendRedirect()不但能够在位于同一个主机上的不一样Web应用程序之间进行重定向,并且能够将客户端重定向到其余服务器上的Web应用程序资源。
Servlet API 中主要接口及实现类,包括: