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

时间:2009-02-11 23:12:53

标签: java servlets java-ee

这是我正在尝试做的事情:

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

这很好用,但myhost和端口是硬编码的,我想避免这种情况。我想要

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

但这无效。我也试过了

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

但这只适用于静态文件。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我不会惊讶地发现它无法完成。我认为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)之类的内容 - I不知道其他任何办法。

答案 2 :(得分:0)

如果您在servlet上下文中添加该URL,可能会有效。

我同意重构听起来更好。如果它是一个init操作,并且两个servlet都在同一个上下文中,那么参数可以外部化到文件或数据库,以便两者都可以接收它们。

我不希望init过于广泛。