Servlet----------ServletContext (重要)
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、 域对象的功能
void setAttribute(String name,Object object) 用来储存一个对象,也可以说用来储存一个属性,例如,servletContext.setAttribute("xxx",XXX); 在ServletContext就保存了一个域属性,域属性名为xxx,域属性值为XXX。与Map相同。
ObjectgetAttribute(String name) 通过一个域属性名取得域属性值,如String value=(String)servletContext.getAttribute("xxx");
EnumerationgetAttributeNames() 取得所有域属性名,是所有,不是一个
- 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、可以使用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 (重要)的更多相关文章
- 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
- 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 ...
- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...
- tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
- SpringBoot报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String ...
- Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
运行tomat 报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...
- 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 ...
- Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext 场景描述 项目中用到spring boo ...
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...
- eclipse导入web项目报错 Cannot find the class file for javax.servlet.ServletContext.
当eclipse中新导入的Java Project的时候,往往会碰到各种各样的问题,下面是个典型的问题: Cannot find the class file for javax.servlet.Se ...
随机推荐
- 使用 requests 发送 GET 请求
基本用法: import requests req = requests.get("http://www.baidu.com/") //发起GET请求 print(req.text ...
- 如何在 Ubuntu 中安装 Node.js
在终端中执行以下命令: sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ...
- 嵌入式ROOTFS transplantation
作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目 ...
- NUC972裸机调试步骤
.将开发板设置成USB启动.开发板拨码开关与启动方式设置对应如下: 其中PA1 ,PA0对应S1和S0 上电或复位,使开发板从USB启动.开启NuWriter,选择正确的芯片型号,按下“Continu ...
- jQuery的parseHTML方法
// data html字符串 // context 如果指定了context,则碎片将在此范围内被创建,默认是document // keepScripts 如果是true,则将有scr ...
- linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...
- 跟bWAPP学WEB安全(PHP代码)--OS命令注入
背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...
- URI Scheme注册伪协议实现远程命令执行
Windows配置注册表注册伪协议 1.新建伪协议项 WIN+R 输入regedit 打开注册表,在注册表HKEY_CLASSES_ROOT键中新建一个项,项的名字就是你伪协议的名字,例如我注册一个c ...
- 3-2 axios基础介绍
1.静态引用 <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 2.npm ...
- 安装sqlite3.8的方法
wget http://www.sqlite.org/2015/sqlite-autoconf-3081101.tar.gz tar -xvzf sqlite-autoconf-3081101.tar ...