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);

    }

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

你可能感兴趣的:(servletContext)