ServletConfig和ServletContext的使用

(一)ServletConfig的使用

1.ServletConfig:当Tomcat初始化一个Servlet时,会将Servlet配置信息封装到ServletConfig对象中去。再通过ServletConfig对象获取配置信息(web.xml)。

2.ServletConfig的常用方法

  • String getInitParameter(String name):获取属性的值
  • Enumeration getInitParameterNames():获取所有初始化属性名
  • ServletContext getServletContext():获取ServletContext对象
  • String getServletName():获取Servlet的名称

    3.代码演示

1.创建 TestServlet01类
package com.haha;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
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("/TestServlet01")
public class TestServlet01 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        // 2.创建ServletConfig对象用于读取数据
        ServletConfig config = this.getServletConfig();
        // 3.读取编码数据
        String str = config.getInitParameter("enconding");
        ServletContext context = config.getServletContext();
        String servletName = config.getServletName();
        out.println("enconding=" + str);
        out.println("conetext=" + context);
        out.println("=" + servletName);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }

}


----------
2.在web.xml文件中配置 TestServlet01
"1.0" encoding="UTF-8"?>
"http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  ServletDemo
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
   
      qq
      com.haha.TestServlet01
    
         enconding
         UTF-8
    
  
  
    qq
    /fuck
  

4.输出结果

![这里写图片描述](https://img-blog.csdn.net/20170914230137194?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM2Mjc5MzE4/font
/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

(二)ServletContext的使用

1.ServletContext的作用:读取web.xml文件中的数据


<web-app id="WebApp_ID" version="3.0"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <display-name>ServletDemodisplay-name>
 <servlet>
  <servlet-name>qqservlet-name>
  <servlet-class>com.haha.TestServlet02servlet-class>

 servlet>
 <context-param>
    <param-name>nameparam-name>
    <param-value>kainaparam-value>

 context-param>
 <context-param>
    <param-name>addressparam-name>
    <param-value>changshaparam-value>

 context-param>
 <servlet-mapping>
  <servlet-name>qqservlet-name>
  <url-pattern>/fuckurl-pattern>
 servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.htmlwelcome-file>
  <welcome-file>index.htmwelcome-file>
  <welcome-file>index.jspwelcome-file>
  <welcome-file>default.htmlwelcome-file>
  <welcome-file>default.htmwelcome-file>
  <welcome-file>default.jspwelcome-file>
 welcome-file-list>
web-app>


----------
package com.haha;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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("/TestServlet01")
public class TestServlet02 extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

        response.setCharacterEncoding("text/html;charset=gbk");
        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        //2.创建ServletContext对象
        ServletContext context = this.getServletContext();
        //3.获取参数名
        Enumeration<String> paramNames = context.getInitParameterNames();
        //4.遍历参数名,获取 参数值
        while(paramNames.hasMoreElements()){
            String name=paramNames.nextElement();
            String value=context.getInitParameter(name);
            out.println(name+":"+value);


        }


    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }

}

2.ServletContext实现多个Servlet对象共享数据

package com.haha;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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("/TestServlet01")
public class TestServlet02 extends HttpServlet {
    private static final long serialVersionUID = 1L;

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


        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        //2.创建ServletContext对象
        ServletContext context = this.getServletContext();
        //3.设置属性和属性值
        context.setAttribute("name","Hello");


    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }

}


----------
package com.haha;

import java.io.IOException;
import java.io.PrintWriter;

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("/TestServlet03")
public class TestServlet03 extends HttpServlet {
    private static final long serialVersionUID = 1L;


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

        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        // 2.创建ServletContext对象
        ServletContext context = this.getServletContext();
        //3.通过属性名获取属性值
        String str = (String) context.getAttribute("name");
        out.println("name="+str);

    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}

3.ServletContext读取web应用上下文的资源文件

常用方法:

  1. Set getSourcePaths(String path)
  2. String getRealPath(Strng path)
  3. URL getSource(String path)
  4. getSourceAsStream(String path)

    4.项目结构图

    ServletConfig和ServletContext的使用_第1张图片

5.代码演示

package com.haha;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Properties;

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("/TestServlet08")
public class TestServlet08 extends HttpServlet {
    private static final long serialVersionUID = 1L;


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

        response.setContentType("text/html,charser=utf-8");
        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        // 2.创建ServletContext对象
        ServletContext context = this.getServletContext();
        //3.获取相对路径的输入流,也可以获取绝对路径 
        InputStream in = context.getResourceAsStream("/WEB-INF/classes/testSource");

        Properties p=new Properties();
        p.load(in);
        out.println("name="+p.getProperty("name"));
        out.print("dept="+p.getProperty("dept"));

    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}


----------
"1.0" encoding="UTF-8"?>
"http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  ServletDemo

  
    wwww
    com.haha.TestServlet08
  

  
    wwww
    /kakaka
  
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
 

6.输出结果

ServletConfig和ServletContext的使用_第2张图片

你可能感兴趣的:(ServletConfig和ServletContext的使用)