• servlet ServletConfig ServletContext


    ServletConfig对象

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

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

    配置文件web.xml中某个<servlet></servlet>中间有这么一段:

    <init-param>

      <param-name>data</param-name>

      <parm-value>xxxxx</param-value>

    <init-param>

    <!--<load-on-startup>2</load-on-startup>-->

    那么该servlet实例化的时候会把这些内容一起加载。

    servlet中的代码(复写了init):

    ……entends HttpServlet{

      private ServletConfig config;

    ……doGet……

      String value = config.getInitParameter("data");//得到xxxxx

    ……

    ……doPost……

      

    public void init(ServletConfig config)throws ServletExceptio{

      //super.init(config);

      this.config = config;

    }

    其实父类HttpServlet的父类GenericSrvlet中已经定义了这么个私有的东西,并在其init方法中获取了。还提供了一个获取方法:

    public ServletConfig getServletConfig(){

      return config;

    }

    我们可以在自己的类中直接用这个方法获得。

    得到所有:

    Enumeration e = this.getServletConfig().getInitParameterNames();

    whie(e.hasMoreElements()){

      String name = (String)e.nexElement();

      String value = this.getServletConfig().getInitParameter(name);

    }

    用到的场合。

    比如:

    解码方式可以配置一个

    <init-param>

      <param-name>charset</param-name>

      <param-value>UTF-8</param-value>

    </init-param>

    ServletContext

    web容器在启动时,它会为每个web应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

    ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

    获取方式:

    方式一,

    ServletContext context = this.getServletConfig().getServletContext();

    方式二,

    context = this.getServletContext();

    ServletContext的应用:

    由于一个web应用中所有的Servlet共享同一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享。

    ServletContext对象通常也称之为context对象。

    域:范围。 context域对象:作用范围是整个应用程序的对象。除此之外还有request session page域对象。

    一个Servlet1中有如下代码:

    String data ="aaa";

    this.getServletContext().setAttribute("data",data);

    另一个Servlet2中有如下代码:

    String value = (String)this.getServletContext().getAttribute("data");

    当Servlet1执行过,Servlet2就可以获取aaa。

    比如聊天室就可以用这个servltContext。

    web.xml中的<web-app></web-app>中间可以有这么一段:

    <context-param>

      <param-name>data</param-name>

      <param-value>xxxx</param-value>

      <param-name>data2</param-name>

      <param-value>xxxx2</param-value>

    </context-param>

    加载该web应用就会自动把该参数加载。

    在程序中获取:

    this.getServletContext().getInitParameterNames();和ServletConfig类似。

    在配置文件中配置改起来很方便。如果在程序中改要改代码,重新编译比较麻烦。

      

    ServletContext还实现了Servlet的转发:

    String data = "abc";

    data = "<meta http-equiv='fresh' content='3;url=/myweb/index.jsp'>3秒后将跳转";

    //this.getServletContext().setAttribute("data",data);由于servlet是单例子的,所以这样有可能最后加进去的data是bcd而非abc,所以这种设置全局的方式不要采用

    //不过可以在jsp页面通过获取全局某个属性的方式显示这个data:<% String str = (String)Applcation.getAttribute("data");out.write(str); %>

    RequestDispatcher rd = this.getServletContext().getRequestDispatcher("1.jsp");

    rd.forward(request,response);//页面将转至1.jsp页面,与重定向不同,这样仅请求了一次服务器,而重定向是两次。

    Servletcontext读取资源文件.properties文件:

    关于properties文件:

    properties和xml都是资源文件,不同之处是xml一般用来存有关系的数据,而properties文件则存放类似用户名、密码、数据库连接地址之类没有关系的数据。

    properties文件内容样例:

    url=jdbc:mysql://localhost:3306/test

    username=admin

    password=admin

    如上面所写要带个等号。

    下面写一下

      Servletcontext读取资源文件代码示例:

    Inputstream in = this.getServletContext().getResourceAdStrem("/db.properties");

    关于这个相对路径的书写,用context读取,相对路径中的第一个"/"表示web应用目录。例如,你在开发的时候把properties放在src下,那么部署到服务器后会出现在“根目录/WEB-INF/classes/”下,这个时候应该写“/WEB-INF/classes/xx.properties”。如果直接用读取流,那么相对路径就变成了启动Tomcat服务器的目录,即Tomcat下的bin目录。

    Properties props = new Properties();//map

    props.load(in);

    String url = props.getProperty("url");//获取键值

    更多内容参见API

  • 相关阅读:
    [NOI2015]程序自动分析
    D-query(莫队)
    小B的询问
    组合的输出 (dfs+记忆化)
    组合的输出 (dfs+记忆化)
    5719: 集合的划分(dfs)
    Search for a range, 在一个可能有重复元素的有序序列里找到指定元素的起始和结束位置
    Find Min In Rotated Sorted Array2,包含重复数字的反转序列找最小值。
    Find Min In Rotated Sorted Array,寻找反转序列中最小的元素。
    Search In Rotated SortedArray2, 有重复数据的反转序列。例如13111.
  • 原文地址:https://www.cnblogs.com/flying607/p/3450129.html
Copyright © 2020-2023  润新知