Servlet接口

Servlet接口

    1、Servlet的生命周期
        所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!
        与Servlet的生命周期相关的方法有:
            void init(ServletConfig config)
            void service(ServletRequest request,ServletResponse response)
            void destory()

        1.1、Servlet的出生
                服务器会在Servlet第一次被访问时创建Servlet;或者是在服务器启动时创建Servlet。
            如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置<load-on-startup>1</load-on-startup>,
            表示Servlet之间加载顺序。
            也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。而且一个Servlet类型,服务器只
            创建一个实例对象,在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。
            请记住, Servlet出生后马上就会调用init(ServletConfig)方法。而且一个Servlet的一生,这个方法
            只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。我们可以把一
            些对Servlet的初始化工作放到init方法中!

        1.2、Servlet服务
                当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次
            请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才
            把处理请求的代码写到service()方法中!

        1.3、Servlet的离去
                Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器
            会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet
            的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。

        1.4、测试生命周期方法
            编写HelloServlet.java文件,然后再去访问对应的URL地址。
                public class HelloServlet implements Servlet {
                    public void init(ServletConfig config) throws ServletException {
                        System.out.println("Servlet被创建了!");
                    }
                    public ServletConfig getServletConfig() {return null;}
                    public String getServletInfo() {return null;}
                    public void service(ServletRequest req, ServletResponse res)
                        throws ServletException, IOException {
                        System.out.println("hello servlet!");
                    }
                    public void destroy() {
                        System.out.println("Servlet要离去了!");
                    }
                }
            在浏览器首次访问HelloServlet时,init方法会被执行,而且也会执行service方法。
            再次访问时,只会执行service方法,不再执行init方法。在关闭Tomcat时会调用destroy方法。

2 Servlet接口相关类型
    在Servlet接口中还存在三个我们不熟悉的类型:
        * ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,
                它是由服务器创建的;
        * ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要
                使用这个对象;
        * ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml
                文件中的<servlet>元素。
    2.1、ServletRequest 和 ServletResponse
        ServletRequest和ServletResponse是Servlet的service() 方法的两个参数,一个是请求对象,一个是响应对象,
            可以从ServletRequest对象中获取请求数据,可以使用ServletResponse对象完成响应。你以后会发现,
            这两个对象就像是一对恩爱的夫妻,永远不分离,总是成对出现。
        ServletRequest和ServletResponse的实例由服务器创建,然后传递给service()方法。如果在service() 方法中
            希望使用HTTP相关的功能,那么可以把ServletRequest和ServletResponse强转成HttpServletRequest和
            HttpServletResponse。这也说明我们经常需要在service()方法中对ServletRequest和ServletResponse进
            行强转,这是很心烦的事情。不过后面会有一个类来帮我们解决这一问题的。
    2.2、ServletConfig
            ServletConfig对象对应项目中web.xml文件中的<servlet>元素。例如你想获取当前Servlet在项目
        web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取!
            ServletConfig对象是由服务器创建的,然后传递给Servlet的init(ServletConfig config)方法,
        你可以在init方法中使用它!
            * String getServletName():获取Servlet在web.xml文件中的配置名称,即<servlet-name>指定的名称;
            * String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值;
            * Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称;
            * ServletContext getServletContext():用来获取ServletContext上下文对象。
            
    2.3、在<servlet>元素中还可以配置初始化参数:
            <servlet>
                <servlet-name>One</servlet-name>
                <servlet-class>cn.itcast.servlet.OneServlet</servlet-class>
                <init-param>        [配置了两个初始化参数,用得少]
                    <param-name>paramName1</param-name>
                    <param-value>paramValue1</param-value>
                </init-param>
                <init-param>
                    <param-name>paramName2</param-name>
                    <param-value>paramValue2</param-value>
                </init-param>
            </servlet>
        在Servlet中,可以使用ServletConfig对象的getInitParameter(String name)方法来获取初始化参数,
        例如:String value1 = servletConfig.getInitParameter("paramName1");//获取到paramValue1

猜你喜欢

转载自blog.csdn.net/weixin_42472048/article/details/81592285