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 ...
随机推荐
- drawCall_01
在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES).每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销. Unity在运 ...
- 判断资源贴图是否有alpha
/* modfly selected textures`s maxSize and ImportFormat bool hasAlpha = true; if(hasAlpha)then(textur ...
- React Native(六)——PureComponent VS Component
先看两段代码: export class ywg extends PureComponent { …… render() { return ( …… ); } } export class ywg e ...
- hadoop集群操作常用命令
一.HDFS相关 1.启动NameNode sbin/hadoop-daemon.sh start namenode 2.启动DataNode sbin/hadoop-<span style=& ...
- var_dump出现省略号的问题
xdebug.var_display_max_children=128xdebug.var_display_max_data=512xdebug.var_display_max_depth=5
- 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题
之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...
- chrome插件开发,易懂
- Android adb录制视频和截屏的dos脚本
以下是本人写的脚本,用于录制android手机视频.截屏 dos脚本文件名:screenrecord.bat @ECHO OFF CLS color 0a set SCREEN_RECORD_SAVE ...
- Mac下一款门罗币挖矿木马的简要分析
背景 最近在应急中发现了一款Mac上的挖矿木马,目标是挖门罗币,经过走访,受害用户都有从苹果电脑上安装第三方dmg的经历(其中可以确定一款LOL Mac私服安装app会导致该木马),怀疑在网上很多第三 ...
- no such file to load -- bundler/setup
bundle install rake routesrake aborted!no such file to load -- bundler/setup 解决 gem install bundler