05-Servletconfig&ServletCOntext

一、 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);

                }

            }

 

 

时间: 2024-12-27 12:28:02

05-Servletconfig&amp;ServletCOntext的相关文章

ServletConfig与ServletContext

1.ServletConfig 作用: 当servlet执行初始化函数init()之后,可以利用ServletConfig获取存储在web.xml里的参数,这样就可以不用在servlet中硬编码一些参数,例如作者姓名,当在servlet中使用作者姓名这个参数的时候直接调用web.xml,如果需要修改参数值,只需修改web.xml,不用重新编译servlet. 用法: 在web.xml中 <servlet> <servlet-name>login</servlet-name&g

ServletContext 与application的异同

servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图.ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承Servlet的关系GenericServlet类和HttpServlet类同时具有该方法. 条件:假设说我们有一个WEB应用,这个WEB应用中有10个SERVLET  在这里,这个WEB应用就拥有一个它自己的仓库-ServletContext,而这10个Servlet则共享

Java Servlet API说明文档(2.1a版)(二)

servlet API对象的说明\r 这一部分包含了对Java Servlet API的全部类和接口的详细说明.这个说明与Javadoc API差不多,但是这份文档提供了更多的信息.API包含了两个软件包,十二个接口和九个类.软件包:javax.servlet 所包含的接口:RequestDispatcher:Servlet:ServletConfig:ServletContext:ServletRequest:ServletResponse:SingleThreadModel.所包含的类:Ge

JSP与Servlet

js|servlet JSP与Servlet 这篇文章的主要目的不是单纯的介绍JSP,也不是详细的介绍Servlet.这是一篇讲述JSP和Servlet之间关系的基础性文章.这篇文章主要是针对那些学习JSP的人而写的.至于Servlet和JavaBean以及Servlet和XML我的两个同学在他们的文档中将会给出明确的解释.本文的主要结构:1. Servlet是什么?2. JSP与Servlet.3. Servlet 概述4. 附录一5. 附录二在讲述的过程中,主要是针对JSP和Servlet关

架构师之路-在Dubbo中开发REST风格的远程调用

概述 dubbo支持多种远程调用方式,例如dubbo RPC(二进制序列化 + tcp协议).http invoker(二进制序列化 + http协议,至少在开源版本没发现对文本序列化的支持).hessian(二进制序列化 + http协议).WebServices (文本序列化 + http协议)等等,但缺乏对当今特别流行的REST风格远程调用(文本序列化 + http协议)的支持. 有鉴于此,我们基于标准的Java REST API--JAX-RS 2.0(Java API for REST

[Servlet&amp;amp;JSP] 从JSP到Servlet

JSP与Servlet是一体的两面,JSP最后都会被容器转译为Servlet源代码,自动编译为.class文件,载入.class文件然后生成Servlet对象. 由容器转译后的Servlet类具有_jspInit()._jspDestroy()._jspService()等方法,名称中有下划线前缀,表示这些方法都是容器转译时维护的,我们不应该从写这些方法.如果想要做些JSP初始化或收尾的工作,则应定义jspInit()或jspDestryoy()方法. 指示元素 JSP指示(Directive)

[Servlet&amp;JSP] 从JSP到Servlet

JSP与Servlet是一体的两面,JSP最后都会被容器转译为Servlet源代码,自动编译为.class文件,载入.class文件然后生成Servlet对象. 由容器转译后的Servlet类具有_jspInit()._jspDestroy()._jspService()等方法,名称中有下划线前缀,表示这些方法都是容器转译时维护的,我们不应该从写这些方法.如果想要做些JSP初始化或收尾的工作,则应定义jspInit()或jspDestryoy()方法. 指示元素 JSP指示(Directive)

Servlet 工作原理解析

从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力.虽然它们是彼此依存的,但是又相互独立发展,这一切都是为了适应工业化生产的结果.从技术角度来说是为了解耦,通过标准化接口来相互协作.既然接口是连接 Servlet 与 Servlet 容器的关键,那我们就从它们的接口说起. 前面说了 Servlet 容器作为一个独立发展的标准化产品,目前它的种类很多

Servlet基础理论

Servlet 1.ServletConfig l  一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的.   ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)   l  ServletContext接口封装了Web应用程序的上下文概念.   2.会话跟踪 1) Session l  当一个Cli

JSP基本语句用法总结_JSP编程

本文实例讲述了JSP基本语句用法.分享给大家供大家参考.具体如下: 1>JSP指令 JSP指令(Directive)作用是与JSP引擎进行沟通,为JSP页面设置全局变量,声 明类以及JSP要实现的方法和输出内容的类型等 JSP指令在整个页面范围内有效,且不在客户端产生任何输出 格式:<%@ directivename attribute="value"%> <%@ directivename attribute1="value1"......