• java学习笔记—ServletConfig、ServletContext接口(13)


    ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象。

    该对象主要描述的时候一个servlet的配置信息。

    如:

    <servlet>         配置一个servlet
         <servlet-name>helloservlet</servlet-name>  指定servlet的名字(任意)
          指定servlet具体的类的全限定名(包名.类名)
         <servlet-class>cn.itcast.servlets.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>         映射一个servlet
         <servlet-name>helloservlet</servlet-name>  需要映射的servlet名
         <url-pattern>/helloservlet</url-pattern>      浏览器需要访问的路径
    </servlet-mapping>

    以上配置就是一个servlet的配置信息,如果开发者需要获取其中的数据,那么tomcat已经创建好的ServletConfig接口对象来方面开发者获取信息。

    举例1:获取指定servlet的配置的名字。

    public class Demo1 extends HttpServlet {
        private ServletConfig config = null;
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取servlet的配置名
            String name = this.config.getServletName();
            response.getOutputStream().write(name.getBytes());
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
        // 重写init方法
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            this.config = config;
        }
    }

    举例2:获取servlet的配置参数。

    在实际的编程过程中需要将所有可变的数据封装到配置文件中去,这样便于软件的后期的维护。Android。

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

            // 获取servlet的配置名

            String name = this.config.getServletName();

            response.getOutputStream().write(name.getBytes());

            // 获取配置参数

            String ip = this.config.getInitParameter("ip");

            String dbtype = this.config.getInitParameter("dbtype");

            response.getOutputStream().write("<br/>".getBytes());

            response.getOutputStream().write((ip+" , "+dbtype).getBytes());

            // 使用循环获取所有的配置参数

            Enumeration<String> names = this.config.getInitParameterNames();

            while(names.hasMoreElements()){

            String ini_name = names.nextElement();

            String ini_value = this.config.getInitParameter(ini_name);

            response.getOutputStream().write((ini_name+"="+ini_value+"<br/>").getBytes());

            }

        }

    总结:发现tomcat创建并传递过来的servletconfig对象接收比较繁琐。

    // 获取servletconfig对象
    ServletConfig config = this.getServletConfig();
    System.out.println(this.config == config);

    为了方便开发者获取servletconfig对象,那么HttpServlet直接提供了getServletConfig(),

    两种方式获取的对象是同一个对象。

    ServletContext接口

    ServletContext接口对象主要实现的是servlet之间的通信。该对象可以和web服务器进行通信。转发请求。

    ServletContext接口是对网站的抽象描述。一个ServletContext代表一个web应用(网站)。

    该对象是由Tomcat创建出来连同ServletConfig对象一并通过初始化方法传递过来的。

    1实现servlet的通信

    1. 放数据

      // 获取ServletContext对象
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
           ServletContext context1 = this.getServletConfig().getServletContext();
           ServletContext context2 = this.getServletContext();
           System.out.println(context1 == context2);   // true
           // 主要作用之一是实现servler之间的数据通信
           context1.setAttribute("news_title", "北京的灰霾天气");
        }

    2. 取数据

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
           String name = (String) this.getServletContext().getAttribute("news_title");
           response.getOutputStream().write(name.getBytes());
        }

    2 实现服务器通信

        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
           // 和tomcat进行通信获取MIME类型
          ServletContext context = this.getServletContext();
          String type = context.getMimeType("/jnb.doc");
          System.out.println(type);
        }

    1  获取网站资源(重点)

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            // 获取网站对象
            ServletContext context = this.getServletContext();
            // 获取网站中的静态资源
            InputStream in = context.getResourceAsStream("/123.bmp");
            // 获取输出流
            FileOutputStream out = new FileOutputStream(new File("d:/123.bmp"));
            // 边读 边写
            byte[] bs  = new byte[1024];
            int len = 0;
            while((len = in.read(bs)) != -1){
                out.write(bs, 0, len);
                out.flush();
            }
            // 释放资源
            in.close();
            out.close();
        }

    3请求转发

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            // 获取网站对象
            ServletContext context = this.getServletContext();
            // 转发
            System.out.println("不好意思没钱!,找老汤去....");
            context.getRequestDispatcher("/lt").forward(request, response);
        }

    请求转发:请求转发是服务器自己做的事情,那么在客户端是展现不出来的,因此浏览器的地址栏是不发生变化的。

  • 相关阅读:
    PHP实现URL长连接转短连接方法总结
    session共享原理以及PHP 实现多网站共享用户SESSION 数据解决方案
    session跨域共享解决方案
    MySQL 对于千万级的大表要怎么优化?
    防sql注入方法
    MYSQL性能优化分享(分库分表)
    mysql 分库分表
    mysql 性能优化方案
    MYSQL 优化常用方法
    第一站---大连---看海之旅
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4360808.html
Copyright © 2020-2023  润新知