ServletConfig、ServletContext 的应用
一、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 的应用的更多相关文章
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- (day20)javaEE三大组件之一Servlet (简介(二)servletconfig,servletContext,session,cookie,request,response,out)
javaEE是服务器编程,javaEE提供了服务器的接口让具体的服务器去创建实现的对象 JavaEE是sun公司为了解决企业级开发定义的一套技术,只提供了规范,具体的实现是由服务器完成的 servle ...
- 第一个web程序(web.xml , ServletConfig , ServletContext)
一:第一个jsp程序 1.项目设计结构 2.新建Person.java package com.java.demo; public class Person { public void printSt ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- Servlet开发(三)之ServletConfig,ServletContext
1. ServletConfig Servlet是开发动态web的技术,而web.xml是Tomcat工程中最基础也最重要的配置文件,Tomcat启动项目的时候会加载并读取这个文件,其中web.xml ...
- JavaWeb -- 服务器传递给Servlet的对象 -- ServletConfig, ServletContext,Request, Response
1. ServletConfig 有一些东西不合适在程序中写死,应该写在web.xml中,比如 文字怎么显示, 访问数据库名 和 密码, servlet要读取的配置文件 等等.. l在Servle ...
- ServletConfig&ServletContext对比
上下文初始化参数(ServletContext) Servlet初始化参数(ServletConfig) 部署描述文件 在<web-app>元素中,但是不在具体的<servlet&g ...
- Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...
- 谈谈 ServletConfig 和 ServletContext
目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...
- JAVA-Servlet-ServletConfig 与 ServletContext 的区别
什么是ServletConfig? Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象.在servletConfig对象中包含了serv ...
随机推荐
- leetcode《按递增顺序显示卡牌》
题目描述: 牌组中的每张卡牌都对应有一个唯一的整数.你可以按你想要的顺序对这套卡片进行排序. 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态). 现在,重复执行以下步骤,直到显示所有卡牌为止: 从 ...
- 【HDFS API编程】查看目标文件夹下的所有文件、递归查看目标文件夹下的所有文件
使用hadoop命令:hadoop fs -ls /hdfsapi/test 我们能够查看HDFS文件系统/hdfsapi/test目录下的所有文件信息 那么使用代码怎么写呢?直接先上代码:(这之后 ...
- !!!常用bootstrap代码
http://v3.bootcss.com/components/ 组件 http://v3.bootcss.com/customize/ bootstrap定制 http://v3.bootcs ...
- 有了这个api接口工具-微信跳转其他浏览器下载app就这么简单
现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的api接口,那如何获取该api接 ...
- Abaqus用Dload子程序实现移动载荷
- Delphi 窗口操作
unit UnitWinUtils; interface uses Windows; Type TDWA128=Array [..] of LongWord; TDWA256=Array [..] o ...
- PHP提交订单,信息的传递
今天被之前的同事问到订单这一块(他用的是Laraver)..."多个商品在同一个订单里,怎么将相同的商品放进一个分组"... 当时我和他的反应都是,array_push, arra ...
- Spark环境搭建
转载:https://blog.csdn.net/songhaifengshuaige/article/details/79480491
- MVC ScriptBundle自定义排序。
今天发现MVC的ScriptBundle @Scripts.Render()后是按照我也不知道顺序显示在页面上的,后果就是jquery.min.js被排在了后面(反正我下面那堆默认jquery.min ...
- SSM商城项目(十二)
1. 学习计划 1.购物车实现 2.未登录状态下使用购物车 3.登录状态下使用购物车 2. 购物车的实现 2.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以 ...