Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)
本篇记录了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)相关推荐
- Java Servlet(一):创建工程(jdk7+tomcat7+eclipse)
本篇文件主要记录下怎么在jdk7+tomcat7下,使用eclipse创建并运行一个servlet工程. 安装具体步骤从网上搜索就可以找到,这里不再赘述. 在eclipse中切换到j2ee下, 从导航 ...
- java mvc tomcat_Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
之前一段时间一直忙于毕业设计,也没有空学习了,本篇继续学习. 本篇将开始学习java web下使用servlet下来操作数据库,并展示到界面上的使用方法. 新建工程ServletMvc001. 目录结 ...
- 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类似问题简单 ...
- 一步一步学java(8):一文彻底搞懂servlet、httpservlet以及http协议
万丈高楼平地起,但是高楼结实不结实,是靠一块块砖垒起来或一根根钢铁架起来的,关于java的web应用开发,servlet就是那块砖或者那根钢铁.今天就和大伙聊聊web应用开发基础.从web应用协议.w ...
- 在Java Build Path中找不到超类“javax.servlet.http.HttpServlet”[重复]
本文翻译自:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path ...
- 用Eclipse开发JavaWeb项目:错误信息 javax.servlet.http.HttpServlet was not found on the Java Build Path...
1.错误描述:JSP页面顶端出现"红色"的报错信息:The superclass "javax.servlet.http.HttpServlet" was no ...
- Java Servlet工作原理问答
导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...
- 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 ...
- Eclipse新建web项目和“javax.servlet.http.HttpServlet“ was not found on the Java Build Path错误
Eclipse新建web项目:当前Eclipse中Tomcat已经配置好: 输入项目名称:完成: 新建的web项目目录结构如下: 右击Webcontent文件夹,新建一个JSP文件: 输入JSP文件名 ...
最新文章
- 2.STM32中对Key_GPIO_Config()函数的理解(自定义)之轮询控制按键LED
- chm转pdf_简历是以PDF还是Word格式提交的?
- xcode6是否导入framework
- CentOS7.5下搭建zabbix3.4监控
- [团队开发]总结下Server 2008 + TeamFoundation Server 2008安装过程
- 聊聊面试的事(应聘方)
- android 坐标点计算器,Android实现简易计算器
- php后端语言的基本语法
- CVPR2021-RSTNet:自适应Attention的“看图说话”模型
- 计算机软件专业的中期目标,计算机软件工程专业职业生涯设计.doc
- 阿里云存储负责人吴结生:安全可靠是云存储立身之本, 智能技术将激活存储技术新变革...
- Python 基础总结
- Locked Treasure
- 基于Linux的集群系统(三)
- [MapReduce_8] MapReduce 中的自定义分区实现
- 中国莽草酸行业市场深度调查报告(2022版)
- 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
- 生成模型笔记预备知识笔记——概率分布变换
- LINUX 测试resnet18时,找不到模型 no checkpoint fount
- 修改服务器3389 端口号,修改服务器3389端口为其它端口