【JavaWeb】重新认识 Servlet 的初始化 [ 回顾 Servlet ]

简介: 了解【JavaWeb】重新认识 Servlet 的初始化 [ 回顾 Servlet ]。

微信图片_20221031114612.png


重新认识Servlet的初始化


一、回顾Servlet

1.什么是Servlet

2.Servlet规范

3.Servlet生命周期

二、Servlet 的初始化方法

1.带参初始化

2.无参初始化

3.重写 init() 方法,进行额外的初始化准备

① 获取初始化参数值

② `ServletContext` 和 `<context-param>`


一、回顾Servlet

====================


1.什么是Servlet


在讲解Servlet初始化方法之前,让我们先回顾一下Servlet:


Servlet 是 Java 提供的一门动态Web资源开发技术。



2.Servlet规范


经过对Servlet规范的总结,我们得到以下几点:


Servlet规范是JAVAEE规范中的一种。

Servlet规范给开发者指定了 动态资源文件 的开发步骤。

Servlet规范给Http服务器指定了调用 动态资源文件 的规则。

Servlet规范给Http服务器指定了管理 动态资源文件实例对象 的规则。


3.Servlet生命周期


Servlet运行在Servlet容器中,其生命周期是由容器(Web服务器)来管理的,Servlet生命周期大致分为四个阶段:


实例化:默认情况下,当Servlet第一次被访问时,Web服务器(容器)会自动创建Servlet对象。


初始化:Servlet实例化后,容器会调用init()空参方法来初始化实例对象。这个过程中会完成加载配置文件、创建连接等初始化工作。初始化方法只会被调用一次


服务(请求响应):每次向Servlet发起请求时,Servlet容器都会调用Servlet中的service()方法来响应请求.(即:对请求进行处理)


销毁:当完成服务,需要释放内存或者关闭容器时,Servlet容器就会调用Servlet中的destroy()方法进行资源的释放:调用此方法后,容器会释放当前Servlet实例,而后该实例就会被Java垃圾收集器回收。


二、Servlet 的初始化方法


Servlet中的初始化方法有两个:


无参数的方法: init();

带参数的方法: init(ServletConfig config);

1.带参初始化


源码中,带参数的初始化方法代码如下:

public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
}

2.无参初始化


源码中,无参数的初始化方法代码如下:

public void init() throws ServletException {
}

3.重写 init() 方法,进行额外的初始化准备


如果我们想在Servlet初始化时做一些准备工作,那么我们可以重写init()方法


========================


① 获取初始化参数值


如果想要获取初始化设置的数据,我们可以这么做:


在XML文件中,为Servlet组件进行注册,同时设置初始化参数

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>Demo01Servlet</servlet-name>
        <servlet-class>com.haojin.servlet.Demo01Servlet</servlet-class>
        <init-param>
            <param-name>name</param-name>
            <param-value>InitName</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo01Servlet</servlet-name>
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>
</web-app>


XML配置文件中,<init-param> </init-param>标签内的内容,就是我们设置的初始化参数,参数名为:“name” ---- 参数值为:“InitName”


重写init()方法,利用ServletConfig实例对象获取初始化参数值

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/**
 * @author .29.
 * @create 2022-10-21 16:20
 */
public class Demo01Servlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        //获取ServletConfig实例对象
        ServletConfig config = getServletConfig();
        //通过实例对象调用getInitParameter()方法,获取初始化的参数
        String initValue = config.getInitParameter("name");
        //输出我们获取到的初始化参数,验证操作的可行性
        System.out.println("initValue = " + initValue);
    }
}

微信图片_20221031115247.png

因为我们没有重写service()方法,所以程序运行后浏览器页面会显示405类型的错误,但我们不需要理会。


这时候主要应检查控制台能否正确输出我们设置好的初始化参数,以验证上述重写init()方法,获取初始化参数值操作的可行性。

微信图片_20221031115252.png

注意绿色框框内容,程序成功读取配置文件中设置的初始化参数,控制台输出无误,实证明操作是可行的。



上述在XML配置文件中注册的操作过于繁琐,Servlet3.0后支持以注解的方式进行注册,让我们来看一下更加简便的一种实现方法吧:


仅仅在代码开头加上了注解,这样就不需要在XML配置文件中设置复杂的配置了。

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
/**
 * @author .29.
 * @create 2022-10-21 16:20
 */
@WebServlet(urlPatterns = {"/demo01"} ,
            initParams = {
                @WebInitParam(name = "name" , value = "InitName")
            }
            )
public class Demo01Servlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        //获取ServletConfig实例对象
        ServletConfig config = getServletConfig();
        //通过实例对象调用getInitParameter()方法,获取初始化的参数
        String initValue = config.getInitParameter("name");
        //输出我们获取到的初始化参数,验证操作的可行性
        System.out.println("initValue = " + initValue);
    }
}

② ServletContext 和 <context-param>


我们重写init()方法除了可以获取到配置文件中设置的初始化参数外,还可以用类似的流程来获取配置文件中设置的context参数。


XML文件中添加<context-param>配置:

<context-param>
        <param-name>ContextConfigLocation</param-name>
        <param-value>classpath:application.xml</param-value>
    </context-param>

XML配置文件完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>ContextConfigLocation</param-name>
        <param-value>classpath:application.xml</param-value>
    </context-param>
     <servlet>
        <servlet-name>Demo01Servlet</servlet-name>
        <servlet-class>com.haojin.servlet.Demo01Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo01Servlet</servlet-name>
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>
</web-app>

重写init()方法,在方法内获取初始化配置的context值:

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/**
 * @author .29.
 * @create 2022-10-21 16:20
 */
public class Demo01Servlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        //获取ServletContext实例对象
        ServletContext servletContext = getServletContext();
        //通过对象调用getInitParameter()方法,获取设置的初始化参数(通过参数名获取对应参数值)
        String contextConfigLocation = servletContext.getInitParameter("ContextConfigLocation");
        //在控制台输出获取到的值
        System.out.println("contextConfigLocation = " + contextConfigLocation);
    }
}

控制台输出:

成功获取到了xml配置文件中设置好的context值:

微信图片_20221031115301.png

🥇作者 .29. 的✔博客主页✔

微信图片_20221031115306.png

目录
相关文章
|
7月前
|
缓存 Java 应用服务中间件
javaweb实训第三天上午——Servlet(1)
Servlet基础 课程介绍 Servlet基础; (掌握) 基本结构 生命周期 执行流程 接收参数 响应数据
93 0
|
7月前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
132 3
|
3月前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
6月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
46 0
|
6月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
29 0
|
7月前
|
存储 安全 JavaScript
JavaWeb之Servlet(下)
本文主要介绍了JavaWeb开发中关于请求、响应、会话和Servlet3.0注解的相关知识。首先讲解了请求(Request)的常用方法,以及处理请求乱码问题的几种方式。接着讨论了响应(Response)的方法,,以及设置全局初始化参数。然后介绍了会话(Session)的概念,包括其生命周期、如何设置和获取初始化参数,并对比了全局初始化参数和Servlet3.0的`@WebServlet`注解。文中给出了具体的代码示例和测试结果,帮助读者更好地理解和掌握这些概念。
|
7月前
|
Java 应用服务中间件 程序员
JavaWeb之Servlet(上)
本篇博文介绍了JavaWeb中Servlet的基本概念和应用。Servlet是用于交互式浏览和修改数据、生成动态Web内容的Java程序,通常运行在支持Java的应用服务器上。文章讲解了Servlet的工作模式,包括客户端请求、服务器调用Servlet以及响应返回客户端的过程。此外,还提到了Servlet API,特别是doGet和doPost方法用于处理请求和响应。作者通过创建第一个Servlet的步骤,展示了如何实现Servlet接口并配置web.xml文件。最后,文章简述了Servlet的工作原理和生命周期,强调了Servlet的单例特性以及初始化、服务和销毁的过程。
|
7月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
185 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
7月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
106 0
|
7月前
|
编解码 应用服务中间件 数据库