Servlet总结-ServletConfig、ServletContext

本文详细介绍了如何创建Servlet并进行配置的过程,包括继承HttpServlet类、覆盖doGet/doPost方法及在web.xml中配置Servlet等内容。同时,还介绍了Tomcat容器访问Servlet的步骤以及ServletConfig和ServletContext的相关使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建Servlet

  1. 创建一个类继承javax.servlet.http.HttpServlet类
  2. 覆盖doGet(), doPost() 方法
  3. 在web.xml中配置servlet

    <servlet>
        <servlet-name>Index</servlet-name>
        <servlet-class>com.zjl.main.IndexServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Index</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>

    Tomcat容器访问Servlet的步骤:
    1. 客户端发送请求 http://www.xxx.com/index
    2. Tomcat容器 通过url-pattern 即/index,找到servlet-name,再有此找到servlet-class
    3. 创建Servlet对象,调用init() 方法
    4. Tomcat容器创建request和responce两个对象作为参数, 新开一个线程,运行service() 方法
    5. service() 方法内部根据请求的方法,调用不同的方法处理请求

ServletConfig 和 ServletContext

ServletConfig 关于servlet 的一些参数
1. 获取ServletConfig对象 在doXXX() 方法中调用 getServletConfig() 
2. 获取在web.xml中配置的参数
    // 根据参数名,获取参数值
    public String getInitParameter(String name);
    // 获取所有的参数名
    public Enumeration<String> getInitParameterNames();
    // 获取ServletContext对象
    public ServletContext getServletContext();
    // 获取servlet的名字
    public String getServletName();
    <servlet>
        <servlet-name>Index</servlet-name>
        <servlet-class>com.zjl.main.IndexServlet</servlet-class>
     <init-param>
            <param-name>name01</param-name>
            <param-value>value01</param-value>
      </init-param>
    </servlet>
ServletContext

ServletContext 是整个web应用的上下文

  1. 获取ServletContext对象: 在doXXX() 方法中调用getServletContext() 方法,获取通过ServletConfig对象调用getServletContext()方法获取
  2. ServletContext对象中的方法:
    // 获取在web.xml文件中配置的初始化参数
    public String getInitParameter(String name);
    // 同ServletConfig对象类似
    public Enumeration getInitParameterNames();
<context-param>
    <param-name>context_name</param-name>
    <param-value>context_value</param-value>
  </context-param>
// 访问资源文件
// 返回资源文件的URL对象,其中path参数必须以 / 开头,代表应用的根目录
public URL getResource(String path) throws MalformedURLException;
// 返回资源文件的流对象
public InputStream getResourceAsStream(String path);

// 设置Attribute,保存对象,使其在其他Servlet中也可以被访问
// 设置属性
public void setAttribute(String name, Object object);
// 获取属性
public Object getAttribute(String name);
public Object getAttribute(String name);
// 移除属性
public void removeAttribute(String name);
<think>好的,我现在需要回答用户关于Java Web中ServletConfigServletContext的区别及用法的问题。首先,我需要回顾一下这两个接口的基本概念作用,然后根据提供的引用材料整理它们的区别、生命周期、常用方法以及使用场景。 首先,根据引用[1]引用[5],ServletContext是一个接口,代表整个Web应用的上下文,每个Web工程只有一个实例。而ServletConfig是针对单个Servlet的配置,每个Servlet都有自己的ServletConfig对象,这在引用[5]中提到过,特别是当Servlet被初始化时,init方法会传入一个ServletConfig参数。 接下来,我需要比较它们的区别。根据引用[3]引用[5],ServletConfig主要用于获取单个Servlet的初始化参数,而ServletContext用于获取整个应用的参数。作用域方面,ServletConfigServlet级别的,每个Servlet独立,而ServletContext是应用级别的,所有Servlet共享。生命周期方面,ServletConfigServlet创建而创建,销毁而销毁;ServletContext则随应用启动创建,关闭时销毁。 在常用方法上,ServletConfig的getInitParametergetServletName方法用于获取特定参数Servlet名称,而ServletContext的getInitParametersetAttribute等方法用于全局配置共享数据。这些在引用[5]引用[4]中都有详细说明。 使用场景方面,ServletConfig适合读取当前Servlet的配置,比如数据库连接信息,而ServletContext适合全局数据共享,比如计数器或应用级别的配置,这在引用[2]引用[4]中提到过。 最后,需要生成相关问题,可能涉及它们的具体方法、共享数据机制、实际应用例子等。要确保回答结构清晰,引用正确,符合用户要求的中文回答格式规范,比如数学公式的正确使用,不过这个问题可能不涉及数学内容,但需要注意其他格式要求。</think>### Java Web中ServletConfigServletContext的区别及用法 #### 1. **基本定义** - **ServletConfig** 是单个Servlet的配置对象,每个Servlet独立拥有一个实例。它用于获取Servlet初始化参数Servlet名称,生命周期与所属Servlet绑定[^5]。 ```java // 示例:从ServletConfig中获取初始化参数 String param = getServletConfig().getInitParameter("dbUrl"); ``` - **ServletContext** 是Web应用的全局上下文对象,整个应用共享一个实例。它用于获取应用级别的初始化参数或共享数据,生命周期与Web应用绑定[^1][^3]。 ```java // 示例:从ServletContext中获取应用级参数 String appParam = getServletContext().getInitParameter("appName"); ``` --- #### 2. **核心区别** | **对比维度** | **ServletConfig** | **ServletContext** | |--------------------|------------------------------------------------|---------------------------------------------| | **作用范围** | 单个Servlet内有效 | 整个Web应用内有效 | | **初始化参数来源** | 通过`<init-param>`在`web.xml`中为Servlet配置 | 通过`<context-param>`在`web.xml`中全局配置 | | **生命周期** | 随Servlet创建而创建,随其销毁而销毁 | 应用启动时创建,关闭时销毁 | | **共享性** | 每个Servlet独立,无法跨Servlet访问 | 所有Servlet用户共享 | --- #### 3. **常用方法对比** - **ServletConfig** - `getInitParameter(String name)`:获取当前Servlet的初始化参数[^5]。 - `getServletName()`:返回Servlet在`web.xml`中配置的名称。 - **ServletContext** - `getInitParameter(String name)`:获取全局初始化参数(如数据库连接池配置)。 - `setAttribute(String name, Object value)`:存储应用级共享数据(如用户访问计数)。 - `getRequestDispatcher(String path)`:用于请求转发[^2][^4]。 --- #### 4. **典型使用场景** - **ServletConfig** - 读取当前Servlet的私有配置(如专属API密钥)。 - 动态获取Servlet名称用于日志记录。 - **ServletContext** - 共享全局数据(如缓存、应用统计信息)。 - 获取Web应用的资源路径(如配置文件路径)。 - 实现Servlet间的协作(如通过`setAttribute`传递数据)。 --- #### 5. **代码示例** ```java // ServletConfig示例:在Servlet初始化时读取配置 public void init(ServletConfig config) { String maxUsers = config.getInitParameter("maxUsers"); } // ServletContext示例:在应用启动时加载全局配置 public class AppListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { ServletContext context = sce.getServletContext(); String dbUrl = context.getInitParameter("databaseURL"); context.setAttribute("connectionPool", initializePool(dbUrl)); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值