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 ...
随机推荐
- UVA 11039 - Building designing(DP)
题目链接 本质上是DP,但是俩变量就搞定了. #include <cstdio> #include <cstring> #include <algorithm> u ...
- 【bzoj2809】[Apio2012]dispatching 左偏树
2016-05-31 15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...
- jQuery实现动画过程中尽量避免出现网页滚动条
jQuery实现动画过程中尽量避免出现网页滚动条,不然可能会出现动画效果异常.
- db2工具优化
- python 教程
教程 http://www.runoob.com/python/att-list-append.html 习题 http://blog.csdn.net/liuyuan_jq/article/deta ...
- Infragistics公司的UltraWebGrid控件在显示的时候报“theForm” 未定义错误的解决。
在项目中使用了Infragistics公司的UltraWebGrid控件,浏览器中报错,“theForm” 未定义,并且造成客户端js,滚动条,失效.最后查官网论坛找到问题.需要把web.config ...
- golang 自定义封包协议(转的)
package protocol import ( "bytes" "encoding/binary" ) const ( ConstHeader = &quo ...
- LVS DR脚本 解析
vip.sh #!/bin/bash 192.168.2.240 broadcast 192.168.2.240 netmask 255.255.255.255 up route add -host ...
- DataContractJsonSerializer deserialize stream
var response = await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(parameters)); var resu ...
- ado.net 连接,删除,添加
ado.net数据库访问技术将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 数据库: create data ...