如何在另一个servlet的init()方法内使用一个servlet的输出?
这里就是我想要做的事:如何在另一个servlet的init()方法内使用一个servlet的输出?
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()方法 - 其他的servlet的结果是用于init()方法的,而不是在响应中发送的。
我不会惊讶地发现它无法完成。我认为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)
之类的东西 - 我不知道任何其他方式去做吧。
如果可能的话,我认为更好的方法是将另一个servlet的代码重构为某个可以直接调用所需输出的某个类。
让我们说这是不可能的。 – 2009-02-12 00:33:27
也许它会工作,如果你预先在servlet上下文的URL。
我同意重构听起来像是一个更好的主意。如果它是一个初始化操作,并且两个servlet都处于相同的上下文中,那么参数可以外部化为文件或数据库,这样两者都可以将它们提取出来。
我不希望init太广泛。
这也是我得到的结论,但我希望它不会如此。 – 2009-02-12 02:53:35