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对象都是同一 ...
随机推荐
- __definedGetter\Setter__的一些想法
__definedGetter\Setter__ 是JS5在创建对象后内置的方法,用于在读写对象属性的时候执行的方法. zhangmingzhi.__defineSetter__('age',func ...
- JS组件系列——两种bootstrap multiselect组件大比拼
前言:今天继续来看看bootstrap的另一个组件:multiselect.记得在项目开始之前,博主项目组几个同事就使用哪些js组件展开过讨论,其中就说到了select组件,由于项目的整体风格使用的b ...
- C#进阶系列——MEF实现设计上的“松耦合”(一)
前言:最近去了趟外地出差,介绍推广小组开发的框架类产品.推广对象是本部门在项目上面的同事——1到2年工作经验的初级程序员.在给他们介绍框架时发现很多框架设计层面的知识他们都没有接触过,甚至没听说过,这 ...
- [ASP.NET 5]终于解决:Unable to load DLL 'api-ms-win-core-localization-obsolete-l1-2-0.dll'
11月12日,惊喜地发现SqlClient(System.Data.SqlClient.dll)跨平台了(对应的nuget包包是runtime.unix.System.Data.SqlClient), ...
- python 批量扫描mongodb 未授权访问脚本
需要 pymongo库easy_install pymongo脚本: import socket import sys import pymongo ipcons = [] def Scanner(i ...
- RabbitMQ Topic exchange
Topic exchange topic与之前的每个类型都不同(ps:废话每个都是不同的).Topic解决了我们另一个需求.举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出 ...
- docker入门记录1
一. 什么是Docker 1.英文意思是集装箱,很形象.直白点就是将程序运行环境打包在一个箱子里,然后箱子扔到哪里,里边的程序都可以运行.这样以来一个显而易见的好处是:和以前的开发环境等相比,你不用每 ...
- 介绍编译的less的两种IDE工具
介绍编译的less的两种IDE工具 现在css预编译越来越普及了,著名的有less.sass.stylus等等等等.功能上基本上都是大同小异.这些个玩意儿主要表达的意思就是:"像编程一样的编 ...
- linux中ldconfig的使用介绍
linux中ldconfig的使用介绍 ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享. ldconfig的主要用途: 默认搜寻/lilb和/usr/lib,以及配置文件 ...
- linux集群时钟问题
一.ntpd与ntpdate的区别: 摘自:ntpd与ntpdate的区别 - 百事乐 - 博客园 http://www.cnblogs.com/liuyou/archive/2012/07/29/ ...