一、ServletConfig对象及其应用(用的不多

1. Context和ContextPath:一个web工程,若名为JavaWeb,访问的路径为:http://localhost:8080/JavaWeb,这整个web应用就为一个Context;

路径/JavaWeb称为Context(上下文路径),利用request.getContextPath()可以获取。

2. ServletConfig:代表当前Servlet在web.xml中的配置信息

当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init()方法时,将ServletConfig 对象传递给servlet。进而,通过ServletConfig对象就可以得到当前servlet的初始化参数。

这样做的好处是:如果将数据库信息、编码方式等配置信息放在web.xml中,如果以后数据库的用户名、密码改变了,则直接很方便地修改web.xml就行了,避免了直接修改源码的麻烦。

  • String getServletName()  :获取当前Servlet在Web.xml中配置的名字;
  • String getInitParameter(String Name) :获取当前Servlet指定名称的初始化参数的值;
  • Enumeration getInitParameterNames()  :获取当前Servlet所有初始化参数的名字组成的枚举;
  • ServletContext getServletContext()  : 获取代表当前web应用的ServletContext对象。

在Servlet的配置文件中,可以通过一个或多个<init-param>为Servlet配置一些初始化参数。

示例代码:新建一个ServletConfigTest的Servlet文件,在web.xml的<servlet>下,通过<init-param>为此servlet配置两个初始化参数。

 <servlet>
<servlet-name>ServletConfigTest</servlet-name>
<servlet-class>com.yx.servlet.test.ServletConfigTest</servlet-class>
<init-param>
<param-name>name1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>ServletConfigTest</servlet-name>
<url-pattern>/Servlet_test/ServletConfigTest</url-pattern>
</servlet-mapping>

  注意:在web.xml中配置<servlet-class>时,应为(所在包名.servlet名称),否则会报404错误。

 package com.yx.servlet.test;

 import java.io.IOException;
import java.util.Enumeration; import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class ServletConfigTest
*/
@WebServlet("/ServletConfigTest")
public class ServletConfigTest extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public ServletConfigTest() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = this.getServletConfig(); //拿到init方法中的ServletConfig对象 //获取当前Servlet在web.xml中的配置名称(不常用)
String sName = config.getServletName();
System.out.println("当前servlet在web.xml中的配置名称为:"+sName); //获取当前Servlet中配置的初始化参数(一次只能获取一个)经常用到
//String value = config.getInitParameter("name1");
//System.out.println(value); //获取当前Servlet中配置的初始化参数(全部获取)经常用到
Enumeration enumeration = config.getInitParameterNames();
while(enumeration.hasMoreElements()){
String name = (String)enumeration.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+":"+value);
} } /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

核心代码地33行,通过this.getServletConfig()获取init方法中的ServletConfig对象,然后获取配置信息。

二、ServletContext对象及其应用(非常重要

  简介:

  (1) 生命周期:Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用。ServletContext对象只在Web应用被关闭时才被销毁;不同的Web应用,ServletContext各自独立存在。

  (2) 获取:SevletConfig 对象中维护了 ServletContext 对象的引用,通过 SevletConfig.getServletContext()方法获取ServletContext 对象。或者直接调用封装好的getServletContext () 方法即可获取。

  (3) 作用:由于一个Web应用中的所有 Servlet 共享同一个ServletContext 对象,因此 Servlet  对象之间可以通过ServletContext  对象来实现通讯。 ServletContext 对象通常也对称之为context 域对象。

  ServletContext的应用:

  (1)在Web应用中不同Servlet之间的数据共享(通信)

  ServletContext_01.java

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
context.setAttribute("name", "yx");
}

  ServletContext_02.java

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String Isname = (String) context.getAttribute("name");
System.out.println(Isname);
}

  (2)获取Web应用的初始化参数

  之前在<init-param>中为单独的Servlet文件添加配置信息,这些配置信息在其他的Servlet文件中是无法访问的。如果用<context-param>(与servlet标签并列)对整个Web应用进行信息配置的话,那么所有的servlet文件都可以访问这些参数。例如:数据库的一些配置信息。

<servlet>
<servlet-name>ServletTest_03</servlet-name>
<servlet-class>com.yx.servlet.test.ServletTest_03</servlet-class>
</servlet> <context-param>
<param-name>username</param-name>
<param-value>yanxi</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param> <servlet-mapping>
<servlet-name>ServletTest_03</servlet-name>
<url-pattern>/Servlet_test/ServletTest_03</url-pattern>
</servlet-mapping>

从程序代码中获取这些配置参数:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();//得到上下文对象 //获取单个的context里的参数
String value1 = context.getInitParameter("username");
String value2 = context.getInitParameter("password");
System.out.println(value1+":"+value2); //一次全部获取context中所有参数信息
Enumeration enumeration = context.getInitParameterNames();
while(enumeration.hasMoreElements()){
String name = (String)enumeration.nextElement();
String value = context.getInitParameter(name);
System.out.println(name+":"+value);
} }

输出结果:

  (3)通过ServletContext对象实现servlet的转发

将对本servlet的请求转发到另一个servlet(或jsp)执行,并response。

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

         //参数中写虚拟路径
RequestDispatcher dispather = this.getServletContext().getRequestDispatcher("/Servlet_test/ServletTest_05");
dispather.forward(request, response);//将会跳到ServletTest_05中执行
}

ServletTest_05中的代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.getWriter().write("onlyu");
}

注:不要忘记web.xml中对servlet的配置。

ServletContext的其他应用,可阅读参考文献。

本文主要是对ServletConfig、ServletContext的一个学习过程,参考了下列博文:

(1)http://www.cnblogs.com/smyhvae/p/4140877.html

(2)http://blog.csdn.net/u012228718/article/details/41730903

(3)http://blog.csdn.net/pql925/article/details/53259089

ServletConfig、ServletContext 的应用的更多相关文章

  1. Server,Servlet,ServletConfig,ServletContext,Session,Request,Response

    Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...

  2. (day20)javaEE三大组件之一Servlet (简介(二)servletconfig,servletContext,session,cookie,request,response,out)

    javaEE是服务器编程,javaEE提供了服务器的接口让具体的服务器去创建实现的对象 JavaEE是sun公司为了解决企业级开发定义的一套技术,只提供了规范,具体的实现是由服务器完成的 servle ...

  3. 第一个web程序(web.xml , ServletConfig , ServletContext)

    一:第一个jsp程序 1.项目设计结构 2.新建Person.java package com.java.demo; public class Person { public void printSt ...

  4. servlet ServletConfig ServletContext

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

  5. Servlet开发(三)之ServletConfig,ServletContext

    1. ServletConfig Servlet是开发动态web的技术,而web.xml是Tomcat工程中最基础也最重要的配置文件,Tomcat启动项目的时候会加载并读取这个文件,其中web.xml ...

  6. JavaWeb -- 服务器传递给Servlet的对象 -- ServletConfig, ServletContext,Request, Response

    1.  ServletConfig  有一些东西不合适在程序中写死,应该写在web.xml中,比如 文字怎么显示, 访问数据库名 和 密码, servlet要读取的配置文件 等等.. l在Servle ...

  7. ServletConfig&ServletContext对比

    上下文初始化参数(ServletContext) Servlet初始化参数(ServletConfig) 部署描述文件 在<web-app>元素中,但是不在具体的<servlet&g ...

  8. Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象

    本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...

  9. 谈谈 ServletConfig 和 ServletContext

    目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...

  10. JAVA-Servlet-ServletConfig 与 ServletContext 的区别

    什么是ServletConfig? Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象.在servletConfig对象中包含了serv ...

随机推荐

  1. mysql 聚集函数 count 使用详解(转载)

    本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName)2.distinct 与 count 连用3.group by (多个字段) 与 ...

  2. 初识Git->GitHub

    这不是一篇教程,这是学习过程的一个记录,初次使用GitHub的小白请移步文章末尾的参考链接, 先了解Git是什么东西 Git的工作流程 操作Git 练习使用 边用边学 #--------------- ...

  3. 一、Python入门

    一.语法特点: 注释规则: 单行注释:“#”作为单行注释符号(从“#”开始到换行都为注释):Alt+F3/4快捷添加/取消注释 多行注释:宝行一对三引号('''…''')或(""& ...

  4. Navicat操作SQL server 2008R2文件.bak文件还原

    项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...

  5. EXPDP 时报错ORA-31693,ORA-02354,ORA-01555

    使用数据泵导出数据库大表时报错: ORA-31693: 表数据对象 "**"."**" 无法加载/卸载并且被跳过, 错误如下:ORA-02354: 导出/导入数 ...

  6. !!常用HTML代码

    META: <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> “IE=e ...

  7. python request 请求https verify=False时warning

    import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.pac ...

  8. CSS : color and unit

    Color: CSS中定义颜色使用十六进制(hex)表示法为红,绿,蓝的颜色值结合.可以是最低值是0(十六进制00)到最高值是 255(十六进制FF).3个双位数字的十六进制值写法,以#符号开始部分颜 ...

  9. 供Linux学习使用的在线模拟系统

    前言 我只是一名搬运工. 最近想要找一个linux服务器用于调试shell脚本,但是公司服务器又只能内网访问,外网无法使用.对安装VMWARE+Linux镜像觉得繁琐.查找了一下资料.找到了几个在线模 ...

  10. Linux网络编程学习(八) ----- 文件和记录锁定(第四章)

    1.什么是文件和记录锁定? 文件锁定的是整个文件,而记录锁定只锁定文件的一部分,文件和记录锁分为咨询式锁定和强制锁定 1)咨询式锁定 某个进程对某个文件进行了咨询式锁定,其他想访问该文件的进程将会被操 ...