12.1.6 HttpServlet

来源:互联网 发布:偷菜软件 编辑:程序博客网 时间:2024/06/04 18:05
12.1.6  HttpServlet

  在绝大多数的网络应用中,都是客户端(浏览器)通过HTTP协议去访问服务器端的资源,而我们所编写的Servlet也主要是应用于HTTP协议的请求和响应。为了快速开发应用于HTTP协议的Servlet类,Sun公司在javax.servlet.http包中给我们提供了一个抽象的类HttpServlet,它继承自GenericServlet类,用于创建适合Web站点的HTTP Servlet。

  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方法,对客户请求进行处理。

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

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

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

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

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

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

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

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

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

  ① 调用公共的(public)service()方法。

  ② 在公共的service()方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,然后调用保护的(protected)service()方法,将转换后的HttpServletRequest对象和HttpServletResponse对象作为参数传递进去。

  ③ 在保护的service()方法中,首先调用HttpServletRequest对象的getMethod()方法,获取HTTP请求方法的名字,然后根据请求方法的类型,调用相应的doXxx ()方法。

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

  HttpServlet类对TRACE和OPTIONS方法做了适当的实现,因此我们不需要去覆盖doTrace()和doOptions()方法。而对于其他的5个请求方法,HttpServlet类提供的实现都是返回HTTP错误,对于HTTP 1.0的客户端请求,这些方法返回状态代码为400的HTTP错误,表示客户端发送的请求在语法上是错误的。而对于HTTP 1.1的客户端请求,这些方法返回状态代码为405的HTTP错误,表示对于指定资源的请求方法不被允许。这些方法都是使用javax.servlet.ServletRequest接口中的getProtocol()方法来确定协议的。

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 联通销户话费有余额怎么办 暖气改地热不热怎么办 老楼房暖气不热怎么办 4s店修不好车怎么办 苏宁的发票丢了怎么办 京东退货没有发票怎么办 发票发错了邮箱怎么办 苹果手机忘记电子邮箱验证码怎么办 退差价把红包退还了怎么办 网上购票票丢了怎么办 岗位人手不够老板又不招人来怎么办 辞职后提成不发怎么办 老板给客户吵架员工该怎么办 冰柜声音大怎么办嗡嗡响 交了钱电没有怎么办 小白熊电动吸奶器显示F1怎么办 花洒的水变小了怎么办 手机插卡处坏了怎么办 吉利帝豪一键启动钥匙没电怎么办 居民医保断交5年怎么办 社保和医保断了怎么办 停缴了两年社保怎么办 医保交不够20年怎么办 医保断交4个月怎么办 医保断交5个月怎么办 换城市后社保卡怎么办 苹果6s呼叫失败怎么办 苹果手机打电话显示呼叫失败怎么办 苹果手机经常呼叫失败怎么办 苹果手机呼叫号码呼叫失败怎么办 好友把我拉黑了怎么办 有人一直打骚扰电话怎么办 每天都有骚扰电话怎么办 苹果7被电话轰炸怎么办 苹果手机接听声音小怎么办 微信账号封了怎么办 在京东买的手机出现问题怎么办 销售没胆量扫楼怎么办 骨龄比实际年龄小怎么办 身体年龄比实际年龄大怎么办 吃了不熟的鸡蛋怎么办