JavaWeb之Servlet: ServletConfig 与 ServletContext
ServletConfig对象
什么是ServletConfig对象
ServletConfig对象,叫Servlet配置对象。主要用于加载配置文件的初始化参数。
创建时机
ServletConfig对象在servlet对象创建之后,调用init方法之前创建,该Config对象随着init方法传入到servlet中。
常用方法
java.lang.String getInitParameter(java.lang.String name) 根据名称获取参数值
java.util.Enumeration getInitParameterNames() 得到所有参数
ServletContext getServletContext() 获取servlet上下文对象
ava.lang.String getServletName() 得到servlet名称
问题:SevletConfig中的初始化参数不能被其他Servlet共享!!
下面来演示一下这些方法的使用:
我们先在servlet的配置文件web.xml配置servlet的初始化参数,然后运用上面的方法得到这些数据!
配置文件:
<servlet>
<servlet-name>testpath</servlet-name>
<servlet-class>com.vmaxtam.dotest.testpath</servlet-class>
<init-param> --这个标签写在要设置的servlet内
<param-name>color</param-name> -属性名
<param-value>red</param-value> -属性值
</init-param>
</servlet>
下面我们就在相应的servlet内得到配置好的数据吧!
ServletConfig servletConfig = getServletConfig();
String color = servletConfig.getInitParameter("color");
这样就能得到配置好的数据了!还有更简单的方法:
先说明一下:首先HttpServlet继承自GenericServlet类,而GenericServlet类又继承自Servlet接口,Servlet接口有方法getServletConfig() ,所以HttpServlet肯定有方法getServletConfig()。而GenericServlet类又实现了ServletConfig 接口,也就是他肯定实现了ServletConfig接口中的所有方法,所以以上代码我们还可以这样写:
String color = getInitParameter("color");
其它方法也差不多,这里不做示范~~~
ServletContext对象
什么是ServletContext对象
我们知道一个Web应用里面可以有多个servlet,如果现在有一份数据需要传给所有的servlet使用,那么我们就可以使用ServletContext对象了。
ServletContext对象叫servlet上下文对象。该对象在一个web应用中只会创建一个对象,代表当前web应用的环境。在当前的web应用中所有servlet都共享一个ServletContext对象。
ServletContext对象创建的时机
由ServletContext对象的特性我们可以推断出它被创建的时机:每当一个web应用被加载,那么一个ServletContext对象就被创建了,然后web应用里的servlet就可以同使用它了!
那么,我们如何在servlet里得到这个已经创建的对象呢?
得到ServletContext对象
开发者十分巧妙的将ServletContext对象放入在了该web应用里的每一个servlet中的ServletConfig对象里!
在一个servlet被创建时,会调用它的构造方法,随后就会调用init()方法对它初始化,而在初始化的过程中,就把ServletContext对象放入到ServletConfig对象中了!那么这个servlet得到ServletContext对象对象就十分方便了,只需要用一句代码!
ServletContext servletContext = this.getServletContext();
ServletContext对象的常用方法
得到了ServletContext对象,我们就要想:这个对象有什么用呢!?以下介绍一下它的常用的方法。
主要有五种用法:
一)得到web应用的上下文路径:
java.lang.String getContextPath()
二)获取web应用的全局参数 :
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
三)域对象相关的方法:
java.lang.Object getAttribute(java.lang.String name)
void setAttribute(java.lang.String name, java.lang.Object object)
void removeAttribute(java.lang.String name)
四)用于转发:
RequestDispatcher getRequestDispatcher(java.lang.String path)
五)web应用加载资源文件方法:
java.lang.String getRealPath(java.lang.String path)
java.io.InputStream getResourceAsStream(java.lang.String path)
下面示范一下使用这些方法:
一)得到web应用的上下文路径
通过request来调用该方法
String path = request.getContextPath();
System.out.println(path);
输出结果:
/TestArea
web应用的路径 是 tomcat服务器中web应用的名称,而不是ecplise中的项目名称。
request.getContextPath(); 为了方便获取上下文路径。推荐使用该方法。
二)获取web应用的全局参数
先在web应用对应的web.xml中设置全局参数: 全局参数的标签写咋<web-app>标签内
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- 全局参数 -->
<context-param>
<param-name>AAA</param-name>
<param-value>AAA's value</param-value>
</context-param>
<context-param>
<param-name>BBB</param-name>
<param-value>BBB's value</param-value>
</context-param>
然后在servlet内得到这个参数:
//1.得到ServletContext对象
ServletContext context = this.getServletContext(); //2.获取全局参数
System.out.println(context.getInitParameter("AAA")); Enumeration<String> enums = context.getInitParameterNames();
while(enums.hasMoreElements()){
String paramName = enums.nextElement();
String paramValue = context.getInitParameter(paramName);
System.out.println(paramName+"="+paramValue);
}
注意: 所有的servlet都可以获取全局参数!!!
三)域对象相关的方法
什么是域对象?
域对象:保存数据 和 获取数据,用于在不同资源之间共享数据。
那么我们现在尝试把第一个servlet的数据传到 另一个servlet里吧!
方法一:利用跳转,从servlet1跳转到servlet2时,把数据写在跳转uri里
response.sendRedirect("/servlet2?id=867");
方法二:利用域对象方法
setAttribute(name,Object): 保存数据方法.name名称,object数据
getAttribute(name) 获取数据。name是保存数据时的名称
removeAtrribute(name): 清除数据。
servlet1写上:
ServletContext context = this.getServletContext();
context.setAttribute("id", 123);
然后servlet2获得它吧!
ServletContext context = this.getServletContext();
String id = context.getAttribute("id");
四)用于转发
RequestDispatcher getRequestDispatcher(java.lang.String path)
在servlet中跳转资源:重定向 / 转发
重定向:
1)地址栏会发送改变,变成重定向到的地址
2)重定向可以跳转到web应该内,其他web应用,甚至站外的应用。
3)调用者和被调用者处于两次不同的请求。不能通过request域对象来共享数据。
转发:
1)地址栏不会发送改变。
2)转发不能转发到应用外的资源,不能转发到站外资源;只能转发到当前web应用下的资源。
3)调用者和被调用者处于同一次请求,可以通过request域对象共享数据。
资源:
1)内部资源:web应用内的资源
2)应用外的资源: 其他web应用下的资源
3)其他站点的资源
web应用加载资源文件方法
先了解一下web应用运行时的目录:
相对路径是指java命令的运行目录。
java项目:ecplise工具把java命令运行的目录设置到web应用的根目录。
web项目: java命令运行的目录在tomcat/bin目录下。
有时候我们需要web应用加载一些图片,音乐,视频等,就需要获得他们的路径然后使用,可以用以下方法获得:
java.lang.String getRealPath(java.lang.String path) --得到资源的绝对路径
java.io.InputStream getResourceAsStream(java.lang.String path)--得到资源的的一个输入流
JavaWeb之Servlet: ServletConfig 与 ServletContext的更多相关文章
- JavaWeb之Servlet中ServletConfig和ServletContext
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前 ...
- JavaWeb学习总结(四)—ServletConfig和ServletContext
一.ServletConfig 1. ServletConfig介绍: ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletCo ...
- Servlet入门和ServletConfig、ServletContext
Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...
- Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext
一.GenericServlet 1.所有的成员方法: 1.在javaWeb项目中: 2.web.xml <?xml version="1.0" encoding=" ...
- 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>
1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...
- Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext
Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...
- JavaEE:Servlet简介及ServletConfig、ServletContext
Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术*静态web资源:固定数据文件*动态web资源:通过程序动态生成数据文件2.Servlet技术基于Request ...
- Servlet之初始化参数和传递数据(ServletConfig,ServletContext )
ServletConfig 容器初始化一个Servlet的时候,会为这个Servlet建一个唯一的Servletconfig的对象(Servlet的配置对象) 容器会从部署的描述文件(web.xml) ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
随机推荐
- Bug管理工具的使用介绍(Bugger 2016)
1. Bugger 2016 介绍 Bugger 2016 is the version of Bugger adding support fot Team Foundation Server bug ...
- CDN缓存策略FAQ
1.CDN加速原理通过动态域名解析,网友的请求被分配到离自己最快的服务器.CDN服务器直接返回缓存文件或通过专线代理原站的内容.网络加速+内容缓存,有效提供访问速度 2.CDN节点数量全国多个机房,每 ...
- [实战经验]Macbook pro 苹果系统换window系统
1. Macbook的window软件驱动备份 通过Boot Camp助手进行window支持苹果驱动下载 2. 拆机把SSD固态硬盘放在主盘位置,把苹果的机械盘放在光驱位置 ...
- Quartz.Net CronExpression表达式详解
Quartz.Net是我们常用的开源任务调度程序,其中最方便最强大的功能就是灵活多变的定时任务执行的支持.他靠什么来实现这个灵活的任务定时调度呢,就是咱们今天要详细分享的Cron Express表达式 ...
- Swift开发中的一些琐碎
1.Swift中使用OC 1.创建 pch 文件,直接引用需要的头文件 #import"SQLite3.h" 2.修改 pct 路径 ,如下图,就可以使用了 2. Swift 没 ...
- SQL where 1=1的作用
浅谈where 1=1 1.简单理解的话where 1=1 永真, where 1<>1 永假 2.1<>1 的用处: 用于只取结构不取数据的场合 例如: ...
- centos kvm
http://linux.dell.com/files/whitepapers/KVM_Virtualization_in_RHEL_6_made_easy.pdf http://linux.dell ...
- C# Socket网络编程精华篇(转)
我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本 ...
- 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
<?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $tab2 = 'user_bak'; //被触发的表 $conn = mysql_con ...
- Let's see if we could reocver Line 5.3 and above deleted chat messages or not
Forensic is a strict science and we should let the evidence speak for itself. Several months ago I s ...