zoukankan      html  css  js  c++  java
  • JavaWeb(一)-Servlet中的Config和Context

    一、ServletConfig对象

    1.1获取一个servletConfig对象

    1)通过初始化方法获得一个servletconfig

    2)通过继承父类(GenericServlet.)得到一个servletconfig对象

    1.2servletConfig对象的作用

    1)getServletName():返回servlet实例的名称

    2)getServletContext():获取一个servletContext对象

    3)getInitParameter(String):获取servlet中初始化参数的值。

     1.3config使用

    在servlet的web.xml配置文件中,可以在配置文件中生成一个<init-param>标签为servlet设置一些初始化参数,这里需要写上映射路径,不然资源显示不可用。

    <servlet>
        <servlet-name>test4</servlet-name>
        <servlet-class>Config.ServletConfigDemo1</servlet-class>
          <init-param>
            <param-name>name1</param-name>
            <param-value>gucci</param-value>
         </init-param>
         <init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
        </init-param>
        <init-param>
             <param-name>charset</param-name>
             <param-value>UTF-8</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>test4</servlet-name>
          <url-pattern>/ConfigDemo</url-pattern>
      </servlet-mapping>
    View Code

    当我们在servlet的配置文件设置了之后,web容器在创建servlet实例对象后,会自动将这些初始化参数封装到servletconfig对象中,并调用servlet中的

    init方法,将servletconfig对象传给servlet。然后我们通过servletconfig对象就可以获得这些初始化参数。

    package Config;
    
    import java.io.IOException;
    import java.util.Enumeration;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ServletConfigDemo1 extends HttpServlet {
    
        /**
         * 定义ServletConfig对象来接收配置的初始化参数
         */
        private ServletConfig config;
        
        /**
         * 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,
         * 会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,
         * 将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以
         * 得到当前servlet的初始化参数信息。
         */
        @Override
        public void init(ServletConfig config) throws ServletException {
            this.config = config;
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //获取在web.xml中配置的初始化参数
            String paramVal = this.config.getInitParameter("name1");//获取指定的初始化参数
            response.getWriter().print(paramVal);
            
            response.getWriter().print("<hr/>");
            //获取所有的初始化参数
            Enumeration<String> e = config.getInitParameterNames();
            while(e.hasMoreElements()){
                String name = e.nextElement();
                String value = config.getInitParameter(name);
                response.getWriter().print(name + "=" + value + "<br/>");
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.doGet(request, response);
        }
    
    }
    View Code

    运行结果如图:

    二、servletconfig对象

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

      servletconfig对象中维护了servletcontext对象的引用。在编写servlet时,可以通过servletconfig.getservletcontext方法获得servletcontext对象。

      由于一个web应用中所有的servlet共用一个servletcontext对象,因此servlet对象之间可以通过servletcontext对象来实现通讯,servletcontext对象也通常

    被称为域对象。

    三、servletcontext的应用

    3.1多个servlet通过servletcontext对象实现数据共享

    package Test1;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/ServletContextDemo1")
    public class ServletContextDemo1 extends HttpServlet{
    
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
            context.setAttribute("name", "duck");
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    View Code
    package Test1;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/ServletContextDemo2")
    public class ServletContextDemo2 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = this.getServletConfig().getServletContext();
    //        获取设置在servletcontext中保存好的参数
            String name = (String)context.getAttribute("name");
            resp.getWriter().print(name);
            System.out.println(name);
    
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
        }
    }
    View Code

    removeAttribute(String name):也可以通过名称来移除内容

    3.2获取全局配置信息和获取web项目资源

    package Test1;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    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 ServletContextDemo3
     */
    @WebServlet("/ServletContextDemo3")
    public class ServletContextDemo3 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
    //        利用servletcontext获取web.xml文件中设置的初始化参数
            String str = context.getInitParameter("encoding");
            response.getWriter().print(str);
            response.getWriter().print("<br/>");
    //        根据资源名得到资源的决定路径
            String path = context.getRealPath("/WEB-INF/web.xml");
            response.getWriter().print(path);
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    View Code

    3.3用servletcontext实现请求转发

    package Test1;
    
    import java.io.IOException;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    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 ServletContextDemo6
     */
    @WebServlet("/ServletContextDemo6")
    public class ServletContextDemo6 extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ServletContextDemo6() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletContext sc = this.getServletContext();
            RequestDispatcher rs = sc.getRequestDispatcher("/ServletContextDemo2");
    //        将请求信息向下传递
            rs.forward(request, response);
        }
    
        /**
         * @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);
        }
    
    }
    View Code

    3.4利用servletcontext读取资源文件

    package Test1;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.MessageFormat;
    import java.util.Properties;
    
    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 ServletContextDemo4
     */
    @WebServlet("/ServletContextDemo4")
    public class ServletContextDemo4 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
             * response.setContentType("text/html;charset=UTF-8");
             * 目的是控制浏览器用utf-8进行解码,这样就不会出现中文乱码了
             */
            response.setHeader("content-type", "text/html;charaset=UTF-8");
            read(response);
        }
        public void read(HttpServletResponse response) throws IOException {
    //        获取在src下面的文件
            InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/Test1/db.properties");
    //    创建一个properties
            Properties prop = new Properties();
    //        加载字节流
            prop.load(in);
            String driver = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String username = prop.getProperty("username");
            String password = prop.getProperty("password");
    //        设置好输出格式
            response.getWriter().print(
                    MessageFormat.format("driver={0},url={1},username={2},password={3}", 
                            driver,url,username,password)
                    );
        }
    
        /**
         * @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);
        }
    
    }
    View Code
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql//localhost3306//test
    username=root
    password=root
    View Code

    3.5使用servletcontext读取指定路径下的所有内容

    package Test1;
    
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.Set;
    
    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 ServletContextDemo5
     */
    @WebServlet("/ServletContextDemo5")
    public class ServletContextDemo5 extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ServletContextDemo5() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //        获取指定路径下的所有内容    
            Set set = this.getServletContext().getResourcePaths("/WEB-INF");
            Iterator iterator = set.iterator();
            while(iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
        /**
         * @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);
        }
    
    }
    View Code

  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/yfstudy/p/9304586.html
Copyright © 2011-2022 走看看