05-Servletconfig&ServletCOntext

简介: 一、 ServletConfig 对象 作用 : 封装 Servlet 初始化参数 1. 可以在 web.xml 文件中 Servlet 元素下 为Servlet配置初始化参数 <init-param>         <param-name>name</param-name>         <param-value>aaaa

一、 ServletConfig 对象

作用 : 封装 Servlet 初始化参数

1. 可以在 web.xml 文件中 Servlet 元素下 为Servlet配置初始化参数

<init-param>

        <param-name>name</param-name>

        <param-value>aaaa</param-value>

</init-param>

2. web 容器在初始化Servlet时,会将初始化参数封装到一个 ServletConfig 对象中,传给init方法

 

3. 我们在Servlet 中覆写 init方法,就可以获得ServletConfig

 

4. 父类 GenericServlet 中定义了一个成员变量用于记住此对象,并提供了 getServletConfig 方法

我们可以直接调用此方法 获得 config 对象

 

5. 再调用 getInitParameter(name) 方法获得想要配置项

// 指定编码

       // 获得ServletConfig 对象

       ServletConfig config = getServletConfig();

       String encoding = config.getInitParameter("encoding");

      

      

       System.out.println("encoding=" + encoding);

 

二、 ServletContext 对象

1. ServletContext对象代表整个web应用

2. ServletContext对象是一个域对象(可以存储数据的对象)

ServletContext对象的内部维护了一个map集合, key是String类型 value是Object类型

class ServletContext {

    private Map<String, Object> map ;

}

 

3. ServletContext 作为域对象, 多个Servlet 可以共享数据

Servlet6

// 1. 获得ServletContext 对象

ServletContext context = getServletContext();

// 2. 存入域

context.setAttribute(“name”, “zhangsan”);

 

Servlet7

// 获得 context 域, getAttribute

String name = (String) getServletContext().getAttribute("name");

 

4.获取web应用的初始化参数

    getContext().getInitParameter(“name”);

 

5. 统计一个web应用的访问量

   context 域中维护一个count变量

   访问Servlet时,取出变量1

 

6. 实现请求转发

实现请求转发需要用到转发对象 RequestDispatcher

有一个 forward 方法能转发请求

 

7. 如何读取工程中的文件

7.1.  读取web工程下的资源文件

       // 获得绝对路径

      String realPath = ServletContext.getRealPath(相对web应用的路径);

    注意URL url =  ServletContext.getResource();  web的url

       // 获得与文件关联的流

       InputStream in=

 ServletContext.getResourceAsStream(“WEB-INF/classes/config.properties”;

 

7.2   读取java工程下的文件

   // 不能相对虚拟机目录不能用绝对路径

   // 只能类加载的方式读

    // 获得 流

    ClassLoader classLoader = Demo.class.getClassLoader(); 

      

    InputStream in = classLoader.getResourceAsStream("a.txt");

 

    // 获得绝对路径

    URL url = Demo.class.getClassLoader().getResource("a.txt");

 

    String path = url.getPath();

 

类加载方式缺点

1不能读取类路径以外文件

2)  由于需要加载到内存,不能读大文件

 

web工程中如果用类加载的方式读

类加载实际上读取的是内存中加载的文件,此时将读不到硬盘上资源文件的修改

解决办法Demo.class.getClassLoader().getResource("a.txt").getPath()

通过绝对路径去读硬盘上的文件  避开内存的文件

三、 Servlet缓存

    HttpServlet Service方法中的代码

       // 调用方法

long lastModified = getLastModified(req);

       // 如果为 -1 ,就直接放行,给最新的

            if (lastModified == -1) {

                doGet(req, resp);

}

// 方法返回不是-1
 else {

    // 读取IE发送的头If-Modified-Since

                long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);

              // 拿着客户端的时间头和方法的返回值比较

                if (ifModifiedSince < (lastModified / 1000 * 1000)) {

                    // If the servlet mod time is later, call doGet()

                    // Round down to the nearest second for a proper compare

                    // A ifModifiedSince of -1 will always be less

                  // 方法的返回值大于ie发送过来的时间头

                  // 重新向浏览器发送了一个时间头

                    maybeSetLastModified(resp, lastModified);

                  // 放行, 发送页面

                    doGet(req, resp);

                } else {

                  // 方法的返回值没有大于ie发送过来的时间头

                  // 发送 304 状态码,让用户去读缓存

                    resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);

                }

            }

 

 

目录
相关文章
|
存储 应用服务中间件 数据库
【JavaWeb】知识总结Ⅸ(ServletConfig, ServletContext)
ServletConfig 类是为 Servlet 程序的配置信息的类 2. Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建 3. Servlet 程序默认是第 1 次访问的时候创建, ServletConfig 在 Servlet 程序创建时,就创 建一个对应的 ServletConfig ServletConfig 类能干什么 1. 获取 Servlet 程序的 servlet-name 的值 2. 获取初始化参数 init-param 3. 获取 ServletContext 对象
ServletContext和ServletConfig使用说明
ServletContext和ServletConfig使用说明
49 0
|
1月前
ServletContext
ServletContext Servlet三大域对象: l ServletContext:范围最大,应用范围! l HttpSession :会话范围! l HttpServletRequest:请求范围!
|
存储 对象存储
07JavaWeb基础 - ServletContext对象
07JavaWeb基础 - ServletContext对象
48 0
|
存储 应用服务中间件 测试技术
Servlet中的ServletConfig对象、ServletContext对象以及Servlet3.0
Servlet中的ServletConfig对象、ServletContext对象以及Servlet3.0
77 1
|
应用服务中间件
初识ServletConfig
初识ServletConfig
85 0
|
应用服务中间件 容器
一文带你了解ServletContext
ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放 架构图示: 我们可以把ServletContext当成一个公用的空间,可以被所有的客户访问,WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享,公共聊天室就会用到它 同时,多个Servlet也可以通过ServletContext来进行通信操作 当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁🙌
118 10
一文带你了解ServletContext
|
应用服务中间件 容器
ServletConfig、ServletContext概述、配置及ServletContext的三个作用
ServletConfig、ServletContext概述、配置及ServletContext的三个作用
176 0
|
XML Java 应用服务中间件
谈谈 ServletConfig 和 ServletContext
我们都知道Servlet是框架的灵魂,学习web框架最底层离不开Servlet的支持,那么Servlet 是什么呢?如何创建一个Servlet 不是本文的重点,相关文章可以参考
98 0