zoukankan      html  css  js  c++  java
  • ServletConfig对象和ServletContext对象

      ServletConfig对象是servlet配置对象,(web.xml中的)servlet信息封装在ServletConfig对象中,因此在一个web应用可存在多个ServletConfig。ServletContext对象是servlet上下文对象,而整个web.xml信息封装在ServletContext对象中,因此 一个web应用中只有一个servletcontext对象,可能存在多个servletconfig对象。

    ServletConfig

    创建:在创建完servlet对象之后,在调用init方法之前创建直接从有参数的init方法中得到。

    API:

    1 java.lang.String getInitParameter(java.lang.String name)  根据参数名获取参数值
    2 java.util.Enumeration getInitParameterNames()    获取所有参数
    3 ServletContext getServletContext()     得到servlet上下文对象
    4 java.lang.String getServletName()       得到servlet的名称

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

    如下,我想访问e盘下的某个文件,想通过web.xml中配置,在提交请求到服务器时访问。

    web.xml

    1  <servlet>
    2     <servlet-name>ConfigDemo</servlet-name>
    3     <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
    4     <!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 -->
    5     <init-param>
    6         <param-name>path</param-name>
    7         <param-value>e:/b.txt</param-value>
    8     </init-param>
    9   </servlet>

    ConfigDemo.java

    public class ConfigDemo extends HttpServlet {
        /**
         * 以下两段代码GenericServlet已经写了,我们无需编写!!
         */
        /*private ServletConfig config;*/
        
        /**
         *  1)tomcat服务器把这些参数会在加载web应用的时候,封装到ServletConfig对象中 
         *  2)tomcat服务器调用init方法传入ServletConfig对象
         */
        /*@Override
        public void init(ServletConfig config) throws ServletException {
            this.config = config;
        }*/
        
        
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            /**
             * 读取servlet的初始参数
             */
            String path = this.getServletConfig().getInitParameter("path");
    
            File file = new File(path);
            //读取内容
            BufferedReader br = new BufferedReader(new FileReader(file));
            String str = null;
            while( (str=br.readLine())!=null ){
                System.out.println(str);
            }
    }

    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)  

    在web.xml配置web应用参数,如下:

    <context-param>
            <param-name>AAA</param-name>
            <param-value>AAA's value</param-value>
    </context-param>

    在web.xml中配置了上述的参数,就相当于给整个web添加了一个新属性,那么可以通过ServletContext访问。而上边的在servlet中添加一个<init-param>,相当于某个web应用的某个特定的servlet添加了一个属性,所以只能通过该servlet的ServletConfig访问。下面的例子描述ServletContext如何访问:

    public class ContextDemo2 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //得到SErvletContext对象
            ServletContext context = this.getServletContext();
            
            System.out.println("参数"+context.getInitParameter("AAA"));
            
            Enumeration<String> enums = context.getInitParameterNames();
            while(enums.hasMoreElements()){
                String paramName = enums.nextElement();
                String paramValue  =context.getInitParameter(paramName);
                System.out.println(paramName+"="+paramValue);
            }
            
            //尝试得到ConfigDemo中的servlet参数
            String path = this.getServletConfig().getInitParameter("path");
            System.out.println("path="+path);
        }
    
    }
  • 相关阅读:
    面向对象的三个基本特征
    OGRE启动过程详解(OGRE HelloWorld程序原理解析)
    Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
    windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
    1303: Decimal
    分组背包,每组最多选1个
    椒盐效果
    自我介绍
    题目1539:师弟
    upper_bound()
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7469640.html
Copyright © 2011-2022 走看看