Servlet相关概述

Servlet概念(server applet)

官方定义:运行在服务器端的小程序

*动态资源的逻辑性体现在Java代码上,直观的就是去寻找Java类,这里的Java类是依赖于服务器才能运行的。

*要遵循一定的规则,才能被tomcat所识别,这里的规则指的就是Java当中的Interface(接口)。

Servlet:本质上就是一个接口,定义了Java类被浏览器访问到(被Tomcat识别)的规则。

官方给出的Servlet的API

Servlet接口当中的方法

Servlet快速入门

1.创建JavaEE项目

2.定义一个类,实现Servlet接口

3.实现接口当中的抽象方法

4.配置Servlet

在web.xml当中配置Servlet

    <!--configure Servlet-->
    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>cn.itcast.web.servlet.ServletDemo</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

Servlet执行原理

tomcat实际上是一个web容器

*当服务器接收到客户端浏览器的请求后,会解析请求URL路径,会获取访问的servlet的资源路径。

访问地址:http://localhost:8080/day8_tomcat/demo

通过localhost:8080可以找到tomcat应用进程,通过day8_tomcat可以找到部署的项目,“/demo”为资源名称。

*查找web.xml文件

在web.xml的<servlet-mapping>当中解析<url-pattern>对应的是否存在一个“/demo”的资源名称,然后找到对应的<servlet-name>,通过<servlet>当中的<servelt-name>找到对应的位置,在通过<servlet-calss>找到对应的类。

1、tomcat将全类名对应的字节码文件加载进内存。class.forName();

2、创建对象。cls.newInstance();

3、调用方法——service()方法。(因为实现接口,必然存在这个方法)。

Servlet当中的方法

Servlet接口方法解析

package cn.itcast.web.servlet;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemoExtend implements Servlet {
    /**
     * 初始化方法
     * 在Servlet被创建的时候执行,只会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

    /**
     *获取ServletConfig对象
     * ServletConfig:servlet配置对象
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务的方法
     * 每一次servlet访问时被执行,可能会执行多次
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...");
    }

    /**
     * 获取servlet的一些信息
     * 版本、作者...一般不会去实现这个方法
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 在servlet被杀死的时候将会执行
     * 在服务器被正常关闭的时候将会执行,仅仅会执行一次
     */
    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

Servlet中的生命周期相关的几个重要方法

1、被创建:执行init方法,只执行一次

    *servlet什么时候被创建:默认情况下,第一次被访问时,servlet被创建

    *可以配置执行sevlet的创建时机

    <!--configure ServletDemoExtend-->
    <servlet>
        <servlet-name>demoextend</servlet-name>
        <servlet-class>cn.itcast.web.servlet.ServletDemoExtend</servlet-class>
        <!--指定servlet的创建时机-->
        <!--第一次被访问时,创建,值负数-->
        <!--在服务器启动时,创建,值整数或者零-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    *servlet的init方法,只执行一次,说明一个servlet在内存只存在一个对象,servlet的单例的

    *多个用户同时访问时,可能存在线程安全问题(12306买票问题):

    *如果对方法加锁,将会大大影响性能,因此不会采用加锁的方法

    *解决:尽量不要再servlet当中不要定义成员变量,即使定义成员变量,也不要对其同时修改值

2、提供服务:执行service方法,将会执行多次

    *每一次访问servlet时,service方法都会执行一次。

3、被销毁:执行destroy方法,只执行一次

    *servlet被销毁时执行。服务器关闭时servlet被销毁。

    *只有服务器被正常关闭的时候,才会执行destroy方法

    *destroy方法执行完毕才进行servlet的销毁

Servlet3.0

优点

支持注解配置,不需要web.xml

步骤

1、创建JavaEE项目,选择Servlet3.0以上的版本,可以不创建web.xml

2、定义一个类,实现Servlet接口,实现抽象方法

3、在类上使用@WebServlet注解,进行配置

@WebServlet(urlPatterns = "/demo")
发布了76 篇原创文章 · 获赞 18 · 访问量 2747

猜你喜欢

转载自blog.csdn.net/qq_43446165/article/details/103895287
今日推荐