Servlet(一)【Servlet简介、Servlet快速入门、Servlet注解方式、Servlet生命周期】

前 言

人总是要有梦想的,也许哪天就实现了呢!

如果有不正确之处,还望赐教,毕竟我只是初学者!


一、Servlet 简介

1、概 述

该内容来源于百度百科

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。其本质是一个接口。


2、为什么需要Servlet?

学完前端三件套后的我们,可以写出丰富的页面,但是始终是页面,却不能实现一些与后端的交互功能,例如:现在有一个表单,虽然样式很精美,但是你点击提交的时候,你所输入的数据却无处存放,不能够成功的交给后台,与此同时你也不能从后台拿到数据向用户展示。为了解决这个问题,就出现了Servlet技术。Servlet技术可以帮助我们拿取前台数据和向前台发送数据。


二、Servlet 快速入门

public class ServletDemo implemens Servlet {
    public static void main(String[] args) {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {

        }

        @Override
        public ServletConfig getServletConfig() {
            return null;
        }

        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("hello servlet");
        }

        @Override
        public String getServletInfo() {
            return null;
        }

        @Override
        public void destroy() {

        }
    }
}

在WEB-INF目录下的web.xml中配置该Servlet
<servlet>
    <servlet-name>servletDemo</servlet-name>
    <servlet-class>com.lmy.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>servletDemo</servlet-name>
    <url-pattern>/servletDemo</url-pattern>
</servlet-mapping>    

执行原理

  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径,即<url-pattern>标签体中的内容
  2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容
  3. 如果有,则找到其对应的<servlet-class>全类名
  4. 然后tomcat会将字节码文件加载进内存,并且创建其对象
  5. 最后调用其方法

三、Servlet 生命周期

1、生命周期的五个步骤

  1. 加载Servlet:当Tomcat第一次访问Servlet的时候,tomcat会将其加载到web容器中,并对其进行实例化;
  2. Servlet初始化:当Servlet被实例化后,Tomcat会调用init()方法来初始化Servlet对象;
  3. 处理服务:当Servlet被初始化后,浏览器发出请求,Servlet会调用service()方法来处理该请求;
  4. 销毁:当Tomcat关闭或检测到Servlet要从Tomcat中删除的时候会自动调用destory()方法让该Servlet对象释放所占的资源;一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁;
  5. 卸载:当Servlet调用完destroy()方法后,等待垃圾回收;如果有需要再次使用这个Servlet,会重新调用init()方法进行初始化操作;

2、代码示例

public class ServletDemo3 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("我被初始化啦!!!!");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("我被执行啦!!!!");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("我被销毁了!!!");
    }
}

web.xml中servlet配置:
<servlet>
    <servlet-name>servletDemo3</servlet-name>
    <servlet-class>com.itcast.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletDemo3</servlet-name>
    <url-pattern>/demo3</url-pattern>
</servlet-mapping>    

2、执行过程

  1. 启动项目,访问demo3:
    在这里插入图片描述

  2. 我们再次访问该路径:
    在这里插入图片描述

  3. 最后关闭程序:
    在这里插入图片描述

3、执行过程分析

  1. init()方法只会执行一次:我们访问了该servlet两次,而init()方法只在第一次访问的时候被执行,并且先于service()方法执行;
  2. 每被访问一次,service()方法被执行一次;
  3. 当程序关闭时,才会执行destory()方法;

四、Servlet 注解方式

1、为什么出现注解方式

在Servlet3.0版本之前,我们每写一个Servlet,我们就需要在web.xml文件中配置该Servlet,保证其可以被成功访问,这种方式,很繁琐。假设出现一种情况,一个项目有20多个servlet,而你也就必须配20多个Servlet,有时候还可能出错。为了解决这一问题,简化开发,在Servlet3.0以后便可以使用注解的方式来设置Servlet访问路径等信息。


2、如何将web项目设置为3.0以上版本

这里只提供idea的修改方式,在新建项目时如下操作:

在这里插入图片描述


3、代码示例

@WebServlet(value = "/servletDemo1")
public class ServletDemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet 3.0");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {

    }
}

4、注解注意事项

  1. 注解中的value可以替换为url-pattern,value值为虚拟路径,并且value也可以省略不写,即@WebSerlvet("/servletDemo1")
  2. 查看底层代码时,value和url-patter都为String数组,这就代表着我们可以为一个Servlet设置多个虚拟目录,通过不同的虚拟目录所访问的都是同一个Servlet;例如:@WebServlet(value={"/servletDemo1", "/demo1", "/hello"}),但是不推荐这样做,因为这样会导致不好控制访问路径。、

5、路径定义规则

  1. /xxx:单层路径匹配,强烈推荐这种方式,因为可以明确指定Servlet
  2. /xxx/xxx:多层路径,目录结构,这种方式可以体现出项目的目录结构,推荐使用
  3. /*:任意路径都可以匹配成功,这种URL优先级最低,不推荐去这样使用
  4. *.do:通过指定扩展名匹配,扩展名前面的名称可以任意,这种方式也不推荐

发布了22 篇原创文章 · 获赞 0 · 访问量 345

猜你喜欢

转载自blog.csdn.net/Yi__Ying/article/details/104452888