本篇记录了HttpServlet的实现过程,主要讲述了如何依赖Servlet,GenericServlet实现的原理。

HttpServlet实现过程:
1、是一个Servlet,继承自GenericServlet,针对HTPP协议所定制。

2、在Servlet的service(ServletRequest request,ServletResponse response)方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse,并调用了重载的service(HttpServletRequest request,HttpServletResponse response)。

3、在service(HttpServletRequest request,HttpServletResponse response) 获取了请求方式:request.getMethod()。根据请求方式创建了doXxx()方法(Xxx为具体的请求方式,比如:doGet,doPost等)。

4、在实际开发中,直接继承HttpServlet,并根据请求方式复写doXxx()方法接口。
这样的好处:直接针对具体的请求方式,实现不同的doXxx方法,直接使用HttpServletRequest和HttpServletResponse,不需要进行强转。

上个章节,记录了GenericServlet的实现过程,确实是给我们带了很大的方便,但是他并没有针对HTTP给出较全面的特殊处理,比如我们要在service(ServletRequest arg0,ServletResponse arg1)中要获取请求方式时,还需要这样处理:

 1 public class LoginServlet extends GenericServlet {
 2     public LoginServlet() {
 3     }
 4
 5     public void init() {
 6         System.out.println("init....");
 7     }
 8
 9     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
10         // 即使我们继承了GenericServlet,我们还是有些操作不太方便。
11         // 比如:获取请求方法
12         HttpServletRequest req = (HttpServletRequest) request;
13         String requestMethod = req.getMethod();
14     }
15 }

那么我们怎么解决这样的问题呢?

下边将会给出一种解决方案:

在工程中新建一个MyHttpServlet类:

 1 package com.dx.hiservlet;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6 import javax.servlet.ServletRequest;
 7 import javax.servlet.ServletResponse;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 /**
12  * 针对HTPP协议定义的一个Servlet
13  * */
14 public class MyHttpServlet extends MyGenericServlet{
15
16     public MyHttpServlet() {
17         // TODO Auto-generated constructor stub
18     }
19
20     @Override
21     public void service(ServletRequest arg0, ServletResponse arg1)
22             throws ServletException, IOException {
23         if(arg0 instanceof HttpServletRequest){
24             HttpServletRequest request=(HttpServletRequest)arg0;
25             if(arg0 instanceof HttpServletResponse){
26                 HttpServletResponse response=(HttpServletResponse)arg1;
27
28                 service(request,response);
29             }
30         }
31     }
32
33     public void service(HttpServletRequest request,HttpServletResponse response)
34             throws ServletException, IOException {
35         // 1. 获取请求方式。
36         String method= request.getMethod();
37
38         // 2.根据请求方式,调用相应处理方法。
39         if(method.toUpperCase().equals("GET")){
40             doGet(request,response);
41         }else if(method.toUpperCase().equals("POST")){
42             doPost(request,response);
43         }
44         // ...
45     }
46
47     public void doGet(HttpServletRequest request, HttpServletResponse response)
48             throws ServletException, IOException {
49
50     }
51
52     public void doPost(HttpServletRequest request, HttpServletResponse response)
53             throws ServletException, IOException {
54         // TODO Auto-generated method stub
55
56     }
57
58
59 }

我们重新定义一个LoginServlet2继承MyHttpServlet类。

package com.dx.hiservlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginServlet2 extends MyHttpServlet{public LoginServlet2() {// TODO Auto-generated constructor stub
    }@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {    String method = request.getMethod();}@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}

如果使用过HttpServlet或查看过HttpServlet源码的话,就会发现原来我们目前的MyHttpServlet,就是HttpServlet的一个简化实现。

综合前几个章节,相信已经可以掌握GenericeServlet、HttpServlet的实现原理及相互关系。

Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)相关推荐

  1. Java Servlet(一):创建工程(jdk7+tomcat7+eclipse)

    本篇文件主要记录下怎么在jdk7+tomcat7下,使用eclipse创建并运行一个servlet工程. 安装具体步骤从网上搜索就可以找到,这里不再赘述. 在eclipse中切换到j2ee下, 从导航 ...

  2. java mvc tomcat_Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)

    之前一段时间一直忙于毕业设计,也没有空学习了,本篇继续学习. 本篇将开始学习java web下使用servlet下来操作数据库,并展示到界面上的使用方法. 新建工程ServletMvc001. 目录结 ...

  3. The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path类似问题简单解决方案

    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path类似问题简单 ...

  4. 一步一步学java(8):一文彻底搞懂servlet、httpservlet以及http协议

    万丈高楼平地起,但是高楼结实不结实,是靠一块块砖垒起来或一根根钢铁架起来的,关于java的web应用开发,servlet就是那块砖或者那根钢铁.今天就和大伙聊聊web应用开发基础.从web应用协议.w ...

  5. 在Java Build Path中找不到超类“javax.servlet.http.HttpServlet”[重复]

    本文翻译自:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path ...

  6. 用Eclipse开发JavaWeb项目:错误信息 javax.servlet.http.HttpServlet was not found on the Java Build Path...

    1.错误描述:JSP页面顶端出现"红色"的报错信息:The superclass "javax.servlet.http.HttpServlet" was no ...

  7. Java Servlet工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...

  8. JavaWeb: 报错信息The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path...

    JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bui ...

  9. Eclipse新建web项目和“javax.servlet.http.HttpServlet“ was not found on the Java Build Path错误

    Eclipse新建web项目:当前Eclipse中Tomcat已经配置好: 输入项目名称:完成: 新建的web项目目录结构如下: 右击Webcontent文件夹,新建一个JSP文件: 输入JSP文件名 ...

最新文章

  1. 2.STM32中对Key_GPIO_Config()函数的理解(自定义)之轮询控制按键LED
  2. chm转pdf_简历是以PDF还是Word格式提交的?
  3. xcode6是否导入framework
  4. CentOS7.5下搭建zabbix3.4监控
  5. [团队开发]总结下Server 2008 + TeamFoundation Server 2008安装过程
  6. 聊聊面试的事(应聘方)
  7. android 坐标点计算器,Android实现简易计算器
  8. php后端语言的基本语法
  9. CVPR2021-RSTNet:自适应Attention的“看图说话”模型
  10. 计算机软件专业的中期目标,计算机软件工程专业职业生涯设计.doc
  11. 阿里云存储负责人吴结生:安全可靠是云存储立身之本, 智能技术将激活存储技术新变革...
  12. Python 基础总结
  13. Locked Treasure
  14. 基于Linux的集群系统(三)
  15. [MapReduce_8] MapReduce 中的自定义分区实现
  16. 中国莽草酸行业市场深度调查报告(2022版)
  17. 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
  18. 生成模型笔记预备知识笔记——概率分布变换
  19. LINUX 测试resnet18时,找不到模型 no checkpoint fount
  20. 修改服务器3389 端口号,修改服务器3389端口为其它端口

热门文章

  1. 在golang中defer、panic与recover的作用
  2. 使用Laravel Eloquent ORM 时如何查询表中指定的字段 1
  3. 微信小程序瀑布流列表
  4. 数字货币买卖单、价格、数量计算方式浅谈
  5. 使用RabbitMQ实现延迟任务
  6. 中查询一个文件夹下文件数量_如何在 Bash 中使用循环 | Linux 中国
  7. 硬核图解| Kafka 如何保证消息不丢失?
  8. 关于设计RPC框架的几个问题
  9. HAOI2018游记
  10. iOS 数据解析之使用TFHpple解析html