gpt4 book ai didi

java - GenericServlet 中的 getServletContext() 中的递归

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:11 24 4
gpt4 key购买 nike

下面是 GenericServlet 类中的 2 个方法,

    public ServletConfig getServletConfig() {
return this.config;
}

public ServletContext getServletContext() {
return getServletConfig().getServletContext(); // is this RECURSION?
}

其次,这个方法getServletContext()最终会返回什么?

最佳答案

不,这不是递归,因为 getServletContext()方法内的调用在 SevletConfig 上调用对象,在 servlet 本身上。

它看起来像递归的原因是 GenricServlet 实现 ServletConfig并公开该接口(interface)的所有方法,但它是通过将所有这些调用委托(delegate)给 ServletConfig 来实现的。由其实例成员变量 config 持有的对象.

这样做是为了方便使用servlet自己的ServletConfig在其doGet()内, doPosts()方法。例如,servlet 想要读取其在 <servlet> 内的 web.xml 中定义的初始化参数。标签为 <init-param> s。

然后不要这样做

out.write(getServletConfig().getInitParameter("adminEmail"));

servlet 可以直接调用它

out.write(getInitParameter("adminEmail"));

同样的简写适用于 getServletContext()以及。如果GenericServlet类没有实现ServletConfig你必须调用 getServletConfig().getServletContext()无处不在。

<小时/>

But GenericServlet implements ServletConfig. Hence again, the call will be on GenericServlet's method

不,这是递归

public String toString() {
return toString(); // BAD! StackOverflowError
}

这不是

public String toString() {
return instanceVar.toString(); // OK
}

仅仅因为方法名称相同,并不意味着它是递归。

您必须查看在哪个对象上调用该方法。在 servlet 的情况下,第一个调用是 GenericServlet对象(或技术上它的子类),第二个调用是在它的 config 上成员变量--aServletConfig目的。

关于java - GenericServlet 中的 getServletContext() 中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com