最基本的是通过实现Servlet接口来编写Servlet类,这需要实现Servlet接口中定义的5个方法。

为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类GenericServlet,它给出了除了service( )方法外的其他4个方法的简单实现。

如果要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service( )。

在GenericServlet类中,定义了两个重载的init( )方法:
public void init(ServletConfig config) throws ServletException
public void init( ) throws ServletException

第一个init( )方法是Servlet接口中init( )方法的实现。在这个方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二个不带参数的init( )方法。

通常在编写继承自GenericServlet的Servlet类时,只需要重写第二个不带参数的init( )方法即可。
如果覆盖了第一个init( )方法,那么应该在子类的方法中,包含一句super.init(config)代码的调用。

大多数的网络应用中都是通过HTTP协议去访问服务器端的资源,编写的Servlet也主要是应用于HTTP协议的请求和响应。
为了快速开发,直接在javax.servlet.http包中提供了一个抽象类HttpServlet,它继承自GenericServlet类。

public abstract class HttpServlet extends GenericServlet implements java.io.Serializable

在HttpServlet中提供了两个重载的service( )方法:

public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

第一个service( )方法是GenericServlet类中service( )方法的实现。在这个方法中,首先就爱那个req和res对象转换为HttpServletRequest(继承自ServletRequest接口)和HttpServletResponse(继承自ServletResponse接口)类型,然后调用第二个service方法,对客户请求进行处理。

针对HTTP1.1中定义的7中请求方法GET,POST,HEAD,PUT,DELETE,TRACE和OPTIONS,HttpServlet分别提供了7个处理方法:

protected void doGet(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doPost(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doHead(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doPut(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doDelete(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doTrace(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

protected void doOptions(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException

这7个方法的参数类型及异常抛出类型与HttpServlet类中的第二个重载的service( )方法是一致的。当容器收到一个针对HttpServlet对象的请求时,调用该对象中的方法顺序如下:

1、调用公共的(public)service( )方法。
2、在公共的service( )方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,然后调用保护的(protected)service( )方法,将转换后的HttpServletRequest对象和HttpServletResponse对象作为参数传递进去。
3、在保护的service( )方法中,首先调用HttpServletRequest对象的getMethod( )方法,获取HTTP请求方法的名字,分然后根据请求方法的类型,调用相应的doXxx( )方法。

因此通常在编写HttpServlet的派生类时,不需要去覆盖service( )方法,而只需要重写相应的doXxx( )方法。

HttpServlet虽然是抽象类,但是在这个类中没有抽象的方法,其中所有的方法都已经实现。只是在这个类中如何对客户请求进行处理的方法,没有真正地实现,淡然也不可能真正地实现,因为对客户请求如何进行处理,需要根据实际的应用来决定。根据应用的需要重写其中的请求处理方法即可。

HttpServletRequest和HttpServletResponse
HttpServletRequest和HttpServletResponse这两个接口分别继承自javax.servlet.ServletRequest和javax.servlet.ServletResponse接口。
这两个接口中也有很多的方法,这里就不一一细讲了。

GenericServlet,HttpServletRequest和HttpServletResponse的更多相关文章

  1. HttpServletrequest 与HttpServletResponse总结

    如果说DOM是javascript与HTML的桥梁,那么servlet就是前端与后端的桥梁,HttpServletRequest和HttpServletResponse就是之间的信使,好了,废话不多说 ...

  2. @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式

    在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...

  3. Java第三阶段学习(十二、HttpServletRequest与HttpServletResponse)

    一.HttpServletRequest 1.概述: 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和 ...

  4. java HttpServletRequest和HttpServletResponse詳解

    這篇文章主要介紹瞭java HttpServletRequest和HttpServletResponse詳解的相關資料,需要的朋友可以參考下 java HttpServletRequest和HttpS ...

  5. Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包

    转载: http://xyly624.blog.51cto.com/842520/865630/ Maven项目下HttpServletRequest 或 HttpServletResponse需引用 ...

  6. HttpServletRequest和HttpServletResponse实例

    先看一下web.xml文件配置: <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...

  7. HttpServletRequest和HttpServletResponse详解

    请求与响应相关的类和接口非常多,下表是主要的与请求和接口相关的类以及接口. 主要的与请求和接口相关的类及接口 方    法 说    明 ServletInputStream Servlet的输入流 ...

  8. 关于Filter中ServletRequest和ServletResponse强转HttpServletRequest和HttpServletResponse安全问题(向下转型一定不安全吗?)

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...

  9. 关于Filter中ServletRequest和ServletResponse强转HttpServletRequest和HttpServletResponse

    ---转载自:https://www.cnblogs.com/mei0619/p/8341159.html request对象的生成方式不是ServletRequest request = new S ...

随机推荐

  1. WCF技术的不同应用场景及其实现分析

    这一篇文章,是总结一下WCF技术,以及基于这个技术发展出来的几个典型应用场景,并且我将尝试对这些不同的WCF实现的原理进行一些比较分析. 关于WCF这个技术的基本概念,如果你不是很清楚,可以参考一下有 ...

  2. Python 进阶(五)定制类

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAF/CAIAAACUs6uhAAAgAElEQVR4nOzdZXubx7ov8PPV9tlrt0 ...

  3. 如何自动生成Facade 的EJB

    1.jbuilder中连接数据库,注意:java:/DataSource 2.选择数据表,右健选择"create cmp 2.x..." 3.添加"findAll&quo ...

  4. android 下的技巧

    1.删除屏幕的手势锁定 adb shell #登录 su $切换到su用户(手机需要root) cd /data/system #切换目录 rv gesture.key # 删除锁屏文件,然后进去的时 ...

  5. 10 个迅速提升你 Git 水平的提示【转】

    转自:https://www.oschina.net/translate/10-tips-git-next-level 最近我们推出了两个教程:熟悉Git的基本功能和让你在开发团队中熟练的使用Git  ...

  6. [转]clrDateTime to Dynamics AX TransDate

    转自:https://community.dynamics.com/ax/f/33/t/30791.aspx TransDate是一种只有日期,没有时间的类型 utcDateTime=Global:: ...

  7. Recovery with Incremental Backups

    During media recovery, RMAN examines the restored files to determine whether it can recover them wit ...

  8. MySQL对于数据库应该如何如何配置安全问题了

    mysql 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统.它具有功能强.使用简便.管理方便.运行速度快.安全可靠性强等优点,用户可利用许多语言编写访问m ...

  9. api(接口)文档管理工具

    api(接口)文档管理工具 欢迎光临:博之阅API管理平台  ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全  

  10. ecshop后台增加栏目查询会员是否重复注册

    ecshop的后台要查询哪些会员是否有重复注册时,可以利用特定的栏目来判断~ 譬如会员电话... 修改前请务必先备份下列档案!!! admin/users.php admin/templates/us ...