Servlet:Java服务器端小应用 第二天

【Servlet:Java服务器端小应用 第二天】

1   Servlet的使用

1.1  Servlet在Tomcat中运行的原理

  1. 启动Tomcat服务器(以下动作只在服务器启动的时候执行):

1)   解析web项目的web.xml文件

2)   通过反射创建所有的Servlet对象

       反射创建

Class clazz=Class.forName(“包名+类名”);

Servlet servlet= clazz.newInstance();

       将创建好的Servlet对象放到Map集合中:

       key是web.xml配置文件中的映射路径(url-pattern)

       value是Servlet对象

  1. Tomcat服务器接收请求

请求地址: http://localhost:8080/demo/HelloServlet

  1. Tomcat服务器解析请求:

Tomcat服务器解析请求后,会诞生两个对象分别为:

HttpServletRequest对象:存储此次请求的所有相关信息(行、头、体),每次请求重新创建

HttpServletResponse对象:存储了此次请求的响应流对象,每次请求重新创建

  1. Tomcat服务器查找请求的资源

Tomcat服务器根据请求地址从map集合中获取要调用的Servlet对象

Servlet servlet=map.get(“/HelloServlet”);

  1. Tomcat服务器调用Servlet对象的过程:

Class clazz= servlet.getClass();

Method method = clazz.getMethod(“service”,HttpServletRequest.class,HttpServletResponse.class);

method.invoke(servlet,request,response);

注意:

该流程由Tomcat底层接收请求后自动执行,我们是看不到的,我们需要做的是将实现了Servlet接口的代码提前放到Tomcat服务器中,这样请求被接收后就可以反射调用了。

1.2  Servlet案例开发中的问题处理

1.2.2  默认欢迎页的设置(掌握)

默认欢迎页就是指,浏览器发出的请求路径中没有指定具体的访问资源时,默认就会访问的页面。

在Tomcat中的conf/web.xml中配置了全局的几个默认欢迎页。

欢迎页可以配置多个,匹配优先级自上而下。

<welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

 

一般在我们项目中要设置默认欢迎页的话,在自己项目的web.xml中设置即可!不要改Tomcat中的conf/web.xml进行设置。

<welcome-file-list>

    <welcome-file>hello.html</welcome-file>

</welcome-file-list>

1.3  Servlet的生命周期

我们知道,浏览器发起请求后达到Tomcat服务器;

服务器会解析请求信息得到HttpServletRequest和HttpServletResponse两个对象;

然后服务器再通过反射去调用Servlet的service方法去处理请求。

那么问题来了。

1.3.1  问题1:Servlet对象创建、初始化并使用完后会销毁吗?

显然,Servlet对象在创建、初始化并使用后不应该销毁。如果使用完(请求处理完)就销毁,那么下次过来请求又得去创建Servlet对象,这样效率并不高!!

我们自始至终都使用同一个Servlet对象去处理请求,如果同时有10个请求过来访问Tomcat服务器,服务器会创建10个线程来处理请求,因为service方法不涉及到全局变量的修改操作,所以也不会有线程安全问题的。

1.3.2  问题2:Servlet对象会被创建及初始化几次?

由问题1,我们可以了解到,Servlet对象只会被创建及初始化一次。之后会驻留在内存当中。

1.3.3  问题3:Servlet对象是在什么时候创建及初始化的?

Servlet的创建与初始化的时机有两个:

  1. Servlet在第一次被浏览器访问的时候创建与初始化的(目前我们的代码用的就是这种方式,默认就是这种)
  2. Servlet在启动服务器的时候被创建与初始化的(该方式需要做一些配置,告诉Tomcat服务器在启动的时候就创建Servlet对象)

1.3.4  问题4:Servlet对象什么时候销毁?

Servlet对象是由Tomcat服务器创建的,之后就一直驻留在内存中处理请求。直到服务器停止后,Servlet才会被销毁!

1.3.5  Servlet生命周期总结

  1. 没有配置load-on-startup的情况

配置了load-on-startup的情况:


服务器启动的时候就会执行:构造方法,然后执行初始化方法。

之后有请求过来,就直接走service方法进行处理。

服务器停止的时候,执行销毁方法。

2   Servlet的继承结构

2.1  概述

l  tomcat服务器是支持Servlet规范的。我们写的代码要想被服务器调用到,也必须遵守Servlet规范

l  在Java中提到规范,其实就是接口,及接口的一系列实现类

l  之前我们写的Servlet类并没有去直接实现Servlet接口,是因为该接口中方法较多,而我们一般只关注service方法,而Servlet接口有它的一系列实现类,我们继承这些实现类即可,也就相当于间接的实现了Servlet接口

2.2  继承结构体系

 

对各个继承结构的详细描述:

 

2.3  注意

tomcat服务器在接收到浏览器的请求后,会调用自定义的Servlet的service方法处理器请求,如果当前自定义的Servlet类没有service方法会调用父类的service方法进行处理。

tomcat服务器本质上是不区分请求是post请求还是get请求,只要来了请求,它都直接调用对应的Servlet对象的service方法!!!

注意this关键字的含义!

3   请求(HttpServletRequest)

3.1  service方法的再次强调

3.1.1  service方法的作用

在service方法中编写处理请求的业务逻辑代码,浏览器发送请求后由tomcat服务器自动调用执行。

3.1.2  service方法的方法体

service方法中写业务逻辑代码的话,大概是如下三步:

  1. 获取请求数据
  2. 处理请求数据
  3. 响应结果

3.2  HttpServletRequest对象获取请求数据

3.2.1  request对象的来源

浏览器发送请求后,由tomcat服务器接收到,然后对请求的信息进行解析,将解析结果封装到HttpServletRequest和HttpServletResponse两个对象中。

然后tomcat通过反射调用service方法的时候,又将这两个对象传递给了service方法。

3.2.2  request对象的特点

  1. 在tomcat服务器接收请求后,对请求进行解析后创建的
  2. 每次请求,tomcat服务器都会重新创建
  3. request对象存储了此次请求的所有数据(http协议中的请求行、头、体)
posted @ 2020-12-16 20:58  LesterLin  阅读(75)  评论(0)    收藏  举报