Servlet

Servlet是基于Java语言的Web服务器端编程技术,按照Java EE规范定义,Servlet是运行在Servlet容器中的Java类,它能处理Web客户的HTTP请求,并产生HTTP响应。

Servlet运行在服务器端,由Servlet容器所管理,Servlet容器也叫Servlet引擎,是Web服务器或应用服务器的一部分,用于在发送的请求和响应之上提供网络服务、解码基于MIME的请求、格式化基于MIME的响应。

Servlet是使用Servlet API及相关类和方法的Java程序。

Servlet API包含两个软件包:

  • javax.servlet:定义了所有Servlet类都必须实现或继承的通用接口和类。
  • javax.servlet.http:定义了采用HTTP协议通信的HttpServlet类。

Servlet API的主要接口和类之间的关系

Servlet接口

定义如下:

package javax.servlet;import java.io.IOException;public interface Servlet {public void init(ServletConfig config) throws ServletException;public ServletConfig getServletConfig();public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;public String getServletInfo();public void destroy();
}
  • Servlet接口规定了必须由Servlet类实现并且由Servlet引擎识别和管理的方法集。
  • Servlet接口的基本目标是提供与Servlet生命周期相关的方法,如:init()、service()和destroy()等。

主要方法说明:

方法名称 方法描述
init(ServletConfig config) Servlet初始化方法。在Servlet实例化后,容器调用该方法进行Servlet的初始化。
init()方法只能被调用一次,如果此方法没有正常结束,就会抛出一个ServletException异常。
一旦抛出该异常,Servlet将不再执行,随后对其进行再次调用,容器会重新载入并再次运行init()方法。
service(ServletRequest req,ServletResponse resp) Servlet的服务方法。当用户对Servlet发出请求时容器会调用该方法处理用户的请求。
destroy() Servlet的销毁方法。容器在终止Servlet服务前调用此方法。
容器调用此方法前必须给service()线程足够时间来结束执行,
因此接口规定当service()正在执行时,destroy()不被执行。
getServletConfig() 此方法可以让Servlet在任何时候获得ServletConfig对象。
getServletInfo() 此方法返回一个String对象,该对象包含Servlet的信息,例如:开发者、创建日期、描述信息等。
该方法也可用于容器。

GenericServlet抽象类

  • GenericServlet是一个通用的协议无关的Servlet,它实现了Servlet和ServletConfig接口。
  • GenericServlet继承自Servlet,应该重写service()方法。

主要方法说明:

方法名称 方法描述
public void init(ServletConfig config) 调用Servlet接口中的init()方法。
此方法还有一无参的重载方法,其功能与此方法相同。
public String getInitParameter(String name) 返回名称为name的初始化参数的值。
public ServletContext getServletContext() 返回ServletContext对象的引用。

HttpServlet类

HttpServlet指能够处理HTTP请求的Servlet,它在原有Servlet接口上添加了对HTTP协议的处理,它比Servlet接口的功能更为强大。

主要方法说明:

方法名称 方法描述
service(HttpServletRequest req, HttpServletResponse resp) HttpServlet在实现Servlet接口时,重写了service()方法,该方法会自动判断用户的请求方式。
若为GET请求,则调用HttpServlet的doGet()方法;
若为POST请求,则调用doPost()方法。
因此,开发人员在编写Servlet时,通常只需要重写doGet()或doPost()方法,而不要去重写service方法。
如果Servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。
doGet(HttpServletRequest req, HttpServletResponse resp) 此方法被本类的service()方法调用,用来处理一个HTTP GET 操作。
doPost(HttpServletRequest req, HttpServletResponse resp) 此方法被本类的service()方法调用,用来处理一个HTTP POST 操作。

HttpServlet作为HTTP请求的分发器,除了提供对GET和POST请求的处理外,对于其他请求类型也提供了相应的处理方法(如:doHead()、doOptions()、doDelete()、doPut()、doTrace())

【Servlet】Servlet体系结构相关推荐

  1. Servlet的体系结构 || Servlet相关配置

    Servlet的体系结构         Servlet -- 接口         |     GenericServlet -- 抽象类         |     HttpServlet  -- ...

  2. servlet的体系结构

    Servlet的体系结构 GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象 // // Source code recreated fr ...

  3. [JavaWeb-Servlet]Servlet的体系结构

    Servlet的体系结构 Servlet -- 接口|GenericServlet -- 抽象类|HttpServlet -- 抽象类* GenericServlet:将Servlet接口中其他的方法 ...

  4. Tomcat服务器启动错误之Offending class: javax/servlet/Servlet.class

    引子 最近在基于Wex5项目开发中,遇到使用过程中与Tomcat功能有关的错误提示, 如题所示.最终的解决方法就是删除掉项目上与tomcat冲突的jar包. org.apache.catalina.l ...

  5. 异常处理记录: Servlet class X is not a javax.servlet.Servlet

    异常处理记录: Servlet class X is not a javax.servlet.Servlet 参考文章: (1)异常处理记录: Servlet class X is not a jav ...

  6. ClassCastException: com.gao5805123.servlet.ServletDemo cannot be cast to javax.servlet.Servlet

    ClassCastException: com.gao5805123.servlet.ServletDemo cannot be cast to javax.servlet.Servlet **异常信 ...

  7. javaweb项目,配置servlet后报错:java.lang.ClassCastException: cannot be cast to class javax.servlet.Servlet

    使用maven创建javaweb项目,通过添加依赖的方式来添加servlet-api,版本4.0.1,如下 <dependency><groupId>javax.servlet ...

  8. Spark jar not loaded. Offending class: javax/servlet/Servlet.class

    相关软件版本 Spark1.4.1 ,Hadoop2.6,Scala2.10.5,intelliJ IDEA2014,JDK1.8,Tomcat7 机器及服务: windows7 :包含JDK1.8, ...

  9. jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

    1.错误原因 信息: validateJarFile(/opt/tomcat/webapps/CMP/WEB-INF/lib/servlet-api.jar) - jar not loaded. Se ...

  10. 启动Tomcat报错- jar not loaded. Offending class: javax/servlet/Servlet.class

    完整错误信息: - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servle ...

最新文章

  1. Java文件的状态_java中文件的状态
  2. 计算机机房建设标准.doc,计算机机房建设标准(部分2)
  3. oracle 树状结构一直出现不了_深入解析Oracle ASSM 段头块(PAGETABLE SEGMENT HEADER)结构...
  4. [pytorch、学习] - 4.6 GPU计算
  5. pytorch中的torch.rand(),torch.randn(),torch.randerm()的关系
  6. Android外存的读写
  7. L1-022. 奇偶分家-PAT团体程序设计天梯赛GPLT
  8. zabbix报警系统docker部署,k8s部署,基本使用方法
  9. 【论文阅读】Network In Network
  10. the system requirements are not satisied或Android Studio不支持HAXM
  11. 买哪个股票稳赚,三类股票,可以买了
  12. lighttp 配置php扩展包,Lighttpd配置
  13. 原生JS实现在线音乐播放器及歌词滚动
  14. 【牛奶豆腐汤喝出小蛮腰】
  15. html用来注释的标记,互联网常识:html的注释标记是什么
  16. 高数——隐函数与参数方程求导
  17. html中不写form的后果,html之form
  18. 复旦大学有计算机网络专业,复旦大学计算机网络专业计划..doc
  19. iphone和mac互传文件_怎样快速在iphone与mac之间传文件
  20. 弘辽科技:淘宝新店运营推广的几大技巧

热门文章

  1. element-ui el-radio 回显格式为中文 传值格式为数值
  2. openssl解析国密X509证书
  3. bzoj 2245 [SDOI2011]工作安排【最小费用最大流】
  4. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
  5. linux环境下远程访问ftp
  6. ios学习笔记——RunTime
  7. vs升级c++项目遇到的一些问题
  8. python 函数的参数对应
  9. github上的优秀项目和开发环境配置【转http://www.cnblogs.com/2018/archive/2012/11/09/2763119.html】...
  10. Commerce Server 2002 Starter Site and 2006 overview