- 浏览: 119649 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
darrendu:
如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用 ...
缺省适配器模式 -
cwalet:
显然这个错误是在使用struts标签时产生的,原因是没有在st ...
彻底解决 警告: No configuration found for the specified action -
jzinfo:
{} xtcpcgx 写道还是有点不明白,感觉缺省适配类跟接口 ...
缺省适配器模式 -
xtcpcgx:
还是有点不明白,感觉缺省适配类跟接口代码一模一样啊。
缺省适配器模式 -
googya:
这段代码的结果是,dopost根本没有执行?
servlet中service doGet doPost 的关系
观察GenericServlet源码中关于service()方法的实现:
//实现父类的service(ServletRequest req,ServletResponse res)方法 //通过参数的向下转型,然后调用重载的service(HttpservletRequest,HttpServletResponse)方法 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request; HttpServletResponse response; try { request = (HttpServletRequest) req; //向下转型 response = (HttpServletResponse) res; //向下转型 } catch (ClassCastException e) { throw new ServletException("non-HTTP request or response"); } service(request, response); //调用重载的service(HttpServelertRequest,HttpServletResponse)方法 } //重载的service(HttpServletRequest req, HttpServletResponse resp)方法 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) { long lastModified = getLastModified(req); if (lastModified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); if (ifModifiedSince < (lastModified / 1000 * 1000)) { // If the servlet mod time is later, call doGet() // Round down to the nearest second for a proper compare // A ifModifiedSince of -1 will always be less maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } } } else if (method.equals(METHOD_HEAD)) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(req, resp); } else if (method.equals(METHOD_POST)) { doPost(req, resp); } else if (method.equals(METHOD_PUT)) { doPut(req, resp); } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp); } else { // // Note that this means NO servlet supports whatever // method was requested, anywhere on this server. // String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[1]; errArgs[0] = method; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); } }
在抽象类中GenericServlet中service()是一个抽象方法,但在HttpServlet中对这个方法进行了实现。
servlet接口中定义的service()方法中的两个参数分别是servletRequest 和 ServletResponse 这两个类型。当前的http请求,如果需要在这个service()方法内部使用http消息特有的功能,也就是要调用HttpServletRequest 和HttpServletResponse来中定义的方法时,需要将请求和响应对象进行一个类型的转换,所以,在GenericServlet中,使用了两个方法来共同完成这个工作。
实现父类GenericServlet中的service(ServltRequest req,ServeltResponse res)抽象方法
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request; HttpServletResponse response; try { request = (HttpServletRequest) req; //向下转型 response = (HttpServletResponse) res; //向下转型 } catch (ClassCastException e) { throw new ServletException("non-HTTP request or response"); } service(request, response); //这里是调用重载的service(HttpServelertRequest,HttpServletResponse)方法 }
service(HttpServelertRequest,HttpServletResponse)方法:
//重载的service(HttpServletRequest req, HttpServletResponse resp)方法 ,注意参数类型
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) { long lastModified = getLastModified(req); if (lastModified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); if (ifModifiedSince < (lastModified / 1000 * 1000)) { // If the servlet mod time is later, call doGet() // Round down to the nearest second for a proper compare // A ifModifiedSince of -1 will always be less maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } } } else if (method.equals(METHOD_HEAD)) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(req, resp); } else if (method.equals(METHOD_POST)) { doPost(req, resp); } else if (method.equals(METHOD_PUT)) { doPut(req, resp); } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp); } else { // // Note that this means NO servlet supports whatever // method was requested, anywhere on this server. // String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[1]; errArgs[0] = method; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); } }
发表评论
-
rerrtert
2010-08-26 15:49 18rew -
MyEclipse 快捷键大全!
2009-12-31 21:12 1706Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl ... -
JfreeChart中文乱码解决方案
2009-12-31 14:30 2339原帖地址:http://blog.csdn.net/wangh ... -
【转载】实施Dbutils
2009-12-04 17:01 1851JDBC码是Java译码的一个部分,它给已写的编码带来了数量惊 ... -
使用三方数据库连接池 Commons DBCP
2009-11-28 11:17 4154本内容转帖,原文地址:http://www.iteye.com ... -
读源码学习 Servlet过滤器
2009-11-26 15:09 2429过滤器在Servlet2.3中规范的,能够对Servlet容器 ... -
在jsp中对mysql数据库分页的方法
2009-11-20 17:22 5175针对分页,首先开发一个 PageBean 用来控制页面参数: ... -
javaBean为什么要实现Serializable接口?
2009-11-18 11:37 1239Java的"对象序列化"能让你将一个实现了 ... -
使用JSP标签实例 实现Tag接口
2009-10-30 15:47 3490创建的标签类,必须实现javax.servlet.jsp.ta ... -
读源码学jsp自定义标签 (2) IteataionTag接口
2009-10-29 23:48 1377IterationTag接口继承了Tag接口,增加了一个方法和 ... -
读源码学jsp自定义标签 (1) Tag接口
2009-10-29 22:58 2212最近开始学些jsp的自定 ... -
读源码学Servlet(2)Servlet实现的ServletConfig接口的应用
2009-10-24 12:20 1952GenericServlet抽象类实现了ServletConf ... -
关于jsp页面中文字符集的设置
2009-10-24 11:29 2348为解决JSP中显示中文乱码的问题,一般我们在HttpRespo ... -
读源码学Servlet(4)关于覆盖GenericServlet的Init()方法
2009-10-23 16:17 3538之前提到servlet 生命周期中的三个阶段,第一个阶段中se ... -
读源码学Servlet(3)Servlet的生命周期
2009-10-23 15:31 2027在javax.servlet.Servlet接口中,定义了针对 ... -
读源码学Servlet(1)GenericServlet 源码分析
2009-10-23 14:05 5598Servlet API的核心就是javax.servlet.S ... -
SVN 客户端使用培训
2009-09-03 18:10 1160最近公司上SVN版本控制系统,今天给他们做了一次培训。 讲的 ... -
servlet中service doGet doPost 的关系
2009-08-25 23:25 6602在servlet中默认情况下 ... -
JavaBean的作用域
2009-08-19 01:18 1042等待添加~~ -
JavaBean使用之基本规范
2009-08-19 01:12 1529JavaBean是一种特殊的Java类,他遵从一定的设计模式, ...
相关推荐
GenericServlet的service()方法根据请求的类型(GET、POST等)调用相应的doXXX()方法,这样我们只需要重写这些特定的方法即可处理请求。 HttpServlet是GenericServlet的子类,进一步专门化为处理HTTP协议的请求。...
1. **Servlet接口**:所有Servlet都必须实现这个接口,它定义了Servlet的基本方法,如`init()`(初始化Servlet)、`service()`(处理请求)和`destroy()`(销毁Servlet)。 2. **GenericServlet**:这是一个抽象类...
在本文中,我们将深入探讨Servlet API的源码,理解其核心概念、设计模式以及在实际应用中的作用。 一、Servlet接口 Servlet接口是Servlet API的核心,所有Servlet都必须实现这个接口。它包含`service()`方法,该...
Servlet接口定义了Servlet的基本方法,如`init()`、`service()`、`destroy()`和`getServletInfo()`等。`init()`在Servlet实例化时被调用,用于初始化Servlet;`service()`处理客户端请求并生成响应;`destroy()`在...
2. **GenericServlet类**:这是一个抽象类,实现了Servlet接口,提供了通用的生命周期方法实现,但`service()`方法是抽象的,需要子类重写以处理特定类型的请求。 3. **HttpServlet类**:扩展了GenericServlet,...
这个源码包包含了用于构建动态Web应用程序的接口和类,是Java Servlet规范的一部分。本文将深入探讨Servlet-API中的关键概念、主要类和接口,以及它们在实际开发中的应用。 1. **Servlet接口** Servlet接口是所有...
- **服务**:当接收到请求时,Servlet容器会调用`service()`方法,该方法会根据请求类型分派到`doGet()`或`doPost()`等方法。 - **销毁**:当Servlet不再需要时,容器调用`destroy()`方法进行清理工作,释放资源。...
- `Servlet`:定义了Servlet的基本行为,如init()、service()、destroy()方法,用于初始化、处理请求和销毁Servlet。 - `HttpServlet`:是Servlet的子类,专门处理HTTP协议的请求,提供了doGet()、doPost()等方法...
`jsp.init()`, `jsp.service()`, `jsp.destroy()`分别对应Servlet的初始化、服务和销毁方法,但这些方法在JSP页面中是隐式的。 6. **Servlet配置**: 在`web.xml`部署描述符中,开发者可以配置Servlet和Filter,包括...
5. **JSP转换过程**:了解JSP文件是如何被编译成Servlet Java源码,再编译为字节码并加载到内存中执行的。 6. **EL和JSTL**:查看`ExpressionLanguage`和`JSTL`相关的源码,理解它们如何简化动态内容的生成。 通过...
Servlet的核心接口是`javax.servlet.Servlet`,它定义了Servlet的基本方法,如`init()`, `service()`, `destroy()`和`getServletConfig()`。`init()`方法在Servlet被加载时调用,用于初始化Servlet;`service()`...
5. **Servlet配置**:Servlet可以通过在web.xml文件中声明,或者使用Java注解(@WebServlet)进行配置。配置包括Servlet的URL映射、初始化参数、负载平衡策略等。 6. **多线程安全**:由于Servlet容器通常为每个...
1. **Servlet接口**:Servlet规范定义了`javax.servlet.Servlet`接口,它包含`init()`, `service()`, `destroy()`等方法,这些方法在Servlet生命周期的不同阶段被调用。 2. **GenericServlet类**:`javax.servlet....
`GenericServlet`是一个抽象类,实现了Servlet和ServletConfig接口,提供了基本的Servlet功能,如`service()`方法。而`HttpServlet`是`GenericServlet`的子类,专门处理HTTP协议,它覆盖了`service()`方法,根据HTTP...
1. `service()`方法:这是Servlet的核心,根据请求的方法(GET、POST等)调用对应的`doXXX()`方法。例如,对于GET请求,它会调用`doGet()`;对于POST请求,它会调用`doPost()`。 2. `init()`方法:Servlet被创建时...
Servlet青鸟源码分析(1) 在Web开发领域,Servlet技术是Java EE平台中的核心组件,用于处理HTTP请求和响应。"Servlet青鸟源码(1)"可能是指一系列关于Servlet的教程或参考资料,其中包含了青鸟团队对Servlet的源代码...