Servlet——概述、实现方式、生命周期、ServletConfig类

目录


Servlet概念

跳转到目录
一、什么是Servlet
Servlet(Server applet)服务器的小程序, Servlet是JavaWeb的三大组件之一,它属于动态资源, 也是JavaEE中的一个规范。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要进行下面三步,实现动态页面输出.

  1. 接收请求数据;
  2. 处理请求
  3. 完成响应
  • Servlet必须实现javax.servlet.Servlet接口
    在这里插入图片描述

二、实现Servlet的方式
跳转到目录

  • 实现Servlet有三种方式:
    • 实现javax.servlet.Servlet接口
    • 继承javax.servlet.GenericServlet
    • 继承javax.servlet.httpServlet

步骤一:创建一个MyServlet类实现javax.servlet.Servlet接口

public class MyServlet implements Servlet {

    /*
    * 它是生命周期方法
    * 它会在Servlet对象创建之后马上执行,并只执行一次
    */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()...");
    }

    /*
     * 它是生命周期方法
     * 它会被调用多次,每次处理请求都是在调用这个方法!
     * */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service()...");
    }

    /*
    * 它是生命周期方法
    * 它会在Servlet被销毁之前调用,并且它只会被调用一次!
    * */
    @Override
    public void destroy() {
        System.out.println("destroy()...");

    }

    /*
    * 可以用来获取Servlet的配置信息
    * */
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig()...");
        return null;
    }

    /*
    * 获取Servlet的信息
    * */
    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo()...");
        return null;
    }
}

步骤二:在web.xml中配置Servlet

  • 如何让浏览器访问Servlet, 需要给Servlet指定一个Servlet路径.
  • 在web.xml中配置
    <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>com.sunny.servlet.MyServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>firstServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
    

上面配置解释:
在web.xml中配置Servlet的目的其实只有一个,就是把访问路径与一个Servlet绑定到一起,上面配置是把访问路径:“/firstServlet”与“com.sunny.servlet.MyServlet”绑定到一起。

1、<servlet>:指定MyServlet这个Servlet的名称为firstServlet;
2、< servlet-mapping>:指定/MyServlet访问路径所以访问的Servlet名为firstServlet。
3、< servlet>和< servlet-mapping>通过< servlet-name>这个元素关联在一起了!

在这里插入图片描述
然后通过IDEA启动Tomcat, 在浏览器中输入http://localhost:8080/13_Tomcat_war_exploded/MyServlet 就可以看到IDEA控制台调用Servlet中的方法.
在这里插入图片描述
三、Servlet的生命周期
跳转到目录

  • void init (ServletConfig servletConfig)初始化方法

    1.如果有构造器,会先调用构造方法(优先于init)

    2、当Servlet被创建的时候执行init方法,且执行一次

    3、默认情况下,第一次被访问时,Servlet被创建

    4、可以在web.xml中servlet标签下配置Servlet的创建时间
    <load-on-startup>负数</load-on-startup>第一次访问时创建
    <load-on-startup>正数</load-on-startup>服务器启动时创建

    5、因为init方法只被执行一次,所以一个Servlet在内存中只存在一个对象,Servlet是单例. 多个用户同时访问时,可能存在线程安全问题。
    解决: 尽量不要在Servlet中定义成员变量。

  • void service (ServletRequest servletRequest, ServletResponse servletResponse)方法
    每当访问Servlet时,Servlet方法都会被调用一次

  • void destroy()销毁方法
    1、Servlet被销毁时执行,服务器关闭时,Servlet被销毁
    2、只有服务器正常关闭时,才会执行destory方法
    3、destory方法在Servlet被销毁之前执行,一般用于释放资源

  • 注意:Servlet类由我们编写,但对象由服务器创建,并且由服务器来调用对应的方法.

ServletConfig类

跳转到目录
一、ServletConfig的作用

  • 首先一个ServletConfig类对应着一段web.xml中配置的Servlet信息;也就是说我们配置的Servlet信息都会被Tomcat解析后,将配置信息的数据保存在ServletConfig类中.所以一个ServletConfig类只对应一段Servlet信息.

二、ServletConfig中的方法
跳转到目录

  • String getServletName(): 获取<servlet-name>的内容

  • ServletContext getServletContext():获取Servlet上下文对象

  • String getInitParameter(String name): 通过名称获取指定初始化参数的值

  • Enumeration getInitParameterNames(): 获取所有初始化参数的名称

    首先在web.xml的servlet标签中配置一些初始化参数要使用到:

    <!--可以配置对个-->
    <init-param>
    	<!--键值对-->
    	<param-name>name</param-name>
    	<param-value>ZYGui</param-value>
    </init-param>
    

在这里插入图片描述
三、在init方法中来获取配置信息
跳转到目录

        /*
         * 获取servlet-name
         */
        String servletName = servletConfig.getServletName();
        System.out.println(servletName);

        /*
         * 获取初始化参数的值
         */
        String initParameter1 = servletConfig.getInitParameter("name");
        System.out.println(initParameter1);
        String initParameter2 = servletConfig.getInitParameter("age");
        System.out.println(initParameter2);

        /*
            获取所有初始化参数的名称
         */
        Enumeration<String> enumeration = servletConfig.getInitParameterNames();
        while (enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }

在这里插入图片描述

发布了149 篇原创文章 · 获赞 68 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/103882158
今日推荐