doGet() 、 doPost()、service()方法

  doGet()表示,当客户端是使用get方式请求该servlet时,那么就会触发执行doGet()方法中的代码。

  doPost()表示,当客户端是使用post方式请求该servlet时,那么就会触发执行doPost()方法中的代码。

  而service()方法,既可以接收并处理get请求,也可以接收并处理post请求。

  如果这三个方法都被重写时,service()的优先级是高于doGet()和doPost()的,所以,即使客户端使用get或者post方式请求该servlet,但是服务器因为存在service()方法,即使存在doGet()和doPost(),也是会调用service()方法,而不会调用doGet()和doPost()方法的。

  总结来说:如果servlet中有service()方法,那么会优先调用service()方法来处理请求。

package lixin.gan;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SecondServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("收到GET请求");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("收到POST请求");
} @Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
System.out.println("收到请求(GET或者POST)");
}
}

  上面这个代码,无论是get请求,还是post请求,触发的都是service()方法,都会在服务器控制台输出 “收到请求(GET或者POST)”。

重写service()方法,并调用父类service()方法

package lixin.gan;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SecondServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("收到GET请求");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("收到POST请求");
} @Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
System.out.println("收到请求(GET或者POST)");
super.service(req, resp); // 当前servlet的service()处理完之后,再调用父类的service()方法 // 其实super.service()会根据req中的http头信息,判断请求方式,在调用对应的doGet或者doPost
}
}

  运行测试:

// 收到get请求后,控制台的输出
收到请求(GET或者POST)
收到GET请求 // 收到post请求后,控制台的输出
收到请求(GET或者POST)
收到POST请求

  所以,在当前servlet中定义service()方法,并且调用super.service(),那么父类的service()会根据req中的http头信息,判断请求方式,在调用对应的doGet或者doPost。

  一般,我们都不会在当前service()中调用super.service()方法。如果当前servlet没有重写doGet()方法,当客户端发起get请求时,super.service()中调用doGet方法时,就会出现405错误。

Servlet中http错误状态码的产生原因

  404(资源未找到)

  1、客户端发起的请求中,输入的url中的servlet拼写错误,在web.xml中的找不到对应的url-pattern(注意区分大小写)。

  2、客户端发起的请求中,输入的url中的项目名称错误(注意区分大小写)。

  405(请求方式不支持)

  1、假设用户发起post请求,但是servlet中既没有重写service(),也没有重写doPost()方法,此时没有就会出现405错误。

  2、假设用户发起post请求,该servlet中没有重写doPost()方法,但是重写了service()方法,但是又在当前service()中调用super.service(),所以导致super.service()中调用doPost()失败,

  500(服务器内部错误)

  1、在web.xml中servlet的全限定路径拼写错误,web.xml写的是aa.bb类,但是实际的java文件名称是a.b类,导致url-pattern符合规则时,去找对应的class文件时,没有找到。

  2、servlet对象的处理逻辑出现错误,比如0作除数。

Servlet处理GET和POST请求的更多相关文章

  1. Servlet交互【重定向 与 请求分派】详解

    Servlet交互 在serlvet中,需要调用另外一个资源来对浏览器的请求进行响应,两种方式实现: 调用HttpServletResponse.sendRedirect 方法实现 重定向 调用Req ...

  2. Servlet(五):请求转发和重定向

    请求转发: 问题: 服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确. 解决: 使用请求转发. 特点: 一次 ...

  3. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  4. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  5. Servlet的学习之Request请求对象(2)

    在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...

  6. Servlet的学习之Request请求对象(1)

    在本篇中开始对Servlet中的HttpServletRequest请求对象进行学习,请求对象同响应对象一样,我们可以根据该对象中的方法获取例如请求行,请求头和请求实体数据的方法. 在本篇中先对Htt ...

  7. servlet及jsp之间的请求转发

    1.servlet间的请求转发 <dependencies> <dependency> <groupId>javax.servlet</groupId> ...

  8. 巧妙利用JQuery和Servlet来实现跨域请求

    在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...

  9. JQuery和Servlet来实现跨域请求

    在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...

随机推荐

  1. echo '1'.print(2)+3; 的输出结果为什么是511

    今天看到一道有趣的题目,如上所示.结果为什么会是511呢? 这个结果的计算分为三步来理解: 首先计算的是 右边print(2)+3,这个你可以直接理解成print(2+3),得到的结果是5.而prin ...

  2. Dockfile制作镜像

    讲一个简单的案例 @哈希码用来校验,这样子会安全 MAINTANIER可能将会被LABEL代替,仅仅说说明一下镜像信息罢了. 1.首先是我们创建一个镜像 [root@ELK-chaofeng08 ~] ...

  3. C# -- 抽象类与抽象方法

    C#: 抽象类与抽象方法 1.代码 class Program { static void Main(string[] args) { ; i < ; i++) { == ) { Storage ...

  4. 团队作业——UML设计

    Deadline:2017-10-29 20:00(课堂作业) 导言 同学们已经做了需求的分析,也做了详细的系统设计,画过了一些小小的类图/用例图,对自己要做什么应该有比较清晰的认识了.接下来,我们要 ...

  5. linux历史命令查找快捷方式

      一.回到上次操作的目录# cd -进入上次访问目录 二.历史命令搜索操作快捷键:[Ctrl + r], [Ctrl + p], [Ctrl + n] 在终端中按捉 [Ctrl] 键的同时 [r] ...

  6. 使用readAsDataURL方法预览图片

    使用FileReader接口的readAsDataURL方法实现图片的预览. 在FileReader出现之前,前端的图片预览是这样实现的:把本地图片上传到服务器,服务器把图片地址返回,并把它替换到图片 ...

  7. java实现随机四则运算

    使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个 ...

  8. jvm的解释执行与编译执行

    1.原理 字节码无法直接交给硬件执行需要虚拟机翻译成机器码才能执行,“翻译”的策略有两种:解释执行和编译执行又称即使编译(JIT).解释执行是没执行一句字节码的时候把字节码翻译成机器码并执行,优点是启 ...

  9. Edusoho之LAMP环境搭建

    主要参考官方文档Ubuntu16.04+Apache+PHP+MySQL+EduSoho 安装教程LAMP环境按照如下搭建是没有问题的,本地虚拟机试验是完全没有问题的. 1.更新 sudo apt-g ...

  10. face detection[Face R-FCN]

    本文来自<Detecting Faces Using Region-based Fully Convolutional Networks>,又是腾讯ai实验室的作品.时间线为2017年9月 ...