zoukankan      html  css  js  c++  java
  • 9.15JavaWeb之ServletConfig接口

    9.15JavaWeb之ServletConfig接口

    什么是ServletConfig对象

    概念:

    • 容器初始化Servlet时为Servlet创建一个ServletConfig对象,将 ServletConfig 对象作为参数传递给 Servlet 。

    作用:

    • 通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。

    特点:

    • 一个Web容器可以存在多个ServletConfig对象

    • 一个Servlet只能对应一个ServletConfig对象

    获取ServletConfig对象

    • 直接从带参的init()方法中提取

    • 调用GenericServlet提供的getServletConfig()方法获取


    从带参的init()方法中获取

    示例代码:

    package ServletPractice;

    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;

    /**
    * 继承httpServlet抽象类,获取init方法里面的参数
    * @since JDk 1.8
    * @date 2021/09/15
    * @author Lucifer
    */
    public class MyServletDemoNo8 extends HttpServlet {
       //Get方法
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
           //设置响应字符集
           response.setContentType("text/html;charset=UTF-8");
           //打印结果
           PrintWriter writer = response.getWriter();
           writer.write("HelloNo8");
           writer.close();
      }

       //Post方法
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
           doGet(request, response);
      }

       //初始化方法
       public void init(ServletConfig config) throws ServletException {
           //从带参的init方法中提取ServletConfig对象
           this.getServletConfig(); //因为HttpServlet继承了抽象类GenericServlet,get方法再GenericServlet当中,所以可以调用
      }
    }
    调用GenericServlet提供的getServletConfig方法
    ServletConfig servletConfig = this.getServletConfig();

    ServletConfig接口

    javax.servlet 包提供了一个 ServletConfig 接口,该接口中提供了以下方法:

    返回值类型方法功能描述
    String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参数值。
    Enumeration<String> getInitParameterNames() 返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。
    ServletContext getServletContext() 返回一个代表当前 Web 应用的 ServletContext 对象。
    String getServletName() 返回 Servlet 的名字,即 web.xml 中 <servlet-name> 元素的值。

    配置Servlet初始化参数

    • 使用web.xml配置初始化参数

    • 使用@WebServlet配置初始化参数


    使用web.xml配置初始化参数

    实现方法:

    • 新增了一个子元素:

      • <init-param>

        • <param-name>

        • <param-value>

    示例xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
       id="WebApp_ID" metadata-complete="false" version="4.0">
       <servlet>
           <servlet-name>MyServlet</servlet-name>
           <servlet-class>net.biancheng.www.MyServlet</servlet-class>
           <!-- Servlet 初始化参数 -->
           <init-param>
               <param-name>name</param-name>
               <param-value>JunkingBoy</param-value>
           </init-param>
           <!-- Servlet 初始化参数 -->
           <init-param>
               <param-name>URL</param-name>
               <param-value>www.JunkingBoy.com</param-value>
           </init-param>
       </servlet>
    </web-app>
    使用@WebServlet配置初始化参数

    特点:

    • initParams是一个属性,相当于一个列表

    • @WebInitParam相当于一个键值对--->key、value的形式

    示例代码:

    package ServletPractice;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;

    /**
    * 使用@WebServlet注释+参数实现配置初始化参数的目的
    * @since JDK 1.8
    * @date 2021/09/15
    * @author Lucifer
    */
    @WebServlet(urlPatterns = "/MyServlet", initParams = {
           @WebInitParam(name = "Name", value = "JunkingBoy"),
           @WebInitParam(name = "URL", value = "www.JunkingBoy.com")
    })
    public class MyServletDemoNo9 extends HttpServlet {
       //设置一个常量--->标记该容器的UID
       private static final long serialVersionUID = 1L;

       //Get方法
       @Override
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           //设置响应字符集
           response.setContentType("text/html;charset=UTF-8");
           //打印内容到控制台
           PrintWriter writer = response.getWriter();
           writer.write("HelloNo9");
           writer.close();
      }

       //Post方法
       @Override
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
           doGet(request, response);
      }
    }

    获取Servlet初始化参数示例

    结合前面提到的知识内容全部一次性过一遍:

    package ServletPractice;

    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebInitParam;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;

    /**
    * 结合前面的Servlet获取Config对象和获取对象信息的知识
    * @since JDK 1.8
    * @date 2021/09/15
    * @author Lucifer
    */
    @WebServlet(urlPatterns = "/MyServletNo10", initParams = {
           @WebInitParam(name = "Name", value = "Jun"),
           @WebInitParam(name = "URL", value = "www.JunkingBoy.com")
    })
    public class MyServletDemoNo10 extends HttpServlet {
       //Get方法
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           //设置响应字符集
           response.setContentType("text/html;charset=UTF-8");
           //打印内容
           PrintWriter writer = response.getWriter();
           writer.write("HelloNo10");

           //开始获取ServletConfig对象
           ServletConfig config = getServletConfig();
           //获取ServletName
           String name = getServletName();
           //返回 servlet 的初始化参数的名称的集合--->使用HttpServlet提供的方法
           Enumeration<String> initParameterName = config.getInitParameterNames();
           //遍历集合获取初始化参数名称--->调用Enumeration接口下提供的方法
           while (initParameterName.hasMoreElements()){
               //获取初始化参数名称
               String initParamName = initParameterName.nextElement();
               //获取相应的初始参数的值
               String initParamValue = config.getInitParameter(initParamName);
               //向页面输出
               writer.write(initParamName + " : " + initParamValue + "<br/>");
          }
           //关闭流
           writer.close();
      }
       /*
       1、掌握这些类当中的方法
       2、正确使用这些接口提供的方法来获取到相应的值
       获取到的是注释当中配置的信息
       通过注释的方法使用Servlet类去打印出注释的内容
        */
    }

     

    It's a lonely road!!!
  • 相关阅读:
    【BZOJ2243】【SDOI2011】染色 (LCT)
    【BZOJ2631】tree (LCT)
    【BZOJ3626】【LNOI2014】LCA (树剖+离线)
    [BZOJ3244][NOI2013] 树的计数
    BZOJ2754 SCOI2012day1T2喵星球上的点名(后缀数组)
    BZOJ2753 SCOI2012day1T1滑雪与时间胶囊(bfs+kruskal)
    Swift
    Library not loaded: @rpath/libswiftCore.dylib
    PHP require include 区别
    Mac OS 下 eclipse中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15308430.html
Copyright © 2011-2022 走看看