大多数Web应用都是通过HTTP和客户端进行交互
因此,在Servlet接口中,提供了一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类,专门用于创建应用于HTTP的Servlet

查看HttpServlet类的源代码
首先,从Tomcat的lib文件中,找到Servlet的jar包——servlet-api.jar
查看jar包,使用压缩软件打开jar包,找到HttpServlet.class类文件

查看class文件,直接使用idea打开

代码如下

public abstract class HttpServlet extends GenericServlet {public HttpServlet() {}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {……   }protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {……}protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getMethod();long lastModified;if (method.equals("GET")) {lastModified = this.getLastModified(req);if (lastModified == -1L) {this.doGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader("If-Modified-Since");} catch (IllegalArgumentException var9) {ifModifiedSince = -1L;}if (ifModifiedSince < lastModified / 1000L * 1000L) {this.maybeSetLastModified(resp, lastModified);this.doGet(req, resp);} else {resp.setStatus(304);}}} else if (method.equals("HEAD")) {lastModified = this.getLastModified(req);this.maybeSetLastModified(resp, lastModified);this.doHead(req, resp);} else if (method.equals("POST")) {this.doPost(req, resp);} else if (method.equals("PUT")) {this.doPut(req, resp);} else if (method.equals("DELETE")) {this.doDelete(req, resp);} else if (method.equals("OPTIONS")) {this.doOptions(req, resp);} else if (method.equals("TRACE")) {this.doTrace(req, resp);} else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[]{method};errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(501, errMsg);}}public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {HttpServletRequest request;HttpServletResponse response;try {request = (HttpServletRequest)req;response = (HttpServletResponse)res;} catch (ClassCastException var6) {throw new ServletException("non-HTTP request or response");}this.service(request, response);}

代码说明
可以发现,HttpServlet主要有两大功能
一、根据用语请求方式的不同,定义相应的doXXX()方法,处理用户请求,比如
与GET请求方式对应的doGet()方法
与POST请求方式对应的doPost()方法
二、通过service()方法,将HTTP请求和响应分别转为HttpServletRequest和HttpServletResponse类型的对象

注意
由于,HttpServlet类在重写的service()方法中,为每一个HTTP请求方式,都定义了对应的doXXX()方法,因此,当定义的类继承HttpServlet之后,只需要根据请求方式,重写对应的doXXX()方法,即可,而不需要重写service()方法

Servlet中的HttpServlet相关推荐

  1. servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  2. java中的doget_java servlet中doGet()和doPost()方法的用法和区别

    一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全.而且doGet方法只能提交256个字符(1024字节),而doPost没有限制,因为get方 ...

  3. 利用抽象工厂创建DAO、利用依赖注入去除客户端对工厂的直接依赖、将有关Article的各种Servlet封装到一个Servlet中(通过BaseServlet进行

    利用抽象工厂创建DAO.利用依赖注入去除客户端对工厂的直接依赖.将有关Article的各种Servlet全部封装到一个Servlet中(通过BaseServlet来进行ArticleServlet方法 ...

  4. 在Servlet中向客户端写Cookie信息

    应用Servlet API中提供的Cookie类,用户把表单信息提交给Servlet后,在Servlet中获取用户请求的信息并添加到Cookie对象中,再通过HttpServletResponse对象 ...

  5. 在Servlet中处理表单提交的数据

    Servlet的主要功能是处理客户端的表单请求数据,在Servlet中首先对这些数据进行验证,可能会封装到JavaBean,接下来调用数据库的业务逻辑方法将数据保存或者进行其他操作,最后Servlet ...

  6. 在Servlet中实现页面转发

    在Servlet中实现页面转发,使用的是RequestDispatcher对象的forward()方法,可以在Servlet中通过forward()方法将当前的请求转发到其他Web组件 index.j ...

  7. Servlet中如何获取param-name对应的值?

    一个web.xml,配置一个servlet如下 <servlet> <servlet-name>BeerParamTests</servlet-name> < ...

  8. java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数

    web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...

  9. 任意java程序都可以是servlet吗_C#从Java servlet中获取文件流实现任意文件下载

    目的: 从C#创建的客户端中向Java创建的servlet提交请求(不知道这是否算作严格的CS架构),servet返回一个文件流( 任意格式的文件 ),然后通过C#获取该文件流并保存到本地,使得文件可 ...

最新文章

  1. atitit.ajax bp dwr 3.的注解方式配置使用流程总结.....
  2. OpenCV cv :: UMat与DirectX9曲面的互操作性的实例(附完整代码)
  3. 继承练习 :开发一个系统时 需要对员工进行建模 员工包含3个属性 姓名 工号 工资 功能 work
  4. linux 其他参数
  5. 到现在还说房价不可能跌的都是些什么样的人?
  6. AE CS6 安装后启动报错BUG解决
  7. ubuntu设置虚拟显示器且远程连接
  8. centos7挂载大于10T及以上硬盘
  9. 根据手势拿到superview
  10. 计算机维修培训教材,计算机芯片级维中心(芯片级维修培训教材)b.doc
  11. 高德地图PC版国内首发室内地图
  12. Latex第一次写论文记录
  13. 第一次发C语言文章居然在头条获得35的展现
  14. KNN(四)--FLANN库介绍及其应用
  15. 康耐视Visionpro白平衡的详细步骤
  16. 开放式视觉伺服平台源代码_上位机(初步版本,未对细节做修订)
  17. (转)25款实用的桌面版博客编辑器
  18. Kafka 消息可靠性
  19. Java对Json的一系列操作(构建、json与对象的转换)
  20. 分布式系统架构---SOA服务体系架构

热门文章

  1. IntelliJ IDEA使用说明
  2. 会声会影X4 初学者速成 转
  3. C++(五)——运算符重载
  4. sql注入——day02
  5. 命令行工具cobra的使用
  6. [How TO]-外网访问自己的HTTP服务器
  7. optee内核中栈的介绍(一)
  8. 关闭生成调试信息和嵌入清单
  9. 2020-12-1(带你理解32位二进制搜索范围是4GB)
  10. 【网安干货】MySQL8新特性注入技巧