1、ServletContext的概述

  • 一个项目只有一个ServletContext对象!application
  • 我们可以在N多个Servlet中获取这个唯一的对象,使用它来给多个Servlet传递数据!
  • 这个对象在Toncat启动时就创建,在Toncat关闭时才死去!

2、获取ServletContext对象

  • ServletConfig ### getSetvletContext()
  • GenericServlet ## getServletContext()
  • HttpServlet ## getServletContext()
  • ServletContextEvent ## getServletContext()
 public abstract class MyServlet implements Servlet {

     public void init(ServletConfig config) {
ServletContext context = config.getServletContext();
} }
 public class MyServlet02 extends HttpServlet{

     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext context = this.getServletContext();
} }

3、 域对象的功能

  1. void setAttribute(String name,Object object)  用来储存一个对象,也可以说用来储存一个属性,例如,servletContext.setAttribute("xxx",XXX); 在ServletContext就保存了一个域属性,域属性名为xxx,域属性值为XXX。与Map相同。
  2. ObjectgetAttribute(String name)  通过一个域属性名取得域属性值,如String value=(String)servletContext.getAttribute("xxx");
  3. EnumerationgetAttributeNames()   取得所有域属性名,是所有,不是一个
  4. void removeAttribute(String name)    用来移除指定name的域属性值,如果域属性值name不存在 ,则该方法什么也不做

下面举个例子来说明第一第二种功能

 public class AServlet extends HttpServlet {

     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext application = this.getServletContext();
application.setAttribute("name", "123");
}
}
public class BServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { ServletContext application=this.getServletContext();
String value=(String) application.getAttribute("name");
System.out.println("通过域属性名取得域属性值 :"+value);
}
}

启动服务器后,执行AServlet,再执行BServlet 后可以看到如下结果

4、 获取应用初始化参数

  • Servlet 也可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的初始化参数,即初始化参数只为一个Servlet准备
  • 也可以配置公共的初始化参数,为所有的Srevlet 而用,这需要使用ServletContext才能使用!

如配置公共的初始化参数,首先要先配置web.xml文件

再来新建一个CServlet.java

package org.lxh.serletdemo;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; public class CServlet extends HttpServlet { public void init() throws ServletException {
ServletContext application =this.getServletContext();
String value=(String)application.getInitParameter("context-param");
System.out.println(value);
}
}

启动服务器后,再执行CServlet可以看到如下结果

5、 获取相关资源方法

  1. 获取真实路径(******)
  2. 获取资源流
  3. 获取指定目录下的所有资源路径

1、可以使用ServletContext 对象来获取Web应用下的资源,例如在web目录下有个input.html文件,现在想在servlet中获取这个资源,就可以通过ServletContext来获取

 package org.lxh.serletdemo;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application=this.getServletContext(); //获取ServletContext对象
String realPath=application.getRealPath("input.html"); //通过getRealPath得到真实路径
System.out.println(realPath); //打印路径
}
}

2. 获取资源流

 package org.lxh.serletdemo;

 import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Set; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application=this.getServletContext();
InputStream input =application.getResourceAsStream("input/jsp");//获取资源路径后,再创建出输入流对象 }
}

3. 获取指定目录下的所有资源路径,如输出WEB-INF下 的所有路径

 package org.lxh.serletdemo;

 import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Set; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application=this.getServletContext(); //获取ServletContext对象
Set<String > paths=application.getResourcePaths("/WEB-INF");
System.out.println(paths);
}
}

Servlet----------ServletContext (重要)的更多相关文章

  1. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  2. tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()

    JDK版本:jdk1.8.0_77 Tomcat 版本:apache-tomcat-7.0.47 异常重现步骤: 1.完成项目部署 2.启动Tomcat 异常头部信息:java.lang.NoSuch ...

  3. java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...

  4. tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  5. SpringBoot报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

    错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String ...

  6. Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    运行tomat  报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...

  7. Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

    Spring boot Unable to start embedded Tomcat 报错 java.lang.NoSuchMethodError: javax.servlet.ServletCon ...

  8. Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext   场景描述 项目中用到spring boo ...

  9. java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

    问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...

  10. eclipse导入web项目报错 Cannot find the class file for javax.servlet.ServletContext.

    当eclipse中新导入的Java Project的时候,往往会碰到各种各样的问题,下面是个典型的问题: Cannot find the class file for javax.servlet.Se ...

随机推荐

  1. U3D之Editor扩展学习

    Unity3D提供了强大的编辑器扩展机制,在项目开发中,如果可以将一些繁琐的工作放在编辑器扩展中进行,则会大大提高效率.本文对编辑器扩展进行了一些总结,希望对有兴趣编写编辑器扩展的开发人员有所帮助.当 ...

  2. 关于PullToRefreshView bug 的修复

    前几天网友yufengzungzhe@163.com指出PullToRefreshView的一个bug.当时麦洛还没有注意到,现在麦洛已经利用修复了.其实解这个bug也不难. 只要在下面这个方法做一点 ...

  3. 嵌入式ROOTFS transplantation

    作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目 ...

  4. 使用IDEA实现tomcat的热加载

    1.打开tomcat的edit configuration,一定要选择war exploded  2.选择update classes and resources  3.配置基本就是这样,后面选择de ...

  5. codeforces水题100道 第十五题 Codeforces Round #262 (Div. 2) A. Vasya and Socks (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/460/A题意:Vasya每天用掉一双袜子,她妈妈每m天给他送一双袜子,Vasya一开始有n双袜子, ...

  6. Lua中的控制结构

    Lua提供了一组传统的.小巧的控制结构,包括用于条件执行的if,用于迭代的while.repeat和for.所有的控制结构都有意个显式的终止符:if.for和while以end作为结尾,repeat以 ...

  7. delphi for android 获取手机号

    delphi for android 获取手机号 uses   System.SysUtils, System.Types, System.UITypes, System.Classes, Syste ...

  8. EGL 1.0 学习笔记

    http://hi.baidu.com/leo_xxx/item/b01b1fc29abff355ac00ef5c 基本概念 EGL是OpenGL ES与本地Window系统之间的桥梁.EGL创建渲染 ...

  9. 异构GoldenGate 12c 单向复制配置(支持DDL复制)

    1.开始配置OGG支持DDL复制(在source端操作) 1.1 赋予权限 SQL> conn /as sysdba 已连接. SQL> grant execute on utl_file ...

  10. Clojure学习之defmulti

    1. defmulti 宏defmulti 和defmethod 经常被用在一起来定义 multimethod. 宏defmulti 的参数包括一个方法名以及一个dispatch函数,这个dispat ...