• 什么是ServletContext? 

WEB容器在启动时,它会为每一个WEB应用程序都创建一个相应的ServletContext对象。它代表当前web应用。通过使用这个对象,servlet能够记录事件,得到资源并得到来自servlet的引擎类。

能够把ServletContext看成是一个Web应用的server端组件的共享内存。在ServletContext中能够存放共享数据。

另外。ServletContext对象仅仅在web应用被关闭的时候才被销毁。不同的web应用。ServletContext各自独立存在。

最后总结来说:ServletContext即servlet容器,其内提供的方法能够在同一web应用下的全部servlet中被使用,它就是一个全局变量。

  • 怎样获取ServletContext?

容器初始化一个servlet时。会为这个servlet建一个唯一的ServletConfig。容器从DD(web.xml)中读出Servlet初始化參数,并把这些參数交给ServletConfig,然后把ServletConfig传递给servlet的init(ServletConfig
config)方法。也就是说容器仅仅有在创建servlet实例时才会读DD文件里的init-param,而且在servlet一生仅仅读一次。ServletConfig对象中维护了ServletContext对象的引用,开发者在编写servlet时,能够通过ServletConfig.getServletContext方法获得ServletContext对象。

  • 怎样利用ServletContext实现数据共享?

(1)通过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.xml初始化參数

<web-app>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/4g</param-value>
</context-param>
</web-app>

在Servlet的doPost方法中測试获取初始化參数的过程例如以下:

/*获取ServletContext对象*/
ServletContext context = this.getServletContext(); /*获取指定名称的初始化參数*/
String url = context.getInitParameter("url");

  • 怎样利用ServletContext实现转发?

这里面就涉及到转发方法的选择,那么到底forward和include有何差别呢?能够说。forward方法是把请求的内容转发到另外的一个servlet。而include是把还有一个servlet处理过后的内容拿过来。以下通过一个很easy易懂的样例来说明吧。

举例来说比方在servlet1打一句out.print("我是Servlet1"),servlet2打上out.print("我是Servlet2")。

(1)使用forward方法:在servlet1中用forward命令会转到servlet2中,结果会是“我是Servlet2”;

(2)使用include方法:而在servlet1中使用include方法会依旧在servlet1的页面中,可是在输出“我是Servlet1”后继续输出“我是Servlet2”。

/*要利用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);

关于ServletContext先说这么多,你了解它了吗?

Java之旅(二)--- ServletContext的更多相关文章

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习

    JAVA之旅(二十九)--文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习 我们继续学习File 一.文件递归 我们可以来实现 ...

  3. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  4. JAVA之旅(二十七)——字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律

    JAVA之旅(二十七)--字节流的缓冲区,拷贝mp3,自定义字节流缓冲区,读取键盘录入,转换流InputStreamReader,写入转换流,流操作的规律 我们继续来聊聊I/O 一.字节流的缓冲区 这 ...

  5. JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片

    JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...

  6. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  7. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

  8. JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算

    JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习 ...

  9. JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

    JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...

  10. JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符

    JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...

随机推荐

  1. 利用VisualVM监视远程JVM

    VisualVM介绍 VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump.Thread Dump.内存对象实例情况.GC ...

  2. ASP.NET-前台view返回model集合

    有时操作列表的时候想一次提交一个model集合,这样后台controller直接接受后就可以直接进行操作了,不用使用js,比较方便,也体现了MVC的Binding模式的优势,方法如下: 准备: 1.两 ...

  3. BZOJ——1602: [Usaco2008 Oct]牧场行走 || 洛谷—— P2912 [USACO08OCT]牧场散步Pasture Walking

    http://www.lydsy.com/JudgeOnline/problem.php?id=1602 || https://www.luogu.org/problem/show?pid=2912 ...

  4. USACO 5.1.1凸包

    转自:http://blog.csdn.net/cnyali/article/details/50097593 程序: #include <iostream> #include <a ...

  5. Light OJ 1317 Throwing Balls into the Baskets 概率DP

    n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值 依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[ ...

  6. ubuntu16.04环境下安装配置openface人脸识别程序

    参考http://blog.csdn.net/weixinhum/article/details/77046873 最近项目需要用到人脸训练和检测的东西,选用了OpenFace进行,因而有此文. 本人 ...

  7. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  8. 92.bower 需要git

    转自:https://blog.csdn.net/chenleismr/article/details/50458496Bower 是基于 Git 之上的包管理工具,它提供的包其源头都是一个 Git ...

  9. Linux java9 jshell操作

    1.上传 2.解压 配不配环境变量都行 进入到jdk-9.0.4的bin目录下 执行./jshell命令 我第一次出现如下的情况 等了一会没反应就ctrl+z了.然后又重新执行./shell命令 超时 ...

  10. 简易的CSS下拉菜单 - 1

    <!DOCTYPE html> <html> <head> <style> body{ margin:0; } .dropmenu{ backgroun ...