这是我正在尝试做的事情:
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()方法,而不是在响应中发送。
答案 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过于广泛。