【博学谷学习记录】超强总结,用心分享|【Java Web】Servlet

目录

什么是Servlet?

Servlet快速入门

Servlet的执行过程

Servlet的生命周期

ServletConfig

ServletContext


什么是Servlet?

Servlet是一个运行于Web服务器的Java程序,用于接受和响应客户端的http请求。

主要是配合动态资源使用,当然静态资源也需要使用servlet访问,只不过Tomcat里面已经定义好了一个DefaultServlet。

Servlet快速入门

1.创建Servlet

创建一个普通类,实现Servlet接口

2.配置Servlet

在web.xml中配置Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" version="2.5">
         <!-- 名称需要和项目名一致 -->
         <display-name>servlet_practice</display-name>
         
         <!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 -->
         <servlet>
             <servlet-name>TestServlet</servlet-name>
             <servlet-class>cn.liuwei.servlet.TestServlet</servlet-class>
         </servlet>
         
         <!-- 注册servlet的映射。 servlet-name:找到上面注册的servlet, url-pattern:地址栏的路径 -->
         <servlet-mapping>
             <servlet-name>TestServlet</servlet-name>
             <url-pattern>/testServlet</url-pattern>
         </servlet-mapping>

</web-app>

3.运行web项目

Servlet的执行过程

当使用url进行对Tomcat请求时,访问流程如下所示

  1. 先找到Tomcat
  2. 根据url中的名称找到具体的项目
  3. 找到项目下的web.xml,然后寻找url-pattern,看有没有哪个pattern对应url中的值
  4. 找到servlet-mapping中的servlet-name
  5. 找到前面注册的servlet-name
  6. 根据servlet-class中的值找到对应的Servlet类并创建实例
  7. 执行Servlet中的方法

Servlet的生命周期

生命周期

Servlet从创建到销毁的一段时间:

  1. 初始化:一个Servlet只会初始化一次

生命周期方法

Servlet从创建到销毁期间调用的方法:

  1. init:初始化方法,在创建servlet的实例时调用该方法。默认情况下,初次访问servlet才会创建实例
  2. service:当有请求到servlet时调用该方法。该方法可以被执行多次
  3. destroy:servlet销毁时调用该方法

Servlet提前执行init方法

默认情况地下,只有在初次访问Servlet时才会执行init方法。有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。这个时候就需要让init方法提前执行,免得影响初次访问的体验。

想要让init方法提前执行,需要在web.xml文件中对需要提前执行的Servlet进行设置

<!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 -->
         <servlet>
             <servlet-name>TestServlet</servlet-name>
             <servlet-class>cn.liuwei.servlet.TestServlet</servlet-class>
             <!-- 设置Servlet的init方法提前执行 -->
             <load-on-startup>2</load-on-startup>
         </servlet>

load-on-startup的值越小,提前执行的优先级越高。并且一般不设置为1,因为1是Tomcat的的Servlet的优先级

ServletConfig

ServletConfig用于获取Servlet的配置信息

//1.获取ServletConfig对象, 获取的是用于配置的信息
ServletConfig config = this.getServletConfig();

ServletConfig类中有4个方法:

  • getServletName:获取Servlet的配置名称
  • getInitParameter("name"):获取Servlet配置时的某个参数的值
String initName = config.getInitParameter("name");

参数在web.xml文件中配置

<servlet>
     <servlet-name>HelloServletConfig</servlet-name>
     <servlet-class>cn.liuwei.servlet.HelloServletConfig</servlet-class>
             
     <init-param>
         <param-name>name</param-name>
         <param-value>Andrew</param-value>
     </init-param>
 </servlet>
  • getInitParameterNames:获取Servlet配置时的所有参数的值
Enumeration<String> names = config.getInitParameterNames();

为什么需要ServletConfig?

当jar包的编写者需要一个由jar包的使用者定义的变量时,可以提前在Servlet代码中用ServletConfig获取变量,然后让使用者在web.xml文件中定义这个变量的值

ServletContext

每个Web应用只有一个ServletContext对象,即不管在哪个Servlet中,他们获取到的ServletContext对象都是同一个

通过getServletContext()方法获取ServletContext对象

ServletContext context = getServletContext();

ServletContext的作用

1.可以获取全局配置参数

在web.xml中配置全局参数

 <context-param>
     <param-name>address</param-name>
     <param-value>上海杨浦</param-value>
</context-param>

通过getInitParameter方法获取全局参数

2.获取web应用中的资源

通过getRealPath方法获取给定文件的绝对路径

String path = context.getRealPath("");

通过getResourceAsStream方法获取Web工程下的资源,并转换成流对象

//使用context的getResourceAsStream方法时的根路径是Tomcat中的项目文件的路径
InputSream is = context.getResourceAsStream("");

3.使用ClassLoader获取资源文件

//获取该Java文件的class类,然后获取到加载这个class到虚拟机中的那个类加载器对象
//通过这个方法的根路径是项目文件下的WEB-INF/classes
InputStream is = this.getClass().getClassLoader().getResourceAsStream("");

4.使用ServletContext存取数据

5.ServletContext的生命周期

服务器启动时,会为托管的每一个web应用程序创建一个ServletContext对象

从服务器移除托管,或者关闭服务器是会销毁ServletContext对象

6.ServletContext的作用范围

同一个项目的ServletContext对象是一致的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值