1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法。

即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet。

方法:

  创建一个TestObject.java

  在web.xml中的<servlet></servlet>写<load-on-startup>1</load-on-startup>,数字小的Servlet将先启动。

  再创建一个TestObject2.java,然后在web.xml中写<load-on-startup>2</load-on-startup>

  

    1>在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)

   2>当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,

并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

2.ServletConfig:

    1>在init(ServletConfig config)中的ServletConfig参数是一个接口,这个ServletConfig对象代表一个Servlet

    一个WebApp可以有多个Servlet,每个Servlet对应一个ServletConfig对象,从而每个Servlet的实例是不一样的,即this是不一样的,this指的就是当前这个Servlet。

    而一个WebApp只有一个ServletContext对象,所以所有ServletConfig对象共享一个ServletContext对象。

      总而言之:一个Servlet有一个对应的Config对象,这个对象也是由容器创建给我们的,代表每个Servlet的信息对象(Config就是信息的意思)

           每个Servlet  <1>可以获取初始化参数和ServletContext对象

                   <2>不能获取其他Servlet里面定义的init-param的值(因为跨出了范围)

                   <3>不能获取Context里面定义的init-param的值(因为跨出了范围)

    方法:在web.xml中的<servlet></servlet>写

    <!-- 设置参数 -->
<init-param>
<param-name>coursename</param-name>
<param-value>JAVAWEB</param-value>
</init-param>   

       再建一个TestObject.hava后,在web.xml中加入

<!-- 设置参数 -->
<init-param>
<param-name>filename</param-name>
<param-value>CONFIG</param-value>
</init-param> <load-on-startup>2</load-on-startup>

3.ServletContext:    

    每一个webapp有且只有一个对应的Context对象(也是一个接口),这个对象也是容器创建给我们的,代表每个web应用的上下文环境

    1>可以用来获取context-param初始化参数

    2>不能获取config里面定义的初始化参数

    3>每个Servlet共享同一个context对象(在context里面定义的参数所有Servlet都可以通过context对象去获取)

    4>Context是一个重量级的对象,是Servlet里面最大的缓存,存储在里面的信息可以被所有的Servlet共享

      我们可以在Context看成一个很大的缓存(内存)

      其实可以把Context看成一个容器(集合)

      重要的方法:

        1.setAttribute(java.lang.String name, java.lang.Object object)

        2.getAttribute(java.lang.String name)

        3.removeAttribute(java.lang.String name)

        可以通过上面方法存储对象,使得多有Servlet共享,但是如果不是所有Servlet都需要使用的不要放在Context缓存里面,浪费资源。

4.页面导航(跳转)

  //步骤一.获取转发对象,参数就是调整的url,示例:成功就跳转到success.do
  RequestDispatcher rd = request.getRequestDispatcher("success.do");

  问题:

    1>跳转是使用get方式还是post方式?

      从doGet跳转过来就是doGet,从doPost跳转过来就是doPost

    2>如果想在下一个页面获取前面页面传递的数据?

      a>可以通过ServletContext对象传递数据,

      弊端:所有Servlet里面都有username这个属性值了,因为Context对象对所有Servlet都是共享的。类似于静态共享

      b>String username = pro.getProperty("username");

      可以保存到request对象当中,request属于请求对象,只在请求访问内有效

      request属于请求对象,只在请求访问内有效,比Context小多了

    3>rd.forward(request, response);

      forward的时候请求链没有断开,可以从请求中获取request对象里面存储的数据

      forward可以使用“/”,也可以使用相对路径

        

      RequestDispatcher rd = this.getServletContext().getRequestDispatcher("success.do");

      RequestDispatcher对象也可以从ServletContext对象当中获取

      而从ServletContext当中获取RequestDispatcher只可以使用“/”,建议从request中取,而不从context中取

  

      RequestDispatcher rd = this.getServletContext().getRequestDispatcher("login/success.do");      

      RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/user/test.do");从根目录开始找

      成功,从根目录开始找可以找到

      RequestDispatcher rd = this.getServletContext().getRequestDispatcher("login/success.do");      

      RequestDispatcher rd = this.getServletContext().getRequestDispatcher("user/test.do");从login目录开始找user找不到

      失败

      

      response.sendRedirect("fail.do"); 跳转的时候请求链会断开,不可以从请求中获取request对象里面存储的数据

      如果是超链接的话则请求链断开,不可以从请求中获取request对象里面存储的数据

      forward的时候地址栏显示的是不确定的地址;sendRedirect的时候地址栏显示的是实际跳转的地址

      sendRedirect有一个功能是forward完成不了的,forward只能在本webapp内跳转,但是sendRedirect实现的是和在地址栏里面输入地址一样的操作

    可以将重定向到任一的url上,而不是同一应用程序的url(可以实现单点登陆功能:财务系统、OA系统、仓储系统,即不同的web应用互相访问的时候,只有这一种方式)

    4>rd.include(request, response);

      将下一个页面的结果包含到当前页面,用的少

      

JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext的更多相关文章

  1. JavaWeb学习笔记——开发动态WEB资源(一)Java程序向浏览器输出数据

    开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤: 1.编写一个Java类,实现Servlet接口 开发一个动态web资源必须实现javax.servlet.Ser ...

  2. JavaWeb学习笔记——开发动态WEB资源(五)servlet身份验证

    本工程的功能是实现Javaweb的servlet身份验证 一下是login.html文件中的代码 <!DOCTYPE html> <html> <head> < ...

  3. JavaWeb学习笔记——开发动态WEB资源(二)HelloWord

    该工程的功能是在页面上输出一段话 首先在src里面新建一个class,在interface里面添加javax.servlet.Servlet 以下是HelloServlet.java中的代码: pac ...

  4. JavaWeb学习笔记——开发动态WEB资源(八)cookies和httpsession

    会话: cookies: (1)cookies是WEB服务器发送到浏览器的简短文本信息 (2)cookies可以禁用 httpsession: 一次会话是从你打开浏览器开始到你关闭浏览器结束 提供一种 ...

  5. JavaWeb学习笔记——开发动态WEB资源(七)bookapp

    该工程的功能是实现一个bookapp 1.开发注册页面,注册使用properties文件,存储在classpath跟路径 2.注册成功跳转到登录页面 3.输入用户名密码登录,登录成功跳转到book显示 ...

  6. JavaWeb学习笔记——开发动态WEB资源(四)打印当前使用的是get方法

    该工程的名称是testhttp,功能是在页面中表格打印浏览过程中的相关头信息. 新建一个工程,然后在这个工程里面新建一个servlet,这样便可以省去编写web.xml的过程 以下是TestHttpS ...

  7. JavaWeb学习笔记——开发动态WEB资源(三)显示当前时间

    该工程的功能是实现在页面中显示当前的时间 以下的代码是HelloServlet.java中的代码 package helloapp2; import java.io.IOException; impo ...

  8. Ruby学习笔记4: 动态web app的建立

    Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...

  9. Ruby学习笔记6: 动态web app的建立(3)--多Model之间的交互

    We first built a static site which displayed a static image using only a Controller and a View. This ...

随机推荐

  1. PHP Apache 配置伪静态

    1.首先是开启rewrite_module(如何开启,百度搜索) 2.创建.htaccess文件(如何创建,百度搜索) 3.在.htaccess文件中打开重写服务:RewriteEngine On 4 ...

  2. C# 多线程join的用法,等待多个子线程结束后再执行主线程

    等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = ...

  3. easyui-datagrid 的loader属性用法

    API介绍比较简略: 定义如何从远程服务器加载数据.返回false可以放弃本次请求动作.该函数接受以下参数:param:参数对象传递给远程服务器.success(data):当检索数据成功的时候会调用 ...

  4. [转]Oracle中使用Rownum分页详细例子

    原文地址:http://www.jb51.net/article/52272.htm 在MySQL中,我们通常都使用limit来完成数据集获取的分页操作,而在Oracle数据库中,并没有类似limit ...

  5. [转]如何判断js中的数据类型

    原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...

  6. Android快速开发框架LoonAndroid (转)

    1.源码简介: 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承 ...

  7. ES6新特性:Javascript中的Map和WeakMap对象

    Map对象 Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 : ES6中Map相对于Object对象有几个区别: 1:Object对象有原型, 也就是说他有默认的 ...

  8. JAVA System.getProperty() 与 System.getenv() 差异及示例

    System.getenv() 方法是获取指定的环境变量的值. System.getenv() 接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null. System.getP ...

  9. git初体验(六)git配置

    一.基本配置 看这篇Git 基本配置其实就解决很多问题了. 二.客户端配置 1.git bash 粘贴与编辑 在git bash客户端头部右键,现在属性,然后把"快速编辑模式勾选即可&quo ...

  10. Android中图像变换Matrix的原理、代码验证和应用(三)

    第三部分 应用 在这一部分,我们会将前面两部分所了解到的内容和Android手势结合起来,利用各种不同的手势对图像进行平移.缩放和旋转,前面两项都是在实践中经常需要用到的功能,后一项据说苹果也是最近才 ...