今天我们学习的是ServletContext的应用。

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

1.多个Servlet通过ServletContext对象实现数据共享。

在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//存入共享的数据

context.setAttribute("name", "haha");

在其它的Servlet中利用ServletContext对象获取共享的数据

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//获取共享的数据

String name = context.getAttribute("name");

System.out.println("共享的内容值是:"+name);

2.获取WEB应用的初始化参数。

在web.xml文件中配置需要初始化的参数信息。

<web-app>

<context-param>

<param-name>url</param-name>

<param-value>jdbc:mysql://localhost:3306/4g</param-value>

</context-param>

<context-param>

<param-name>password</param-name>

<param-value>1314qr</param-value>

</context-param>

<context-param>

<param-name>user</param-name>

<param-value>root</param-value>

</context-param>

</web-app>

在DemoServlet的doPost方法中测试获取初始化参数的步骤如下:

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

/*获取初始化参数*/

//获取指定名称的初始化参数

String url = context.getInitParameter("url");

//获取web.xml文件中所有的初始化应用参数

Enumeration<String> enumer = context.getInitParameterNames();

while(enumer.hasMoreElements()){

String name = enumer.nextElement();

String value = context.getInitParameter(name);

System.out.println(name+"=========="+value);

}

2.实现Servlet的转发:

在测试的Servlet中实现转发的步骤如下:

/*要利用ServletContext对象实现转发获取对象*/

ServletContext context = this.getServletContext();

//在request对象中存入name属性

request.setAttribute("name", "haha");

/*根据转发的地址获取 RequestDispatcher对象*/

RequestDispatcher  rd  = context.getRequestDispatcher("/index.jsp");

//调用转发方法 以下采用任意方法即可

rd.forward(request, response);

//rd.include(request, response);

注意:forward与include的区别

forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来.

(forward方法调用后在响应中的没有提交的内容被自动消除。将请求转发给其他的Servlet后,由

被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。

include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息)

3.利用ServletContext对象读取资源文件。

读取资源文件(properties文件(属性文件))的三种方式

配置的properties的内容如下:

url=jdbc\:mysql\://localhost\:3306/3g ;

user=root;

password=root;

获取实现的代码如下:

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//第一种方式

URL url = context.getResource("WEB-INF/classes/db.properties");

InputStream is =  url.openStream();

//第二种方式

/*读取db.properties文件*/

String path =context.getRealPath("WEB-INF/classes/db.properties");

/*根据文件的路径 构建文件对象*/

File file = new File(path);

/*根据file文件对象 创建输入流*/

InputStream is = new FileInputStream(file);

//第三种方式

InputStream is = context.getResourceAsStream("WEB-INF/classes/db.properties ");

以三种方式任意一种可以:

/*解析properties的文件*/

Properties prop = new Properties();

//从输入流中读取属性列表(键和元素对)。

prop.load(is);

Set<String> set = prop.stringPropertyNames();

//遍历set集合

Iterator<String> it = set.iterator();

while(it.hasNext()){

String key = it.next();

String value = prop.getProperty(key);

System.out.println(key+"-----"+value);

}

ServletContext总结(转)的更多相关文章

  1. JavaWeb——ServletContext

    一.基本概念 说起ServletContext,一些人会产生误解,以为一个servlet对应一个ServletContext.其实不是这样的,事实是一个web应用对应一个ServletContext, ...

  2. The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 这是由于项目里面的一些 ...

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

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

  4. 如何获得Webapp的根项目路径 即ServletContext.getRealPath() 的输入参数要以"/"开头

    ServletContext.getRealPath() 的输入参数要以"/"开头 2014-03-26 15:54 5738人阅读 评论(1) 收藏 举报 版权声明:本文为博主原 ...

  5. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  6. Servlet 之 ServletContext

    package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException; import java.io.PrintWrite ...

  7. Tomcat启动后,从spring容器中获取Bean和ServletContext

    public static Object getBean(String beanName){ ApplicationContext context = ContextLoader.getCurrent ...

  8. The method getJspApplicationContext(ServletContext) is undefined for the type

    type Exception report message Unable to compile class for JSP: description The server encountered an ...

  9. 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 ...

  10. Spring以及SPringmvc相关问题: ServletContext -父子容器

    总结如下: 明确了Servlet规范中ServletContext的作用和意义.此外明确一个Tomcat中多个web应用,每个人web应用有唯一的一个ServletContext(全局上下文).[例子 ...

随机推荐

  1. Dynamics CRM 365中结合注释和WebApi实现图片上传

    首先需要在实体上使用注释,然后在窗体上引用WebResource. WebResource的代码: <!DOCTYPE html> <html> <head> &l ...

  2. C# WPF Bing地图展示

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 内容目录 实现效果 业务场景 编码实现 本文参考 源码下载 1.实现效果 Bi ...

  3. 重启监听卡在connecting to的问题

    问题描述:lsnrctl start启动监听起不来,一直卡在connecting to半天 1.[oracle@orcl ~]$ lsnrctl start 一直卡半天,就是连不上,按照以前的解决办法 ...

  4. jenkins自动化部署(tomcat+git)

    一.安装jenkins 1.安装jdk 查看可安装版本:yum search openjdk 安装:yum install -y java-1.8.0-openjdk java-1.8.0-openj ...

  5. HDU6683

    题意 英文 做法 考虑公比为\(\frac{a}{b}\),满足\(a>b,(a,b)=1\) 枚举长度\(k\),设序列头为\(p\),尾为\(q\),有\(p\times \frac{a^{ ...

  6. Ubuntu18.04安装mysql(AWS云)

    1.执行如下三条命令 sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysql ...

  7. WPF-命令-基础知识

    命令模型的主要元素: 1.命令 2.命令绑定:命令连接到相关的应用程序逻辑 3.命令源:命令源触发命令, 4.命令目标:应用程序逻辑. -------------------------------- ...

  8. C#的结构和数组

    下面我们继续学习C#的语法.结构struct,C#中的结构和我们PLC中建立的UDT(结构体)是一样的.里面存储了相关的不同类型的数据. 有一句话我觉得十分重要:方法是依存于结构和对象存在的.这以后我 ...

  9. jQuery---手风琴案例

    手风琴案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  10. Real-time Compressive Tracking

    这是RTC算法的文献blog Real-time Compressive Tracking Kaihua Zhang1, Lei Zhang1, Ming-Hsuan Yang2 1Dept. of ...