ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象。

该对象主要描述的时候一个servlet的配置信息。

如:

<servlet>         配置一个servlet
<servlet-name>helloservlet</servlet-name>  指定servlet的名字(任意)
 指定servlet具体的类的全限定名(包名.类名)
<servlet-class>cn.itcast.servlets.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>  映射一个servlet
<servlet-name>helloservlet</servlet-name>  需要映射的servlet名
<url-pattern>/helloservlet</url-pattern>  浏览器需要访问的路径
</servlet-mapping>

以上配置就是一个servlet的配置信息,如果开发者需要获取其中的数据,那么tomcat已经创建好的ServletConfig接口对象来方面开发者获取信息。

举例1:获取指定servlet的配置的名字。

public class Demo1 extends HttpServlet {
private ServletConfig config = null;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取servlet的配置名
String name = this.config.getServletName();
response.getOutputStream().write(name.getBytes());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// 重写init方法
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
this.config = config;
}
}

举例2:获取servlet的配置参数。

在实际的编程过程中需要将所有可变的数据封装到配置文件中去,这样便于软件的后期的维护。Android。

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

// 获取servlet的配置名

String name = this.config.getServletName();

response.getOutputStream().write(name.getBytes());

// 获取配置参数

String ip = this.config.getInitParameter("ip");

String dbtype = this.config.getInitParameter("dbtype");

response.getOutputStream().write("<br/>".getBytes());

response.getOutputStream().write((ip+" , "+dbtype).getBytes());

// 使用循环获取所有的配置参数

Enumeration<String> names = this.config.getInitParameterNames();

while(names.hasMoreElements()){

String ini_name = names.nextElement();

String ini_value = this.config.getInitParameter(ini_name);

response.getOutputStream().write((ini_name+"="+ini_value+"<br/>").getBytes());

}

}

总结:发现tomcat创建并传递过来的servletconfig对象接收比较繁琐。

// 获取servletconfig对象
ServletConfig config = this.getServletConfig();
System.out.println(this.config == config);

为了方便开发者获取servletconfig对象,那么HttpServlet直接提供了getServletConfig(),

两种方式获取的对象是同一个对象。

ServletContext接口

ServletContext接口对象主要实现的是servlet之间的通信。该对象可以和web服务器进行通信。转发请求。

ServletContext接口是对网站的抽象描述。一个ServletContext代表一个web应用(网站)。

该对象是由Tomcat创建出来连同ServletConfig对象一并通过初始化方法传递过来的。

1实现servlet的通信

1. 放数据

  // 获取ServletContext对象
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
ServletContext context1 = this.getServletConfig().getServletContext();
ServletContext context2 = this.getServletContext();
System.out.println(context1 == context2); // true
// 主要作用之一是实现servler之间的数据通信
context1.setAttribute("news_title", "北京的灰霾天气");
}

2. 取数据

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String name = (String) this.getServletContext().getAttribute("news_title");
response.getOutputStream().write(name.getBytes());
}

2 实现服务器通信

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 和tomcat进行通信获取MIME类型
ServletContext context = this.getServletContext();
String type = context.getMimeType("/jnb.doc");
System.out.println(type);
}

1  获取网站资源(重点)

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 获取网站对象
ServletContext context = this.getServletContext();
// 获取网站中的静态资源
InputStream in = context.getResourceAsStream("/123.bmp");
// 获取输出流
FileOutputStream out = new FileOutputStream(new File("d:/123.bmp"));
// 边读 边写
byte[] bs = new byte[];
int len = ;
while((len = in.read(bs)) != -){
out.write(bs, , len);
out.flush();
}
// 释放资源
in.close();
out.close();
}

3请求转发

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 获取网站对象
ServletContext context = this.getServletContext();
// 转发
System.out.println("不好意思没钱!,找老汤去....");
context.getRequestDispatcher("/lt").forward(request, response);
}

请求转发:请求转发是服务器自己做的事情,那么在客户端是展现不出来的,因此浏览器的地址栏是不发生变化的。

java学习笔记—ServletConfig、ServletContext接口(13)的更多相关文章

  1. Java学习笔记之---比较接口与抽象类

    Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...

  2. 【Java学习笔记】Map接口的子接口---TreeMap

    TreeMap,与TreeSet类似,可以对集合中的元素进行排序,同时保持元素的唯一性. 应注意,Comparable(实现接口,记得覆盖comparaTo方法),Comparator的使用. imp ...

  3. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  4. java学习笔记——Collection集合接口

    NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...

  5. Java学习笔记-抽象类与接口

    抽象类用于在类中不用具体实现,而在子类中去实现的类 抽象类 抽象类概述 抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完 ...

  6. Java学习笔记(十)面向对象---接口

    理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...

  7. java学习笔记(1)——有关接口

    接口: interface intf0{ public void doSomething(); } interface intf1{ public void doAnything(); } class ...

  8. Java学习笔记:03面向对象-接口_多态

    1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. 「小程序JAVA实战」小程序的分享和下载功能(69)

    转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudefenxianghexiazaigongneng68/ 在小程序上 ...

  2. MyBatis 动态SQL注意事项

  3. css常用属性总结:颜色和单位

    在css代码编写中,估计颜色和单位是必不可少的,然而在css中关于颜色和单位值的写法有很多种写法,所以有必要把它弄清楚. 颜色 当初我在初学前端的时候,就会冒出一个疑问“我该如何设置网页颜色?”,一般 ...

  4. spring 控制反转与依赖注入原理-学习笔记

    在Spring中有两个非常重要的概念,控制反转和依赖注入:控制反转将依赖对象的创建和管理交由Spring容器,而依赖注入则是在控制反转的基础上将Spring容器管理的依赖对象注入到应用之中: 所谓依赖 ...

  5. 【BZOJ2716】天使玩偶【kd树】

    这个题要求kd树支持两个操作. 1.插入一个新的点. 2.查询某个点最近曼哈顿距离. 注意查询曼哈顿距离和查询欧几里得距离,是有区别的.(估价函数不同). #include <cstdio> ...

  6. Django 1.10.2 模型数据库操作

    首先我的django 版本 >>> django.VERSION (1, 10, 2, u'final', 0) setting.py: DATABASES = { 'default ...

  7. java代码实现网络远程开机

    http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...

  8. Halcon阈值化算子dual_threshold和var_threshold的理解

    Halcon中阈值二值化的算子众多,通常用得最多的有threshold.binary_threshold.dyn_threshold等. threshold是最简单的阈值分割算子,理解最为简单:bin ...

  9. JavaScript stringObject.replace() 方法

    定义和用法: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法: stringObject.replace(RegExp/substr,reol ...

  10. [Selenium]计算坐标进行拖拽,重写dragAndDropOffset

    //@author jzhang6 public void dragAndDropOffset(WebDriver driver,WebElement dragableEl, WebElement d ...