0
点赞
收藏
分享

微信扫一扫

ServletConfig接口和ServletContext接口中常用方法详解

快乐与微笑的淘气 2022-04-05 阅读 75
java-ee

ServletConfig

- 什么是ServletConfig?

  - Servlet对象的配置信息对象。
  - ServletConfig对象中封装了<servlet></servlet>标签中的配置信息。(web.xml文件中servlet的配置信息)

- 一个Servlet对应一个ServletConfig对象。

- Servlet对象是Tomcat服务器创建,并且ServletConfig对象也是Tomcat服务器创建。并且默认情况下,他们都是在用户发送第一次请求的时候创建。

- Tomcat服务器调用Servlet对象的init方法的时候需要传一个ServletConfig对象的参数给init方法。

- ServletConfig接口的实现类是Tomcat服务器给实现的。(Tomcat服务器说的就是WEB服务器。)

- ServletConfig接口有哪些常用的方法?

 
```java
    
public String getInitParameter(String name); // 通过初始化参数的name获取value
   
public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name  
 
public ServletContext getServletContext(); // 获取ServletContext对象
    
public String getServletName(); // 获取Servlet的name
    
```

  - 以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。

ServletContext

- 一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。

- 只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。

- ServletContext对象在服务器启动阶段创建,在服务器关闭的时候销毁。这就是ServletContext对象的生命周期。ServletContext对象是应用级对象。

- Tomcat服务器中有一个webapps,这个webapps下可以存放webapp,可以存放多个webapp,假设有100个webapp,那么就有100个ServletContext对象。但是,总之,一个应用,一个webapp肯定是只有一个ServletContext对象。

- ServletContext被称为Servlet上下文对象。(Servlet对象的四周环境对象。)

- 一个ServletContext对象通常对应的是一个web.xml文件。

- ServletContext对应显示生活中的什么例子呢?

  - 一个教室里有多个学生,那么每一个学生就是一个Servlet,这些学生都在同一个教室当中,那么我们可以把这个教室叫做ServletContext对象。那么也就是说放在这个ServletContext对象(环境)当中的数据,在同一个教室当中,物品都是共享的。比如:教室中有一个空调,所有的学生都可以操作。可见,空调是共享的。因为空调放在教室当中。教室就是ServletContext对象。

- ServletContext是一个接口,Tomcat服务器对ServletContext接口进行了实现。

  - ServletContext对象的创建也是Tomcat服务器来完成的。启动webapp的时候创建的。

- ServletContext接口中有哪些常用的方法?

 

```java
    
public String getInitParameter(String name); // 通过初始化参数的name获取value
    
public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
    
```

  - ```xml
    <!--以上两个方法是ServletContext对象的方法,这个方法获取的是什么信息?是以下的配置信息-->
    <context-param>
        <param-name>pageSize</param-name>
        <param-value>10</param-value>
    </context-param>
    <context-param>
        <param-name>startIndex</param-name>
        <param-value>0</param-value>
    </context-param>
    <!--注意:以上的配置信息属于应用级的配置信息,一般一个项目中共享的配置信息会放到以上的标签当中。-->
    <!--如果你的配置信息只是想给某一个servlet作为参考,那么你配置到servlet标签当中即可,使用ServletConfig对象来获取。-->
    ```

  - ```java
    // 获取应用的根路径(非常重要),因为在java源代码当中有一些地方可能会需要应用的根路径,这个方法可以动态获取应用的根路径
    // 在java源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。
   

public String getContextPath();
  
String contextPath = application.getContextPath();
    
```

 

public String getContextPath();
    
String contextPath = application.getContextPath();
    
```
```java
// 通过ServletContext对象也是可以记录日志的
public void log(String message);
public void log(String message, Throwable t);
// 这些日志信息记录到哪里了?
// localhost.2021-11-05.log
    
// Tomcat服务器的logs目录下都有哪些日志文件?
//catalina.2021-11-05.log 服务器端的java程序运行的控制台信息。
//localhost.2021-11-05.log ServletContext对象的log方法记录的日志信息存储到这个文件中。
//localhost_access_log.2021-11-05.txt 访问日志
    ```

 

// 存(怎么向ServletContext应用域中存数据)
public void setAttribute(String name, Object value); // map.put(k, v)
// 取(怎么从ServletContext应用域中取数据)
public Object getAttribute(String name); // Object v = map.get(k)
// 删(怎么删除ServletContext应用域中的数据)
public void removeAttribute(String name); // map.remove(k)

- 注意:以后我们编写Servlet类的时候,实际上是不会去直接继承GenericServlet类的,因为我们是B/S结构的系统,这种系统是基于HTTP超文本传输协议的,在Servlet规范当中,提供了一个类叫做HttpServlet,它是专门为HTTP协议准备的一个Servlet类。我们编写的Servlet类要继承HttpServlet。(HttpServlet是HTTP协议专用的。)使用HttpServlet处理HTTP协议更便捷。但是你需要直到它的继承结构:

举报

相关推荐

0 条评论