service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

下面是该方法的特征:

public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}

service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

/*     */   protected void service(HttpServletRequest req, HttpServletResponse resp)
/* */ throws ServletException, IOException
/* */ {
/* 568 */ String method = req.getMethod();
/* */
/* 570 */ if (method.equals("GET")) {
/* 571 */ long lastModified = getLastModified(req);
/* 572 */ if (lastModified == -1L)
/* */ {
/* */
/* 575 */ doGet(req, resp);
/* */ } else {
/* 577 */ long ifModifiedSince = req.getDateHeader("If-Modified-Since");
/* 578 */ if (ifModifiedSince < lastModified / 1000L * 1000L)
/* */ {
/* */
/* */
/* 582 */ maybeSetLastModified(resp, lastModified);
/* 583 */ doGet(req, resp);
/* */ } else {
/* 585 */ resp.setStatus(304);
/* */ }
/* */ }
/* */ }
/* 589 */ else if (method.equals("HEAD")) {
/* 590 */ long lastModified = getLastModified(req);
/* 591 */ maybeSetLastModified(resp, lastModified);
/* 592 */ doHead(req, resp);
/* */ }
/* 594 */ else if (method.equals("POST")) {
/* 595 */ doPost(req, resp);
/* */ }
/* 597 */ else if (method.equals("PUT")) {
/* 598 */ doPut(req, resp);
/* */ }
/* 600 */ else if (method.equals("DELETE")) {
/* 601 */ doDelete(req, resp);
/* */ }
/* 603 */ else if (method.equals("OPTIONS")) {
/* 604 */ doOptions(req, resp);
/* */ }
/* 606 */ else if (method.equals("TRACE")) {
/* 607 */ doTrace(req, resp);
/* */
/* */
/* */ }
/* */ else
/* */ {
/* */
/* */
/* 615 */ String errMsg = lStrings.getString("http.method_not_implemented");
/* 616 */ Object[] errArgs = new Object[1];
/* 617 */ errArgs[0] = method;
/* 618 */ errMsg = MessageFormat.format(errMsg, errArgs);
/* */
/* 620 */ resp.sendError(501, errMsg);
/* */ }
/* */ }

HttpServlet Service方法的更多相关文章

  1. 关于httpServlet.service()步骤

    关于httpServlet.service()步骤 关于()方法 1.HTTP Servlet 使用一个 HTML 表格来发送和接收数据.要创建一个 HTTP Servlet,就需要扩展 HttpSe ...

  2. HttpServlet中service方法的源码解读

    前言     最近在看<Head First Servlet & JSP>这本书, 对servlet有了更加深入的理解.今天就来写一篇博客,谈一谈Servlet中一个重要的方法-- ...

  3. httpservlet类中两个service方法

    在浏览器访问html页面时,当数据提交给servlet时发生了什么,这是我们需要了解的. 1.我们需要了解一下servlet的继承体系. servlet接口 ------->GenericSer ...

  4. Servlet生命周期中的service方法分析

    问题ServletLifeCycle中的service方法内,有super.service(request, response); 会执行this.doGet(HttpServletRequest r ...

  5. Servlet中Service方法

    doGet方法只能处理Get方式提交的请求,doPost则可以处理Post方式提交的请求, 一种既可以处理Get方式又可以处理Post方式的提交的请求,它就是Service方法. service方法用 ...

  6. Servlet中service()方法

    在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽 ...

  7. (转) 为什么不应该重写service方法?

    故事通常是这样开始的: 从前,有一个程序猿,他语重心长地对孙子说:“孩子,要是你以后写servlet,最好不要重写service方法啊” 孙子大为不解,程序猿又说:“听爷爷的,准没错,爷爷的爷爷就是这 ...

  8. servlet学习记录:Servlet中的service()方法

    Servlet的生存时间是由init,service,destory方法构成,这里分析一下service这个方法 Servlet接口中定义了一个service()方法,而我们一般是使用HttpServ ...

  9. 为什么不应该重写service方法?

      故事通常是这样开始的: 从前,有一个程序猿,他语重心长地对孙子说:“孩子,要是你以后写servlet,最好不要重写service方法啊” 孙子大为不解,程序猿又说:“听爷爷的,准没错,爷爷的爷爷就 ...

随机推荐

  1. eos交易同步过程和区块生产过程源码分析

    交易同步过程 1 通过命令cleos调用 cleos transfer ${from_account} ${to_account} ${quantity} 发起交易2 eos调用chain_plugi ...

  2. 变量&常量

    变量:variables 存储数据,以被后面的程序调用,可以看作是:装信息的容器: 变量的作用:(1)标记数据(2)存储数据 变量定义规范1.声明变量:定义变量   name = "Mr H ...

  3. Python 基础数据类型之set

    set是一个无序且不重复的元素集合,相当于字典的键,不重复,不可变 一.set变量初始化 A = set() #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典 B = {&q ...

  4. python 获取自身ip

    原文 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  5. Spark记录-Scala语法基础

    参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...

  6. Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)

    Scala条件运算符 Scala条件运算符在下表中列出. 运算符 操作 描述 && 与 运算符左侧和右侧的值为true.仅当左侧为真时,右侧才被计算. || 或 左侧或右侧的至少一个值 ...

  7. 浅谈 JSON 那些被转义的字符们

    其实,之前我一直以为 JSON 会把 ASCII 可显示字符以外的统统转义为 Unicode,直到有一次我用 JSON.stringify 才发现,其实是 PHP 为我们想的太周到了. 我以前是一位 ...

  8. js拾遗: 函数字面量

    今天落叶同学发我一篇文章,我看到一个"新"名词 "函数字面量" (也可叫直接量),当时我就郁闷了,这是什么东西? 我怎么没听说过..回头翻了下权威指南,在第 4 ...

  9. 转:VMWare服务器虚拟化--转自CSDN

    http://blog.csdn.net/kkfloat/article/category/1249845/3

  10. 数据库SQL中case when函数的用法

    Case具有两种格式,简单Case函数和Case搜索函数.这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 简单Cas ...