一个web.xml,配置一个servlet如下

<servlet>
<servlet-name>BeerParamTests</servlet-name>
<servlet-class>TestInitParams</servlet-class>
<init-param>
<param-name>adminEmail</param-name>
<param-value>likewecare@wickedlysmart.com</param-value>
</init-param>
</servlet>

Servlet中是如何获取到这个参数adminEmail对应的值likewecare@wickedlysmart.com呢?

《Head First Servlet and JSP》上面有这样一段话

When the Container
initializes a servlet,
it makes a unique
ServletConfig for the
servlet.
The Container “reads”
the servlet init
parameters from the
DD and gives them to
the ServletConfig, then
passes the ServletConfig
to the servlet’s init()
method.

大概意思是说,当容器比如tomcat实例化一个servlet的时候,会为这个servlet造一个独一无二的ServletConfig,容器从DD也就是web.xml文件中读取servlet的<init-param>的name和value,并且将其传递到ServletConfig中,然后再将这个ServletConfig传递到servlet的init()方法中.

将ServletConfig传递到servlet的init()方法中是什么意思呢?

其实指的就是就是指传递到 GenericServlet的init(ServletConfig config)方法中,

我们先看下 GenericServlet这个类

public abstract class GenericServletimplements Servlet, ServletConfig, Serializable
{private static final long serialVersionUID = 1L;private transient ServletConfig config;public void destroy(){}public String getInitParameter(String name){return getServletConfig().getInitParameter(name);}public Enumeration<String> getInitParameterNames(){return getServletConfig().getInitParameterNames();}public ServletConfig getServletConfig(){return this.config;}public ServletContext getServletContext(){return getServletConfig().getServletContext();}public String getServletInfo(){return "";}public void init(ServletConfig config)throws javax.servlet.ServletException{this.config = config;init();}public void init()throws javax.servlet.ServletException{}public void log(String msg){getServletContext().log(getServletName() + ": " + msg);}public void log(String message, Throwable t){getServletContext().log(getServletName() + ": " + message, t);}public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)throws javax.servlet.ServletException, IOException;public String getServletName(){return this.config.getServletName();}
}

所以GenericServlet通过init(ServletConfig config)获取到了web.xml中的ServletConfig
又因为public abstract class HttpServlet extends GenericServlet(HttpServlet继承于GenericServlet)

我们可以在doGet或者doPost方法中通过

this.getServletConfig().getInitParameter("emailAdress")获取

如果我们想在init()方法中获取参数,就应该重写init()方法,而不是init(arg)方法

当然也可以重写init(arg)方法

不过得保证执行了父类的super.init(arg)比如

@Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("你进入了init(arg)方法"+config.getInitParameter("emailAdress")+"---");
        super.init(config);//注释掉这一句,ServletConfig将为null
    }

这样一来,在ServletConfig对象才不为null,

附送一个测试的Servlet类

package servlet;import java.io.IOException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*** 测试InitParameter* @author ken**/
public class ServletInitParameter extends HttpServlet {/*** */private static final long serialVersionUID = 7094673076240375858L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubsuper.init();}@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("你进入了init(arg)方法"+config.getInitParameter("emailAdress")+"---");super.init(config);//注释掉这一句,下面的getServletConfig()将返回是null}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("aaaa"+this.getServletConfig().getInitParameter("emailAdress"));}}

转载于:https://my.oschina.net/liangzhenghui/blog/183791

Servlet中如何获取param-name对应的值?相关推荐

  1. Servlet中参数获取方法

    在web.xml里面可以定义两种参数: 一种是全局范围的参数, 一种是servlet内的参数. web.xml里定义参数的应用举例:在做分页功能时,可以在代码中直给定pageSize的值,这样,写死在 ...

  2. C#中如何获取一个字体的宽度值(像素单位)-获得文字的像素宽度

    C#中如何获取一个字体的宽度值(像素单位) 应用:减去了一个空格的长, 字符间距还是有点差距 private void listBox1_DrawItem(object sender, DrawIte ...

  3. AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式

    HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value& ...

  4. ASP.NET中gridview获取当前行的索引值

    在用GridView控件时,我们经常会碰到获取当前行的索引,通过索引进行许多操作.例如,可以获得当前行某一个控件元素:设置某一元素的值等等.下面结合实例介绍几种获得GridView当前行索引值的方法. ...

  5. JSP九大内置对象的分析,对应SERVLET中如何获取、使用

    首先,JSP是javaweb服务器端的动态资源,可动态显示网页,本质上其实就是SERVLET. 一个JSP文件,在第一次访问时,服务器会先将jsp翻译成java文件,也就是一个servlet,然后该j ...

  6. antd Form.Item 中如何获取到Select的label值

    存在这样的一个情况: 在这样的一个下拉的选择框中,如何获取到对应的 商品类型的值,和label的值 在select 中存在这样的一个属性: labelInValue 看看我们怎么使用: 代码: < ...

  7. 饿了么ui组件中分页获取当前选中的页码值_【Web技术】314 前端组件设计原则

    点击上方"前端自习课"关注,学习起来~ 译者:@没有好名字了译文:https://github.com/lightningminers/article/issues/36,http ...

  8. Jquery中如何获取元素的文本,值,属性和内容

    jQuery DOM 操作jQuery 中非常重要的部分,就是操作 DOM 的能力.jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易. 提示:DOM = Docume ...

  9. java 获取下拉框的值_java中怎么获取下拉框的值

    展开全部 JComboBox有一个getSelectedItem()的方法得到选择的值和一个getSelectedIndex()得到选择值的索引.636f70793231313335323631343 ...

最新文章

  1. 【bzoj2693】jzptab 莫比乌斯反演+线性筛
  2. linux中循环控制语句,3.2.3 Shell脚本--循环控制语句
  3. 编程面试题之——简答题(持续更新...)
  4. springMVC 配置和使用
  5. 常见的浏览器兼容性问题大汇总
  6. php全选删除,php+ajax简单实现全选删除的方法
  7. mysql判断是日期是第几周
  8. js 延迟几秒执行_息息相关的 JS 同步,异步和事件轮询
  9. java简历中的项目经验怎么写_java软件工程师简历中项目经验怎么写?
  10. PHP海补知识(6)-- nl2br/ucfirst/ucwords
  11. windows 10 安装jira进行开发管理
  12. 稻盛和夫《干法》1-3章读后感
  13. 网站优化中SEO关键词密度到底多少属于合理?
  14. 自动化运维为什么是必须的?
  15. c/c++算法之“24点”经典问题
  16. 淘宝京东商品长链接缩短为腾讯,新浪短链接的接口有哪些?
  17. GaussDB灾备方案的设计
  18. MMKV:微信团队开源的轻量级存储方案
  19. dac单缓冲方式C语言设计,课程设计基于DAC0832单缓冲工作波形发生器.doc
  20. java 实现 仿QQ聊天系统 简易地实现 网络 在线聊天 代码详解(附源代码)

热门文章

  1. NYOJ 590 相同的和
  2. 命名空间和模块化编程3
  3. Codeforces 494E. Sharti
  4. hdu 2824The Euler function
  5. ZOJ 2675 Little Mammoth(计算几何)
  6. ASP入门(十三)-Server对象
  7. c# select标签绑定枚举,并以Description做Text显示
  8. 【LeetCode】50. Pow(x, n) (3 solutions)
  9. 用C/C++扩展你的PHP
  10. pip 和 conda 源更改