🎄欢迎来到@dandelionl_的csdn博文,本文主要讲解Java web中Servlet里面的ServletConfig和ServletContext的相关知识🎄
🌈我是dandelionl_,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下,下次更新不迷路🎆
Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕
目录
🌕为啥一个Servlet对应着一个ServletConfig
一. ServletConfig
ServletConfig 基本介绍
ServletConfig 类能干什么
1. 获取 Servlet 程序的 servlet-name 的值
应用实例 :
- 需求: 编写 DBServlet.java 完成如下功能
- 在 web.xml 配置连接 mysql 的用户名和密码
- 在 DBServlet 执行 doGet()/doPost() 时,可以获取到 web.xml 配置的用户名和密码
- 示意图(思路分析)
- 代码实现
public class ServletConfig_ extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
ServletConfig servletConfig = getServletConfig();
String username = servletConfig.getInitParameter("username");
String pwd = servletConfig.getInitParameter("pwd");
System.out.println("username = " + username);
System.out.println("pwd = " + pwd);
}
}
xml配置
<servlet>
<servlet-name>ServletConfig_</servlet-name>
<servlet-class>com.lxb.servlet.servletMethod.ServletConfig_</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>lxb</param-value>
</init-param>
<init-param>
<param-name>pwd</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfig_</servlet-name>
<url-pattern>/servletConfig</url-pattern>
</servlet-mapping>
二. ServletContext
为什么需要 ServletContext
ServletContext 基本介绍
3. ServletContext 对象 是在 web 工程启动的时候创建,在 web 工程停止的时销毁
ServletContext 可以做什么
应用实例 1-获取工程相关信息
String contextPath = servletContext.getContextPath();
String realPath = servletContext.getRealPath("/");
String serverInfo = servletContext.getServerInfo();
System.out.println("contextPath = " + contextPath);
System.out.println("realPath = " + realPath);
System.out.println("serverInfo = " + serverInfo);
应用实例 2-简单的网站访问次数计数器
需求: 完成一个简单的网站访问次数计数器:
package com.lxb.servlet.servletMethod;
//-*- code = utf-8 -*-
//@Time : 2023-07-18 10:42:06
//@Authors : 罗雄波
//@File : OrderServlet.java
//@Software : IntelliJ IDEA
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = {"/order"})
public class OrderServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
ServletContext servletContext = getServletContext();
Object attribute = servletContext.getAttribute("visit-count");
if(attribute == null) {
servletContext.setAttribute("visit-count", 1);
attribute = 1;
} else {
attribute = Integer.parseInt(String.valueOf(attribute)) + 1;
servletContext.setAttribute("visit-count", attribute);
}
resp.setContentType("text/html; charset = utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>新网站被访问的次数是 : " + attribute + "</h1>");
}
}
另一个页面的类
package com.lxb.servlet.servletMethod;
//-*- code = utf-8 -*-
//@Time : 2023-07-18 09:42:38
//@Authors : 罗雄波
//@File : ServletContext_.java
//@Software : IntelliJ IDEA
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = {"/context"})
public class ServletContext_ extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
ServletContext servletContext = getServletContext();
Object attribute = servletContext.getAttribute("visit-count");
if(attribute == null) {
servletContext.setAttribute("visit-count", 1);
attribute = 1;
} else {
attribute = Integer.parseInt(String.valueOf(attribute)) + 1;
servletContext.setAttribute("visit-count", attribute);
}
resp.setContentType("text/html; charset = utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>新网站被访问的次数是 : " + attribute + "</h1>");
}
}
为啥一个Servlet对应着一个ServletConfig
ServletConfig对象是在Servlet初始化时由Servlet容器创建并传递给Servlet的,用于存储Servlet的配置信息和初始化参数。每个Servlet实例都有一个唯一的ServletConfig对象,它与该Servlet实例一一对应。
通过ServletConfig对象,Servlet可以获取到与其相关的配置信息,如初始化参数、Servlet名称、Servlet上下文等。ServletConfig提供了以下几个常用的方法:
getInitParameter(String name)
:获取指定名称的初始化参数的值。getInitParameterNames()
:获取所有初始化参数的名称的枚举。getServletName()
:获取当前Servlet的名称。getServletContext()
:获取当前Servlet所在的ServletContext对象。
ServletConfig对象是在Servlet的生命周期中非常重要的组成部分,它为Servlet提供了访问配置信息的能力,使得Servlet能够根据自身的需求进行初始化和处理请求。
为啥一个web对应一个ServletContext
ServletContext对象代表整个Web应用程序的上下文环境,它在应用程序启动时由Servlet容器创建,并在整个应用程序的生命周期中存在。每个Web应用程序都有一个唯一的ServletContext对象,并且该对象被所有在同一Web应用程序中运行的Servlet共享。
通过ServletContext对象,Servlet可以获取与整个应用程序相关的重要信息和资源,如:
- 初始化参数:ServletContext对象提供了方法来获取设置在web.xml配置文件中的应用程序级别的初始化参数。
- 资源访问:ServletContext对象提供了方法来获取应用程序范围内的资源,如读取文件、访问数据库连接池等。
- 上下文路径:ServletContext对象提供了方法来获取应用程序部署在服务器上的上下文路径。
- 共享属性:ServletContext对象提供了一种在应用程序范围内共享数据的方式,可供不同的Servlet实例之间进行交互。
总之,对于一个Web应用程序,ServletContext对象是代表整个应用程序的上下文环境,并且为所有运行在这个应用程序中的Servlet提供了共享的信息和资源访问能力。
getServletConfig()
ServletConfig
接口表示Servlet的配置对象,它包含了Servlet的初始化参数和其他配置信息。每个Servlet实例都有一个对应的ServletConfig
对象,用于存储该Servlet的配置数据。
通过调用getServletConfig()
方法,可以获取当前Servlet实例的ServletConfig
对象。ServletConfig
对象提供了一系列方法来获取Servlet的配置信息,例如获取初始化参数、获取Servlet名称、获取Servlet上下文等。
常见的使用场景包括:
- 获取Servlet的初始化参数:通过
getInitParameter(String name)
方法可以获取指定名称的初始化参数的值。 - 获取Servlet的名称:通过
getServletName()
方法可以获取当前Servlet的名称。 - 获取Servlet的上下文信息:通过
getServletContext()
方法可以获取当前Servlet所在的ServletContext
对象,从而获取整个Web应用程序的上下文信息。
总的来说,getServletConfig()
方法返回的是当前Servlet实例的配置对象,通过这个对象可以获取Servlet的配置信息,以便在Servlet的运行过程中使用和处理。
getServletContext()
ServletContext
对象表示整个Web应用程序的上下文环境,它是在Web应用程序启动时由Servlet容器创建并提供给每个Servlet使用的。它在整个应用程序中是唯一的,并且可以在所有的Servlet中共享和访问。
ServletContext
对象提供了一系列方法,用于获取和设置与Web应用程序相关的信息,以及执行与应用程序环境和运行时状态有关的操作。一些常见的用途包括:
- 获取Web应用程序的初始化参数。
- 在应用程序范围内共享数据。
- 获取Web应用程序的上下文路径。
- 获取服务器和Servlet容器的信息。
通过getServletContext()
方法,Servlet可以获取到当前Web应用程序的ServletContext
对象,并利用它提供的方法来完成各种与应用程序环境相关的任务。
什么是上下文
上下文环境(Context)是指在特定范围内相关联的数据、配置和资源的集合,它提供了一种在这个范围内共享和访问这些内容的机制。在Web应用程序中,上下文环境是指整个应用程序的运行环境和配置信息。
具体来说,ServletContext对象表示整个Web应用程序的上下文环境。它是在应用程序启动时由Servlet容器创建的,并且在整个应用程序的生命周期中都存在。每个Web应用程序都有一个唯一的ServletContext对象。
上下文环境包含了与Web应用程序相关的重要信息,如:
- 初始化参数:在web.xml配置文件中定义的应用程序级别的初始化参数,可以通过ServletContext对象的方法获取到。
- Servlet的上下文路径:表示Web应用程序部署在服务器上的路径,通过ServletContext对象的
getContextPath()
方法可以获取。 - 共享数据:可以在整个应用程序范围内共享和访问的数据,例如存储在ServletContext对象中的属性。
- 资源访问:可以通过ServletContext对象获取应用程序所需的共享资源,如数据库连接池、文件路径等。
上下文环境提供了一种在应用程序中共享和访问全局数据和资源的机制,使得不同的组件(如Servlet、Filter、Listener等)能够在应用程序中进行协同工作,共享信息和资源。它是Web应用程序的基础设施,与应用程序的运行和配置密切相关。