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. 顶点纹理shader

    Shader "Custom/VertDisplace" { Properties { _MainTex ("Base (RGB)", 2D) = " ...

  2. 深入理解Auto Layout 第一弹

    本文转载至 http://zhangbuhuai.com/2015/07/16/beginning-auto-layout-part-1/ By 张不坏 2015-07-16 更新日期:2015-07 ...

  3. codeforces水题100道 第六题 Yandex.Algorithm 2011 Qualification 2 A. Double Cola (math)

    题目链接:www.codeforces.com/problemset/problem/82/A题意:五个人排队喝可乐,一个人喝完一杯,就在可乐的最后面放两杯自己喝的可乐,问第n个喝的人是谁.C++代码 ...

  4. codeforces水题100道 第五题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas (math)

    题目链接:http://www.codeforces.com/problemset/problem/546/A题意:一个人现在有n元,它买第i根香蕉需要i*k元,问他要买w根香蕉的话,需要问他的朋友借 ...

  5. linux 文件编码问题

    iconv -f UTF- -t gb18030 file_input -o file_output 上述命令不一定有用. 大概了解下文件编码,和vim里面的编码情况. 1 字符编码基础知识 字符编码 ...

  6. css笔记 - 张鑫旭css课程笔记之 line-height 篇

    一.line-height line-height: 指两行文字基线之间的距离. 行高200px表示两行文字基线之间的距离是200px: 二.基线:baseline 字母x下边缘的位置 基线是任意线定 ...

  7. 怎么使用jstack精确找到异常代码

    1.代码demo //一个CPU密集型线程的demo: package chapter1; public class FindJavaThreadInTaskManager { public stat ...

  8. ubuntu 加扩展网卡遇到网卡无法识别

    原创文章,如转载请注明出处 ============================ 今天在安装扩展网卡的时候出现了问题,ubuntu和Centos的网络配置是不一样的. ubuntu的配置:     ...

  9. mysql索引覆盖之innodb和myisam效率问题

    问题: create table A (    id varchar(64) primary key,    ver int,    ... ) 我的表有几个很长的字段varchar(3000) 在i ...

  10. Packetbeat协议扩展开发教程(1)

    Packetbeat ( https://www.elastic.co/products/beats/packetbeat )是一个开源的网络抓包与分析框架,内置了很多常见的协议解析,如HTPP.My ...