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)中要获取请求方式时,还需要这样处理:
public class LoginServlet extends GenericServlet {
public LoginServlet() {
}
public void init() {
System.out.println("init....");
}
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
// 即使我们继承了GenericServlet,我们还是有些操作不太方便。
// 比如:获取请求方法
HttpServletRequest req = (HttpServletRequest) request;
String requestMethod = req.getMethod();
}
}
那么我们怎么解决这样的问题呢?
下边将会给出一种解决方案:
在工程中新建一个MyHttpServlet类:
package com.dx.hiservlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 针对HTPP协议定义的一个Servlet
* */
public class MyHttpServlet extends MyGenericServlet{ public MyHttpServlet() {
// TODO Auto-generated constructor stub
} @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
if(arg0 instanceof HttpServletRequest){
HttpServletRequest request=(HttpServletRequest)arg0;
if(arg0 instanceof HttpServletResponse){
HttpServletResponse response=(HttpServletResponse)arg1; service(request,response);
}
}
} public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
// 1. 获取请求方式。
String method= request.getMethod(); // 2.根据请求方式,调用相应处理方法。
if(method.toUpperCase().equals("GET")){
doGet(request,response);
}else if(method.toUpperCase().equals("POST")){
doPost(request,response);
}
// ...
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub } }
我们重新定义一个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
} @Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getMethod(); } @Override
public 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 Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
之前一段时间一直忙于毕业设计,也没有空学习了,本篇继续学习. 本篇将开始学习java web下使用servlet下来操作数据库,并展示到界面上的使用方法. 新建工程ServletMvc001. 目录结 ...
- Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)
本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...
- Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)
本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法. 还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件 ...
- Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)
该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...
- Java Servlet(十一):一个servlet被10个浏览器客户端访问时会创建几个servlet实例?
一般Servlet只初始化一次(只有一个实例).对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给该方法.如此重复以 ...
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path解决方案
0.环境: win7系统,Tomcat9配置无误. 1.错误: 项目中某一.jps页面忽然出现错误,鼠标点上去为:The superclass "javax.servlet.http.Htt ...
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。问题
JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Ja ...
- 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
我们在利用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on ...
随机推荐
- 51Nod 1256 乘法逆元 Label:exgcd
1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...
- [Leetcode] Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- CSS Hack汇总快查(CSS兼容代码演示)
文章出处和来源网址:http://www.divcss5.com/css-hack/c284.shtml 以下是常用CSS HACK问题及解决代码-DIV+CSS网支持 1.屏蔽IE浏览器(也就是IE ...
- android中的ActionBar和ToolBar
一.ToolBar 1.概述 Google在2015的IO大会上发布了系列的Material Design风格的控件.其中ToolBar是替代ActionBar的控件.由于ActionBar在各个安卓 ...
- Hadoop.2.x_简单的测试文件读取与上传
代码如下, 后备参考: package com.bigdata.hadoop.hdfs; import java.io.File; import java.io.FileInputStream; im ...
- 第一次scrum meeting 报告
1.第一次scrum meeting确定了我们任务和相应的分配方案,具体分配情况如下: 这是我们团队其中一名成员的任务内容及相应预估时长,其他成员具体分配情况已在TFS上作了相应更新. 第一次scru ...
- 论meta name= viewport content= width=device-width initial-scale=1 minimum-scale=1 maximum-scale=1的作用
一.先明白几个概念 phys.width: device-width: 一般我们所指的宽度width即为phys.width,而device-width又称为css-width. 其中我们可以获取ph ...
- Spring.Net 配置文件
方法一. 直接在程序配置文件中配置 <configuration> <configSections> <sectionGroup name="spring&qu ...
- Oracle常用命令(持续更新)
--1.解锁用户 alter user 用户名 account unlock; --2.开启最小补充日志记录(执行的DML操作会被记录下来) alter database add supplemen ...
- centos6.6 LVS+keepalived
之前有写过keepalived+mysql 和lvsDR模式的分析篇.然而LVS没有写高冗余.今天来写一篇LVS+keepalived的 LVSDR只负责转发,LVS也没有nginx后端检查功能,所 ...