• 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

  • 相关阅读:
    redis限流器的设计
    使用HystrixCommand封装http请求
    自定义的最简单的可回调的线程任务CallbackableFeatureTask(模仿google的ListenableFutureTask)
    通用的规则匹配算法(原创)(java+.net)
    redis缓存切面实现(支持缓存key的spel表达式)
    使用join和CountDownLatch来等待线程结束
    shell日常实战练习——通过监视用户登陆找到入侵者
    Nginx web服务器
    nginx——防盗链功能
    nginx 隐藏nginx版本号
  • 原文地址:https://www.cnblogs.com/yfstudy/p/9304586.html
Copyright © 2020-2023  润新知