一、ServletConfig对象

1 、作用

  ServletConfig对象: 主要是用于加载servlet的初始化参数。

在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象);

2、ServletConfig对象的创建和获取

  创建时机: 在创建完servlet对象之后,在调用init方法之前创建。

   得到对象: 直接从有参数的init方法中得到!!!

ServletConfig config=this.getServletConfig();

3、 servlet的初始化参数配置

 <servlet><servlet-name>ConfigDemo</servlet-name><servlet-class>com.gqx.servlet.ConfigDemo</servlet-class><!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 --><init-param><param-name>user</param-name><param-value>gqxing</param-value></init-param></servlet>

Servlet的程序如下

public class ConfigDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取当前ServletConfig对象ServletConfig config=this.getServletConfig();String user=config.getInitParameter("user");System.out.println(user);}
}

注意: servlet的参数只能由当前的这个sevlet获取!!!!

ServletConfig的API:

java.lang.String getInitParameter(java.lang.String name)  根据参数名获取参数值

java.util.Enumeration getInitParameterNames()    获取所有参数

ServletContext getServletContext()     得到servlet上下文对象

java.lang.String getServletName()       得到servlet的名称

//查询当前servlet的所有初始化参数Enumeration<String> enums = this.getServletConfig().getInitParameterNames();while(enums.hasMoreElements()){String paramName = enums.nextElement();String paramValue = this.getServletConfig().getInitParameter(paramName);System.out.println(paramName+"="+paramValue);}//得到servlet的名称String servletName = this.getServletConfig().getServletName();System.out.println(servletName);


二、ServletContext对象

(注意,当你部署一个webapp的时候,想重新换一个名字,在myeclipse中重命名,去访问的时候会无效的,这个时候还要改在tomcat部署webapp下的名称)

1、引入

ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一个ServletContext对象。

2、对象创建和得到

Sun公司设计(直接在Config类中去得到Context对象,然后将其封装成方法返回,这样可以使得Init方法的参数简化,同时使得每一个servlet不易越界,)

1)创建ServletContext对象   ServletContext  context = new ServletContext()                2)创建ServletConfig对象   ServetConfig config = new ServletConfig();config.setServletContxt(context);class  ServletConfig{ServletContext context;public ServletContext getServletContxt(){return contxt;}}public void init( ServletConfig config ){得到ServletConfig对象 从ServletConfig对象中得到ServletContext对象SerlvetContext context = config.getServletContext();}

最终可以写成如下形式

//获取当前web应用环境下的ServletContext对象
ServletContext context=this.getServletContext();

三、ServletContext对象的核心API(作用)

       java.lang.String getContextPath()   --得到当前web应用的路径java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数java.util.Enumeration getInitParameterNames()void setAttribute(java.lang.String name, java.lang.Object object) --域对象有关的方法java.lang.Object getAttribute(java.lang.String name) void removeAttribute(java.lang.String name) RequestDispatcher getRequestDispatcher(java.lang.String path)   --转发(类似于重定向)java.lang.String getRealPath(java.lang.String path)     --得到web应用的资源文件java.io.InputStream getResourceAsStream(java.lang.String path)  

示例如下:

1、

public class ServletDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取当前web应用环境下的ServletContext对象ServletContext context=this.getServletContext();//得到web应用的路径,用在请求重定向的资源名称中String path=context.getContextPath();System.out.println(path);//请求重定向 (一般与上面的路径一起用)response.sendRedirect(path+"/index.html");}
}

2、

<!--在servlet中配置初始化参数-->
<context-param><param-name>driver</param-name><param-value>com.mysql.jdbc.Driver</param-value>
</context-param><context-param><param-name>jdbcUrl</param-name><param-value>jdbc:mysql:///atguigu</param-value>
</context-param>

获取初始化参数

public class ContextDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取当前web应用环境下的ServletContext对象ServletContext context=this.getServletContext();String string=context.getInitParameter("driver");System.out.println("参数driver的值为:"+string);System.err.println("--------------");//获取全部的参数及其值Enumeration<String> enus=context.getInitParameterNames();while (enus.hasMoreElements()) {String str = (String) enus.nextElement();String value=context.getInitParameter(str);System.out.println(str+":"+value);}}
}

效果如下

web应用参数可以让当前web应用的所有servlet获取!!!

3、域对象有关的方法

域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。

ServletContext就是一个域对象!!!!

相关api

  保存数据:void setAttribute(java.lang.String name, java.lang.Object object)

获取数据: java.lang.Object getAttribute(java.lang.String name)

删除数据: void removeAttribute(java.lang.String name)

问题:当我们想把数据从一个servlet发送到另一个servlet时,该怎么办?

方案一:

可以通过传递参数的形式,共享数据。局限:只能传递字符串类型。

response.sendRedirect("/Servlet2?name=gqxing")    //发送数据  String request.getParameter("name");      //接受数据

这个时候可以用到域对象

package com.gqx.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** 发送端* @author Administrator**/
public class ContextDemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//得到域对象ServletContext context=this.getServletContext();//把保存的数据放到域对象中context.setAttribute("student", new Student("gqx",21));System.out.println("保存成功!");//context.setAttribute("user", "gqxing");}}class Student{private String nameString;private int age;public String getNameString() {return nameString;}public void setNameString(String nameString) {this.nameString = nameString;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student(String nameString,int age){this.nameString=nameString;this.age=age;}@Overridepublic String toString() {return "Student [nameString=" + nameString + ", age=" + age + "]";}}

package com.gqx.servlet;import java.io.IOException;
import java.io.PrintWriter;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 ContextDemo3 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.得到域对象ServletContext context = this.getServletContext();//2.从域对象中取出数据//String name = (String)context.getAttribute("name");Student student = (Student)context.getAttribute("student");//System.out.println("user="+name);System.out.println(student);}}

转发

RequestDispatcher getRequestDispatcher(java.lang.String path)

1)转发

a)地址栏不会改变

b)转发只能转发到当前web应用内的资源

c)可以在转发过程中,可以把数据保存到request域对象中

2)重定向

a)地址栏会改变,变成重定向到地址。

b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。

c)不能再重定向的过程,把数据保存到request中。

结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!

/*** 转发(效果:跳转页面)**/
public class ForwardDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*** 保存数据到request域对象*/request.setAttribute("name", "gqxing");//转发    /*** 注意:不能转发当前web应用以外的资源。*/this.getServletContext().getRequestDispatcher("/GetDateServlet").forward(request, response);}}

public class RedirectDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*** 保存数据到request域对象*/request.setAttribute("name", "rose");//重定向/*** 注意:可以跳转到web应用内,或其他web应用,甚至其他外部域名。*///response.sendRedirect("/day09/adv.html");response.sendRedirect("/day10/GetDataServlet");}}

public class GetDataServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*** 从request域对象中获取数据*/String name = (String)request.getAttribute("name");System.out.println("name="+name);}}

转载于:https://www.cnblogs.com/zhangyubao/p/6973772.html

ServletContext和ServletConfig相关推荐

  1. 【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善

    总结:request.cookie.session.context的区别 这四个对象有不同级别的作用域和生命周期. (1)request:解决了一次请求内的数据共享问题(作用域:一次请求) req.s ...

  2. ServletContext、ServletConfig(FilterConfig)学习笔记

    ServletConfig 每个servlet对应一个ServletConfig对象,不可以被其他servlet访问. 作用: 1.通过下面防范访问web.xml文件: ServletConfig.g ...

  3. 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式

    Response.ServletConfig.ServletContext.资源跳转三种方式 - (一)Response 一.Response概述 在doGet和doPost方法的参数中,HttpSe ...

  4. 【JavaLearn】(24)Session、Cookie、ServletContext、MVC开发模式、JSP九大内建对象及四个作用域、JSTL及EL表达式、过滤器、监听器

    目录 1. session和cookie 1.1 session和cookie原理 1.2 cookie-实现10天免登录 1.3 session-实现记住用户名 2. servletContext ...

  5. 适配器(GenericServlet)改造Servlet

    JavaWeb系列教程 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造Servle ...

  6. JSP 三 :九大隐式对象

    2019独角兽企业重金招聘Python工程师标准>>> ###细节 每个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JS ...

  7. Spring Boot启动过程(二)

    书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractAppl ...

  8. [Spring mvc 深度解析(一)] 详解Servlet

    详解Servlet ​ Servlet是Server+Applet的缩写,表示一个服务器应用.通过上面的分析我们知道Servlet其实就是一套规范,我们按照这套规范写的代码就可以直接在Java的服务器 ...

  9. 从模板方法模式到JDBCTemplate

    将大象装进冰箱需要三步,那么老虎了?如何优雅的将大象装进冰箱? 把大象装进冰箱 Step 大象 老虎 ... First 打开冰箱门 打开冰箱门 打开冰箱门 Second 把大象放进去 把老虎放进去 ...

  10. JSP学习——语法(二)

    1:JSP运行原理和九大隐式对象: 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一 ...

最新文章

  1. 妙用QTP F1帮助功能
  2. python 脚本_python脚本如何同时运行多个
  3. rest-framework 解析器
  4. Mahout学习路线图
  5. 2019年参加迅雷链宣讲会日记
  6. utf—8在苹果手机上乱码_UTF-8中文乱码怎么去解决
  7. mac --snip 滚动截屏
  8. 使用Docker 安装jdk8
  9. 《算法分析》——布线问题
  10. 计算机上word如何批量打印,Word2010怎样批量打印证书
  11. 存储器管理的内存连续分配方式详解
  12. 互联网赚钱:一个抖音小项目,分析下,人人都能做
  13. Photoshop调出花朵照片复古冷色效果
  14. 任志远先生,庄振宏先生就任新加坡区块链技术基金会理事
  15. 第39课 程序中的三国天下
  16. win2008r2hpc无盘服务器配置,机房无盘系统服务器配置
  17. Python求数组的自然间断点
  18. 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
  19. java 导出excel教程,[Java教程]导出大量数据到Excel的一种方式
  20. React + antd导入表格

热门文章

  1. GridView冻结列的实现
  2. (转)ASP.NET程序中常用代码汇总
  3. SqlServer智能提示工具
  4. SqlServer2005海量数据存储过程分页(上)
  5. MYSQL MVCC实现机制
  6. centos7上克隆虚拟机后设置静态IP无效的解决方法
  7. Android四大组件之Activity组件
  8. 堆排序(java实现)
  9. oracle esb 灾备,两地三中心双活系统灾备切换场景和数据补录问题?
  10. python运行系统_python执行系统命令的方法