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的更多相关文章

  1. Servlet之ServletContext以及文件操作

    ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...

  2. servlet ServletConfig ServletContext

    ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...

  3. 2.深入学习Servlet的ServletContext对象

    一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...

  4. Servlet、ServletContext与ServletConfig的详解及区别

    Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...

  5. Servlet 使用ServletContext共享数据,读取web.xml配置

    ServletContext对象 session和cookie,对于每一个请求用户来说,都是不同的,因为要保证隐私安全. 而有一些数据,可以让所有用户共享,此时就可以用ServletContext对象 ...

  6. Servlet (二)ServletContext

    package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletContext; import javax. ...

  7. Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)

    1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...

  8. [Servlet]研究ServletContext对象

    作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...

  9. servlet的ServletContext接口

    ServletContext Servlet 上下文 每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一 ...

随机推荐

  1. LeetCode "448. Find All Numbers Disappeared in an Array"

    My first reaction is to have an unlimited length of bit-array, to mark existence. But if no extra me ...

  2. Linux下MySQL/MariaDB Galera集群搭建过程

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  3. 十分钟轻松让你认识Entity Framework 7

    EF7不是在EF6上更新,而是完全重写了.它完全支持.NET Core runtime,也就是说以后你可以在Mac或者是Linux机器上使用EF了. https://github.com/nichol ...

  4. awk中的system和getline的用法

    system只能对命令的输出结果输出到终端. getline在awk中可以使命令的输出结果传到一个变量中保存. # awk 'BEGIN{system("date")|getlin ...

  5. mysql返回最后一列数据

    获取MySQL的表中每个userid最后一条记录的方法,并且针对userid不唯一的情况,需要的朋友可以参考下 表结构 CREATE TABLE `t1` ( `userid` int(11) DEF ...

  6. js,java,浮点数运算错误及应对方法

    js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...

  7. 网页中嵌入可以点击“运行代码”执行html/css/js代码

    html代码 <textarea name="textarea" cols="60" rows="10" id="rn01& ...

  8. backup mysql

    #!/bin/bashcd /home/Licw/backup_openDBNow=$(date +"%m-%d-%Y--%H:%M:%S")#echo $NowFile=$Now ...

  9. Linux系统概述

    1.Linux是一套免费使用 和自 由传播的类Unix操作系统. 这个系统是由世界各地的成千上万的程序员 设计和实现的.其目 的是建立不受任何商品化软件的版权制约的. 全世界都能自 由使用的Unix兼 ...

  10. 要学Java,怎么高效地学习,怎么规划

    要学Java,怎么高效地学习,怎么规划?   题主是一个个例,99%的人(包括我自己)都没有题主这样的经历,也很难提出具有很强参考性的java学习建议.我倒是之前面试过一个跟题主有点类似的人,拿出来分 ...