阅读 116

Javaweb学习笔记6(Servlet)

Javaweb学习笔记6(Servlet)

servlet

基本介绍

全程是server applet,运行在tomcat上的小程序


图解:



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

将来我们自定义一个类,实现Servlet接口,复写方法。

代码实现

创建JavaEE项目

定义一个类,实现Servlet接口

实现接口中的抽象方法

配置Servlet

实现Servlet

首先实现Servlet接口,使用implements Servlet

再实现他的全部方法


主要是找到service方法,这个方法就是提供服务的方法


package com.example.ServletTest;


import javax.servlet.*;

import java.io.IOException;


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("hello");

    }


    @Override

    public String getServletInfo() {

        return null;

    }


    @Override

    public void destroy() {


    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

配置servlet

要用到这个java类,我们需要配置好web.xml来指向向这个类

其中有两部分


第一是为这个类命一个名

第二是为这个类配置好映射访问的路径

<!--配置servlet名称-->

    <servlet>

        <!--命名-->

        <servlet-name>demo1</servlet-name>

        <!--定位相关的类-->

        <servlet-class>com.example.ServletTest.ServletDemo1</servlet-class>

    </servlet>

    <!--配置servlet映射-->

    <servlet-mapping>

        <servlet-name>demo1</servlet-name>

        <!--配置资源访问路径-->

        <url-pattern>/demo1</url-pattern>

    </servlet-mapping>

1

2

3

4

5

6

7

8

9

10

11

12

13

访问localhost:8080/demo1后发现成功访问了




到控制台发现成功输出的hello,servlet


说明之前的ServletDemo1类的service方法成功调用了


原理简述

图解



文字简述

当客户端通过一个url来访问一个servlet的资源路径时候,http://localhost:8080/demo1,浏览器就会去寻找web.xml

遍历web.xml的信息,找到<url-pattern>内容与demo1一样的映射

找到了映射后就会去找全类名<servlet-class>:com.example.ServletTest.ServletDemo1(以后看到全类名就要想到映射)

tomcat将全类名对应的字节码问件加载进内存,Class.forName(),创建对象,调用方法

对于这个service方法,由于我们之前使用了implements Servlet,并按照规则实现了他的所有方法,所以tomcat是肯定能够准确的调用service方法的

servlet的方法介绍

之前我们使用implements Servlet实现了其中的五个方法

先创建第二个类来测试,记得在web.xml里面配置好

这样写一下


public class ServletDemo2 implements Servlet {


    @Override

    public void init(ServletConfig servletConfig) throws ServletException {

        System.out.println("init");

    }


    @Override

    public ServletConfig getServletConfig() {

        return null;

    }


    @Override

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        System.out.println("service");

    }


    @Override

    public String getServletInfo() {

        return null;

    }


    @Override

    public void destroy() {

        System.out.println("destroy");


    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

init():在servlet被创建的时候被调用执行,只会执行一次


service():提供服务,每一次servlet被访问就会调用一次



destroy():当服务器正常关闭的时候执行,只会执行一次



getServletConfig():获取ServletConfig对象,ServletConfig是servlet的配置对象,后面会详细学


getServletInfo():获取servlet的版本信息之类的,平常不会去实现它


生命周期

创建时:执行init方法,且执行一次


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


可以配置执行Servlet的创建时机。

在<servlet>标签下配置:

第一次被访问时,创建

<load-on-startup>的值为负数

在服务器启动时,创建

<load-on-startup>的值为0或正整数



提供服务:执行service方法,执行多次


每次访问Servlet时,Service方法都会被调用一次

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


Servlet被销毁时执行。服务器关闭时,Servlet被销毁

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

destroy方法在Servlet被销毁之前执行,一般用于释放资源

Servlet > 3.0

Servlet版本大于3.0支持注解配置,不需要到web.xml里面指定类名和映射了


步骤

创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml

定义一个类,实现Servlet接口

复写方法

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

@WebServlet(“资源路径”)或者写@WebServlet(urlPatterns = “资源路径”)


成功访问


Servlet的体系结构

Servlet的体系结构有三层,爷-父-孙三级继承


Servlet – 接口

|

GenericServlet – 抽象类

|

HttpServlet – 抽象类


我们在开发的时候,写servlet实现他的方法有一大堆,但是我们实际常用到的也就是service方法,那么就想有一个办法预定义好那些不长用的方法


厂商给出了这样的体系,注意这两个是类,是用extend来继承


GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

其他的方法你想重写哪个就导入就行

HttpServlet:对http协议的一种封装,简化操作

定义类继承HttpServlet

复写doGet/doPost方法

在开发中我们需要对get和post接收做出处理,这样每次去实现就会很麻烦,这时候HttpServlet就可以很方便的实现这些东西



@WebServlet("/demo4")

public class ServletDemo4 extends HttpServlet {

    @Override

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

        System.out.println("GET...");

    }


    @Override

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

        System.out.println("POST...");

    }

}

1

2

3

4

5

6

7

8

9

10

11

12


访问网站和a=123,一共进行两次get请求


post同理


urlpartten:Servlet的配置

可以看到WebServlet里面的urlpatterns的类型是数组,意思就是一个servlet可以匹配多个路径


一个Servlet可以定义多个访问路径 :

格式:用大括号来包起来,@WebServlet({"/aaa","/bbb","/ccc"})

路径定义规则:

1. /xxx:路径匹配

2. /xxx/xxx:多层路径,目录结构,可以用*通配符,这样第二级的目录不管输入什么都能访问到

3. *.do:扩展名匹配,注意前不能加/,do这个后缀可以随便改

————————————————

版权声明:本文为CSDN博主「huamanggg」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_51078229/article/details/115711932


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐