Servlet 之 ServletContext
package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; 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 FServlet extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username=context.getInitParameter("username");
Enumeration enu=context.getInitParameterNames();
while(enu.hasMoreElements()){
String key=(String)enu.nextElement();
String value=context.getInitParameter(key);
System.out.println(key+"-========>"+value);
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
<display-name></display-name>
<context-param>
<param-name>username</param-name>
<param-value>tomcate</param-value>
</context-param>
<context-param>
<param-name>pwd</param-name>
<param-value>123456</param-value>
</context-param>
<!-- 配置servlet到项目中 -->
<servlet>
<!-- 可以随便填只需要注意不要和其他servlet的名字重复即可(建议使用简单类名) -->
<servlet-name>AServlet</servlet-name>
<!-- 配置servlet的完整类名 -->
<servlet-class>cn.jiemoxiaodi.servlet.AServlet</servlet-class>
<init-param>
<param-name>aa</param-name>
<param-value>sdfds</param-value>
</init-param>
</servlet> <!-- 配置上面这个servlet使用那个路径能被访问 -->
<servlet-mapping>
<!-- 此处不能随便写了,必须与上面的servlet对应,表示在为那个servlet配置路径 -->
<servlet-name>AServlet</servlet-name>
<!-- 配置访问这个servlet的路径 (相对路径) /==>http://localhost:8080/day10_servlet/ http://localhost:8080/day10_servlet/AServlet -->
<url-pattern>/AServlet</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.servlet_config.BServlet</servlet-class>
<init-param>
<param-name>a</param-name>
<param-value>123456sdfd</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.mygenericservlet.CServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>需哦啊</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>DServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.http.DServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>FServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.servlet_servletcontext.FServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>CServlet</servlet-name>
<url-pattern>/CServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DServlet</servlet-name>
<url-pattern>/DServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FServlet</servlet-name>
<url-pattern>/FServlet</url-pattern>
</servlet-mapping>
</web-app>
http://localhost:8080/projectname/FServlet
package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HServlet extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.getServletContext().setAttribute("aa", "dsfd");
this.getServletContext().setAttribute("adfa", "dsfd");
this.getServletContext().removeAttribute("aa");
this.getServletContext().removeAttribute("adfa");
System.out.println(this.getServletContext().getAttribute("aa") + "===>"
+ this.getServletContext().getAttribute("adfa"));
}
}
ServletContext对象
介绍
1.这个对象代表着咱们的整个项目.==> 这个对象在一个项目中只存在一个实例.
2.启动项目的时候会自动创建. 关闭服务器的时候会销毁该实例.
3.该对象如何获取呢? ==> servletConfig 中 有一个方法叫做 getServletContext方法 来获得.
功能
一:可以获得项目中的一些配置(web.xml)
getInitParameter(String name) 根据键获得值
getInitParameterNames() 获得所有键
上面这两个方法名字与servletConfig中的一模一样.但是获得的配置信息是
<context-param>
<param-name>userName</param-name>
<param-value>tom</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>1234</param-value>
</context-param>
二:作为我们servlet技术中 三大域对象之一. 如果包含jsp的话,其实有4大域 page域.
application ==> servletContext
session
request
域对象涉及到4个方法
getAttribute(key) 根据键获得值
setAttribute(key,value) 往application域中的map 存放一个键值对
removeAttribute(key) 从application域中的map 删除一个键值对
getAttributeNames(); 从application域中的map 获得所有的键
//获取资源的相关方法
//this.getServletContext().getRealPath(path)
//this.getServletContext().getResourceAsStream(path)
System.out.println(this.getServletContext().getRealPath("/WEB-INF/demo.xml"));
InputStream input= this.getServletContext().getResourceAsStream("/WEB-INF/demo.xml");
System.out.println(input);
三:可以获取项目中的资源.(例如获得项目中存放学生的stu.xml)
//想对WEB-INF/Demo.xml进行操作.我们要先读取出该文件
//如何来读取呢?
//File file = new File("E:/代码/Workspaces0808/Day10-servlet/WebRoot/WEB-INF/demo.xml");
//上面获得demo.xml填写的路径显然是不对的.获得的是工程下的而我们要获得最终部署到服务器上的.
//File file = new File("E:/apache-tomcat-6.0.35/webapps/Day10-servlet/WEB-INF/demo.xml");
//上面这种获得方式就对了.但是 如果把项目再部署到其他地方,那上面这个写死的路径就无效了.
//这样类似获得外部资源的例子很多,所以servletContext对象给出了解决办法.
//getRealPath("/") ==> 获得绝对路径 ,根据参数中的相对路径获得. "/"相对于WebRoot
//getResourceAsStream("/"); ==>直接获得 想要找的资源的流 . 参数还是填相对路径,同上
例子:
String path = getServletContext().getRealPath("/WEB-INF/demo.xml");
System.out.println(path);
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/demo.xml");
System.out.println(is);
使用Class和ClassLoader 获得项目中的资源路径
//web-inf下的
String path1 = getServletContext().getRealPath("/WEB-INF/demo.xml");
//lib下的
String path2 = getServletContext().getRealPath("/WEB-INF/lib/demo.xml");
//src下的
String path3 = getServletContext().getRealPath("/WEB-INF/classes/demo.xml");
//cn.itcast.servlet.servlet_context包下的
String path4 = getServletContext().getRealPath("/WEB-INF/classes/cn/itcast/servlet/servlet_context/demo.xml");
//其实上面例子中path3 和 path4 这两种方式 有些麻烦
//在介绍一种获得资源的方式,是对.class ==> Class 和 classLoader的应用
InputStream is = this.getClass().getResourceAsStream("demo.xml"); // 如果不加"/"==> 相对的是类的当前(包)目录
InputStream is2 = this.getClass().getResourceAsStream("/demo.xml");//如果加了"/" ==> "/"就代表classes目录(src)
//在说下classLoader 下也有方法 classLoader 就是类的加载器. ==> 专门来读取class文件的输入流
//也提供了读取其他文件的方法.(使用classLoader不要读取较大的文件)
// this.getClass().getClassLoader() ==> 获得类的加载器
InputStream is3 = this.getClass().getClassLoader().getResourceAsStream("/demo.xml");// 不论加不加"/",都相对于 classes目录,跟class中加"/" 的相对路径是一样的.
//使用class或classLoader 也可以获得文件的绝对路径
URL url = this.getClass().getResource("demo.xml");
System.out.println(url.getPath());
Servlet 之 ServletContext的更多相关文章
- Servlet之ServletContext以及文件操作
ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- 2.深入学习Servlet的ServletContext对象
一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...
- Servlet、ServletContext与ServletConfig的详解及区别
Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...
- Servlet 使用ServletContext共享数据,读取web.xml配置
ServletContext对象 session和cookie,对于每一个请求用户来说,都是不同的,因为要保证隐私安全. 而有一些数据,可以让所有用户共享,此时就可以用ServletContext对象 ...
- Servlet (二)ServletContext
package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletContext; import javax. ...
- Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)
1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...
- [Servlet]研究ServletContext对象
作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...
- servlet的ServletContext接口
ServletContext Servlet 上下文 每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一 ...
随机推荐
- SQL基础--ROWNUM伪列
ROWNUM伪列 的概念: rownum表示的是一个数据行编号的伪列,它的内容是在用户查询数据时,为用户动态分配的一个数组(行号). 注意它是随机生成的,并不是和某一行数据绑定在一起的. 观察rown ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- 谈谈RPC中的异步调用设计
RPC(远过程调用)在分布式系统中是很常用的基础通讯手段,核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处 ...
- AnimationsDemo中的ZoomActivity代码分析
AnimationsDemo是android官网的一个动画使用示例. ZoomActivity是demo中的图像缩放动画,因为这种效果比较常见,所以研究了一下代码. 下面是效果图: 毫无疑问这是一个组 ...
- servlet的四个作用域
作用域规定的是变量的有效期限,servlet有四个作用域对象,这里只说三个: 一. request作用域: 1.作用范围: 就是指从http请求发起,到服务器处理结束,返回响应的整个过程.在这个过程中 ...
- 什么是Jedis?
Jedis 是 Redis 官方首选的 Java 客户端开发包. 实例方法: 1 import redis.clients.jedis.* 1 2 3 Jedis jedis = new Jedis( ...
- BeautifulSoup 的用法
转自:http://cuiqingcai.com/1319.html Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python ...
- resin启动报错:guava-15.0.jar!/META-INF/beans.xml:5: <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> is an unexpected top-level tag. 异常
项目完成,经过本地的测试,最后在部署的时候,发现服务器resin启动失败,报错信息如下:
- 精通Web Analytics 2.0 (5) 第三章:点击流分析的奇妙世界:指标
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第三章:点击流分析的奇妙世界:指标 新的Web Analytics 2.0心态:搞定它.新的闪亮系列工具:是的.准备好了吗?当然 ...
- BZOJ 1968: [Ahoi2005]COMMON 约数研究
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2032 Solved: 1537[Submit] ...