Web基础:Servlet规范(一)

本文详细介绍了Servlet规范的基础知识,包括Servlet接口实现类的开发步骤,Servlet对象的生命周期,HttpServletResponse和HttpServletRequest接口的功能及使用示例。还讨论了请求对象与响应对象的生命周期以及默认欢迎资源文件的配置。
摘要由CSDN通过智能技术生成

目录

1.概述

2.Servlet接口实现类的开发步骤

2.1 Servlet接口实现类

2.2 Servlet接口实现类开发步骤

3.Servlet对象的生命周期

4.HttpServletResponse接口

4.1 介绍

4.2 主要功能

4.3 实例

5.HttpServletRequest接口

5.1 介绍

5.2 功能

5.3 实例

6.请求对象与响应对象的生命周期

7.欢迎资源文件


1.概述

   servlet规范来自于JavaEE规范中的一种。

   作用

        ①在Servlet规范中,指定动态资源文件开发步骤

        ②在Servlet规范中,指定Http服务器调用动态资源文件规则

        ③在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则

2.Servlet接口实现类的开发步骤

2.1 Servlet接口实现类

   Servlet接口来自于Servlet规范下的一个接口,这个接口存在Http服务器提供的jar包内。

   Tomcat服务器下的lib文件夹中有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet接口)。

   Servlet规范中认为Http服务器能调用的动态资源文件必须是一个Servlet接口实现类

2.2 Servlet接口实现类开发步骤

   ①创建一个java类继承于HttpServlet父类(servlet-api.jar包内,javax.servlet.http.HttpServlet抽象类,而该类继承了GenericServlet抽象类,该父类实现了Servlet接口),使之成为一个Servlet接口实现类。

        为什么不直接继承Servlet接口?

                因为Servlet接口很多方法我们不需要使用,一般只需要使用到service()方法,因此通过

              继承其他该接口的实现类,可以减少我们需要重写的方法数量。抽象类的作用就是降低接

              口实现类对接口的实现难度,将接口中不需要使用的抽象方法交给抽象类进行完成,这样

              接口实现类只需要对接口中需要使用的方法进行重写。

        Servlet接口中的方法

                1.init()

                2.getServletConfig()

                3.getServeltInfo()

                4.destory()

                5.service()

        Tomcat根据Servlet规范调用Servlet接口实现类的规则

                1.Tomcat有权自动创建Servlet接口实现类实例对象

                        Servlet oneServlet = new OneServlet();

                2.Tomcat根据实例对象调用service方法处理当前请求

                        oneServlet.service();

        各个类的关系:

                oneServlet   extends   (abstract)HttpServlet   entends (abstract)GenericServlet                                                                                          implements Servlet接口

                其中GenericServlet抽象类中实现了Servlet接口中我们不需要用到的四个方法:init()、

              getServletConfig()、getServletInfo()、destory()。 

                HttpServlet抽象类中实现了service()方法。

                自己定义的子类均可以继承这五个实现后的方法。

   ②重写HttpServlet父类中的两个方法doGet()、doPost()。如果浏览器发送请求的方式为get,则调用的是doGet()方法;如果发送请求的方式为post,则调用的是doPost()方法。

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} 

        在HttpServlet抽象类中实现的service()方法会根据浏览器请求的方式来调用doGet()或

      doPost()方法。这种通过父类决定何种情况下调用子类中方法,是设计模式中的模板设计模

      式

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        long lastModified;
        if (method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if (lastModified == -1L) {
                this.doGet(req, resp);//调用子类中的doGet()方法
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader("If-Modified-Since");
                } catch (IllegalArgumentException var9) {
                    ifModifiedSince = -1L;
                }

                if (ifModifiedSince < lastModified / 1000L * 1000L) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if (method.equals("HEAD")) {
     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值