有4个有关的类,通过servlet可以获得其中的三个,然后通过ServletConfig间接获取ServletContext。
1、 ServletConfig
该类是在Servlet容器初始化Servlet时,将初始化参数交给servlet的init()方法;另外它还可以获得ServletConfig类的实例。类里两个方法比较常用,就是获得初始化参数。
首先我们要知道怎么配置初始化参数?两个办法:

  1. @WebServlet(name="testServlet", urlPatterns="/testServlet", loadOnStartup=1,
  2. initParams={
  3. @WebInitParam(name="user", value="lmy"),
  4. @WebInitParam(name="pass", value="123")
  5. }
  6. )
  7. public class TestServlet implements Servlet {}

通过web.xml:

  1. <servlet>
  2. <servlet-name>TestServlet</servlet-name>
  3. <servlet-class>com.javaservlet.servlet.TestServlet</servlet-class>
  4. <init-param>
  5. <param-name>age</param-name>
  6. <param-value>21</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>address</param-name>
  10. <param-value>nicai</param-value>
  11. </init-param>
  12. <load-on-startup>1</load-on-startup>
  13. </servlet>

注意初始化参数要放在load-on-startup前面,否则会出错,这是由xml的schema文件决定的。
由于参数都是以键值对形式存在,可以获取参数:

  1. System.out.println("user : " + servletConfig.getInitParameter("user"));
  2. System.out.println("pass : " + servletConfig.getInitParameter("pass"));
  3. Enumeration<String> enums = servletConfig.getInitParameterNames();
  4. while(enums.hasMoreElements()){
  5. String paramName = enums.nextElement();
  6. String paramValue = servletConfig.getInitParameter(paramName);
  7. System.out.println(paramName + "-" + paramValue);
  8. }

注意,该参数只是属于Servlet自己的,所以配置参数的时候要注意所放的位置。
2、 ServletContext
通过ServletConfig类的getServletConext()方法可以获得ServletContext类实例,该对象表示整个web应用程序,在一个程序中只有一个,程序中所有的servlet共享该对象,可以说是一个全局对象,我们也可以获取web应用的初始化参数,该初始化参数可供所有的servlet使用,首先设置web初始化参数:

  1. <context-param>
  2. <param-name>country</param-name>
  3. <param-value>cn</param-value>
  4. </context-param>

注意和init-param的区别,获取方式和init-param类似:

  1. ServletContext context = servletConfig.getServletContext();
  2. context.getInitParameter("country");
  3. Enumeration<String> contextParams = context.getInitParameterNames();
  4. while(contextParams.hasMoreElements()){
  5. String paramName = contextParams.nextElement();
  6. String paramValue = context.getInitParameter(paramName);
  7. System.out.println(paramName + "-" + paramValue);
  8. }

其中还有一些其他的方法可以使用:
获取web程序名称:

  1. // 获取当前web程序的context path,也可以说是程序名称
  2. System.out.println(context.getContextPath());      //output result: /JavaServlet

获取当前web应用的某一个文件在服务器上的绝对路径,而不是部署前的路径,也就不是你的IDE里的路径。

  1. System.out.println(context.getRealPath("readme.txt"));

工程目录如下:

输出结果:

  1. C:\Program Files\tomcat7\wtpwebapps\JavaServlet\readme.txt

这其实是文件在Servlet容器上的路径,在eclipse中可以看到server的路径说明

可以看出该文件的路径是Server path + deploy path + 应用程序中的路径,记得和师兄之前还讨论过这个问题,当时真是傻死了!!
获取当前web应用的一个文件输入流:
getResourceAsStream(String path):注意其中的path也是相对于web程序根目录的路径,即也是在部署之后的路径,不是部署之前的路径;
与Classloader的方法对比如下:

  1. InputStream is1 = context.getResourceAsStream("readme.txt");
  2. System.out.println("inputStream1 : " + is1);
  3. InputStream is2 = this.getClass().getClassLoader().getResourceAsStream("readme.txt");
  4. System.out.println("inputStream2 : " + is2);
  5. InputStream is3 = context.getResourceAsStream("/WEB-INF/classes/readme.txt");
  6. System.out.println("inputStream3 : " + is3);

输入如下:

可以看出第一个使用部署前的路径根本没有获取到资源,而使用相对于部署后的web程序的根目录(从/WEB-INF开始)则成功获取到了资源。
总之就是一句话,在web程序中获取路径时一定要小心,因为获取到的路径很多都是根据程序部署之后相对于服务器部署目录的路径,开发时的路径是不会获取到的,即开发和部署两个阶段中调试程序是有差异的。
还有两个重要的方法,getAttribute()和getAttributeNames(),跟下一篇的说ServletRequest对象时一起进行对比。
3、 其他两个对象
因为ServletRequest和ServletResponse和Http的通信联系紧密,所以把它们放到下一篇说明。

与Servlet相关的类的更多相关文章

  1. JavaWeb学习——Servlet相关的接口和类

    JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...

  2. Servlet相关接口和Servlet的生命周期

    http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ...

  3. servlet相关 jar包位置 BAE上部署web应用

    1手动编译servlet工程: 要编译servlet,则类路径classpath中必须包括Servlet API 的相关类,如果使用的web容器是Tomcat,则这些类通常封装在在tomcat的lib ...

  4. Servlet相关学习

    Servlet入门解析 概念 运行在服务器端的小程序 servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则 实现servlet接口.复写方法 快速入门 创建web项目 ...

  5. Java EE Servlet相关的两个包

    Servlet in Java EE 在Java EE的规范API中(链接),Servlet相关联的最重要的两个Package为: 1.javax.servlet 包含了一系列接口和类,他们在一个Se ...

  6. servlet相关知识点

    一.servlet的生命周期 Servlet(Sever Applet),全称是Java Servlet,是用java编写的服务器程序.Servlet是指任何实现了这个Servlet接口的类. ser ...

  7. Hibernate 系列 04 - Hibernate 配置相关的类

    引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...

  8. SWIFT 通过字符串创建相关的类

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  9. 模拟在内存中的数据库DataSet相关的类

    这篇连着上一篇DataReader相关类. 下面两段话是在msdn官网摘下来:       .NET Framework 数据提供程序是专门为数据操作以及快速.只进.只读访问数据而设计的组件.Conn ...

随机推荐

  1. 基于Eureka的服务治理

    代码地址如下:http://www.demodashi.com/demo/11927.html 一.服务的注册与发现 关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务 服务消费者启动 ...

  2. Codeforces Round #485 (Div. 2)

    Codeforces Round #485 (Div. 2) https://codeforces.com/contest/987 A #include<bits/stdc++.h> us ...

  3. 网络通信实验(2)TCP/IP LWIP 简介

    TCP/IP 简介 TCP/IP 中文名为传输控制协议/因特网互联协议,又名网络通讯协议,是 Internet 最基本的协议. Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 ...

  4. 执行python文件报错SyntaxError: Non-ASCII character '\xe8' in file, but no encoding declared

    在文件头部加上: # -*- coding: utf-8 -*

  5. Spring MVC相关

    配置文件说明 web.xml, spring配置文件 applicationContext.xml, spring配置文件, mybatis连接mysql配置文件 sql-map-config-mys ...

  6. 笔记之monkey自定义脚本

    自定义脚本的稳定性测试 常规MOnkey测试执行的是随机的事件流,但如果只是想让Monkey测试某个特定场景者时候就需要用到自定义脚本,Monkey支持执行用户自定义脚本的测试,用户之需要按照Monk ...

  7. 第一个spring简单的helloworld

    spring 是一个开源的框架 也是轻量级框架 1.导入jar包 spring的版本 4.0 目录: spring-framework-4.0.0.RELEASE-libs 下的jar  spring ...

  8. Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较

    什么是分布式事物 分布式系统中保证不同节点之间的数据一致性的事物,叫做分布式事物. 为什么要用分布式事物 微服务,SOA等服务架构模式,一个是service产生多个节点,另一个是resource产生多 ...

  9. jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件

    很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() ...

  10. mysql系列博客

    近期,打算开始我的sql之路了,计划写一些sql方面的博客,初步定的计划,先写mysql,如果有必要,再写oracle.mysql如下: 1.mysql的调优思路 2.mysql 的执行过程 http ...