繁体   English   中英

如何在另一个servlet的init()方法中使用一个servlet的输出?

[英]How do you use the output of one servlet inside another servlet's init() method?

这是我想做的事情:

public void init(ServletConfig config) {
    // ...
    URL url = new URL("http://myhost:port/path/to/otherservlet");
    // ... do stuff with contents of url
}

这可以正常工作,但是myhost和port是硬编码的,我想避免这种情况。 我想要

URL url = new URL("/path/to/otherservlet");

但这是无效的。 我也尝试过

config.getServletContext().getResource("/path/to/otherservlet");

但这仅适用于静态文件。

如何获得一个servlet初始化另一个的结果? 我不想使用RequestDispatcher的forward()或include()方法-其他servlet的结果旨在用于init()方法中,而不在响应中发送。

如果可能的话,我认为更好的方法是将另一个servlet的代码重构为某个类,该类可以直接为所需的输出调用。

我不会惊讶地发现它无法完成。 我认为toby的答案(将代码拆分成一个普通的类)是最好的方法,但是如果确实不可能,请尝试将用于本地请求的主机和端口编码为服务器的web.xml文件中的上下文参数:

<context-param>
    <param-name>localhost</param-name>
    <param-value>localhost</param-value>
</context-param>
<context-param>
    <param-name>localport</param-name>
    <param-value>8080</param-value>
</context-param>

并使用context.getInitParameter("localhost")等获取值。您还可以尝试动态确定值,但是您可能必须等待请求进入,以便可以使用HttpUtils.getRequestURL(req)类的东西-我不知道有其他方法可以做到。

如果在URL前面加上servlet上下文,可能会起作用。

我同意重构听起来是个更好的主意。 如果这是一个初始化操作,并且两个Servlet都在同一个上下文中,则可以将参数以可以同时使用的方式外部化到文件或数据库中。

我不希望init过于广泛。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM