JavaEE中关于ServletConfig的小结

在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
示例代码如下:

代码如下:

package com.yyz.servletconfig;
 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 config;
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
       //获取指定的初始化参数
         String value = config.getInitParameter("xxx");
         response.getOutputStream().write(value.getBytes());
         //获取所有的初始化参数
         Enumeration e = cofig.getInitParameterNames();
         while(e.hasMoreElements()){
             String name = (String) e.nextElement();
             value = config.getInitParameter(name);
             response.getOutputStream().write((name+"="+value+"<br/>").getBytes());
         }
     }
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         doGet(request,response);
     }
     @Override
     public void init(ServletConfig config) throws ServletException {
         this.config = config;
     }
 }

相应的web.xml如下:

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
 
 <web-app 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_2_5.xsd"
     version="2.5">
   <servlet>
   
     <servlet-name>ServletConfigDemo1</servlet-name>
     <servlet-class>com.yyz.servletconfig.ServletConfigDemo1</servlet-class>
     <init-param>
                <param-name>xxx</param-name>
                <param-value>yyy</param-value>
     </init-param>
       <init-param>
                <param-name>name</param-name>
                <param-value>yyz</param-value>
     </init-param>
       <init-param>
                <param-name>password</param-name>
                <param-value>yyy</param-value>
     </init-param>
   </servlet>
  <servlet-mapping>
     <servlet-name>ServletConfigDemo1</servlet-name>
     <url-pattern>/servlet/ServletConfigDemo1</url-pattern>
  
   </servlet-mapping>
 </web-app>

测试结果如下:

在上面的代码中,ServletConfigDemo1对象中有一个ServletConfig对象,其实这是不必要的。因为ServletConfigDemo1继承了HttpServlet,HttpServlet又继承了GenericServlet 。GenericServlet 已经在内部维护了一个ServletConfig对象。相关实现如下:

代码如下:

public abstract class GenericServlet
     implements Servlet, ServletConfig, java.io.Serializable
 {
     …    …
 private transient ServletConfig config;
 public ServletConfig getServletConfig() {
           return config;
     }
 }

因而我们可以通过我们写的Servlet对象的getServletConfig()方法直接拿到ServletConfig对象,示例代码如下:

代码如下:

package com.yyz.servletconfig;
 
 import java.io.IOException;
 import java.io.PrintWriter;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 public class ServletConfigDemo2 extends HttpServlet {
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
         String value = this.getServletConfig().getInitParameter("name");
         System.out.println(value);
 }
 
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
         doGet(request, response);
     }
 
 }

web.xml文件:

代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 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_2_5.xsd"
    version="2.5">
 <servlet>
    <servlet-name>ServletConfigDemo2</servlet-name>
    <servlet-class>com.yyz.servletconfig.ServletConfigDemo2</servlet-class>
     <init-param>
               <param-name>name</param-name>
               <param-value>yyz</param-value>
    </init-param>
  </servlet>
 <servlet-mapping>
    <servlet-name>ServletConfigDemo2</servlet-name>
    <url-pattern>/servlet/ServletConfigDemo2</url-pattern>
  </servlet-mapping>
</web-app>

(0)

相关推荐

  • 有关ServletConfig与ServletContext的访问

    一般来说,对于整个应用的配置,为了不使用"硬编码",应该使用ServletContext对象. 而如果只有一个特定的Servlet需要设定的参数,其他Servlet不能访问,那么一般要使用ServletConfig(); PS: 在使用ServletConfig对象的时候,在init()方法中,一定要用super类初始化ServletConfig对象. public void init(ServletConfig config) throws ServletException { su

  • 浅析javax.servlet.Servlet,ServletContext接口

    1.ServletConfig接口用于描述Servlet本身的相关配置信息.ServletContext接口用于描述应用程序(server.xml中的一个Context配置,即一个虚拟目录)的相关信息.2.Servlet配置初始化参数,例如: 复制代码 代码如下: <servlet> <servlet-name>XXX</servlet-name> <servlet-class>Xxx</servlet-class> <init-param

  • JavaEE中关于ServletConfig的小结

    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,ServletConfig对象传递给servlet.进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息. 示例代码如下: 复制代码 代码如下: package com

  • 详解JavaEE中Apollo安装使用小结

    目录 一.安装MySQL5.7.37(主机:192.168.233.128,用户/密码:root): 二.Apollo安装/启动(centos7)(主机:192.168.233.128): 三.Web应用接入Apollo(SpringBoot): 说明: Apollo是配置管理中心,和SpringCloud-Config实现的功能有点相似. 一.安装MySQL 5.7.37(主机:192.168.233.128,用户/密码:root): 1.下载mysql-5.7.37-1.el7.x86_64

  • 关于javascript中dataset的问题小结

    DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关.与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路. 一.关于dataset 1.html5自定义属性及基础 html5

  • C#中的Internal关键字小结

    首先,理清几个概念:项目(project).解决方案(solution).程序集(assembly).命名空间(namespace). 项目(project)  就是我们开发的一个软件..NET下,项目有多种类型,如控制台.Windows应用程序.类库.Web应用程序等等.经过编译后,会生成.exe文件和.dll文件. .exe文件有统一的主程序入口,可以被执行,而类库只是提供一些功能给其他项目调用. 解决方案(solution)  当我们在VS中新建任何一种类型的项目时,这个项目还属于一个解决

  • webpack中CommonsChunkPlugin详细教程(小结)

    本文介绍了webpack中CommonsChunkPlugin详细教程(小结),分享给大家,也给自己留个笔记,具体如下: 1.demo结构: 2.package.json配置: { "name": "webpack-simple-demo", "version": "1.0.0", "description": "", "main": "index.js&q

  • vue+element项目中过滤输入框特殊字符小结

    可以在main.js中写入方法 Vue.prototype.validSe = function (value, number = 255) { value = value.replace(/[`-*~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~!@#¥%--&*()--\-+={}|<>?:""[].:'',..]/g, '').replace(/\s/g, ""); if (value.

  • 浅谈C语言中的注释风格小结

    C语言中常用的注释风格有两种,一种是通过如下模式进行一段代码的注释: /* comment*/ 另一种是单行注释符号: // comment 学生时代的注释我一般是选用后者,那时候编码量十分有限,即使是简单的小段落注释使用的IDE也支持批量添加单行注释符.而在编码之中,简单的单行注释进行注释的时候键盘的操作更为简单一点. 不过,工作之后接触了相应的编码规范之后,C语言的注释我基本上放弃了单行注释的方法,最多仅仅在调试的时候做简单的使用. 其实,单行注释是从C++中借鉴来的,算是C++风格的注释方

  • C/C++中的内存管理小结

    前言 我们最初熟知的内存开辟方式: int val = 20: 在栈空间上开辟4个字节 char array[10]: 在栈空间上开辟10个字节的连续空间 上述开辟空间的方式有两个特点: 空间开辟大小是固定的. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配. 但是对于空间的需求,不仅仅是上述的情况,有时候我们需要的空大小在程序运行时才能知道,那此时静态的开辟空间的方式就不能满足了,我们这时候只能试试动态内存开辟. 这篇博客就来带大家梳理一下C/C++中的内存管理. 一:C/C

  • Pandas中DataFrame基本函数整理(小结)

    构造函数 DataFrame([data, index, columns, dtype, copy]) #构造数据框 属性和数据 DataFrame.axes #index: 行标签:columns: 列标签 DataFrame.as_matrix([columns]) #转换为矩阵 DataFrame.dtypes #返回数据的类型 DataFrame.ftypes #返回每一列的 数据类型float64:dense DataFrame.get_dtype_counts() #返回数据框数据类

  • pycharm中TensorFlow调试常见问题小结

    1. RuntimeError: Attempted to use a closed Session. 在pycharm下调用tensorflow库时,运行出现以下问题: RuntimeError: Attempted to use a closed Session. 解决方法:将STEP=5000开始的程序整体右移,包含在"with"内 可能遇见的问题:python代码如何整体移动 选中代码,按下"Tab"键即可整体右移 选中代码,按下"Shift+Ta

随机推荐