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

原文地址:https://www.cnblogs.com/yfstudy/p/9304586.html