【问题标题】:Calling service() of servlet from another servlet从另一个 servlet 调用 servlet 的 service()
【发布时间】:2012-02-03 08:54:39
【问题描述】:

我的 web.xml 中有一个 url 映射,这样对特定 url x.pt 的请求就会映射到一个 Servlet,比如 Servlet1。在这个 servlet 的 service() 中,我检查请求是否具有某些特定参数。

如果是这样,调用将委托给另一个 servlet Servlet2,方法是实例化它并调用其服务方法。

public void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

    // if the call is for some special events (request has some specific parameter)
    if (req.getParameter(conditionCheck()) {
        doPost(req, res);
    } else {
        // Report parsing
    }
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

    try {
        // instantiate Servlet2 object
        servlet2.init(this.getServletConfig());
        servlet2.service(req, res);
        servlet2.destroy();
    } catch (Exception e) {
        LOG.error("Unable to execute event", e);
    }
}

当请求是针对特殊事件(即对 Servlet2)时,浏览器会返回一些 JSON 文本 如果我需要做一些额外的事情来获得 Servlet2 对浏览器的响应,请告诉我。

提前致谢!

【问题讨论】:

  • 您的问题是什么?这行得通还是你有问题?
  • 也许我不明白。为什么不直接将请求重定向/转发到第二个 servlet ?

标签: java servlets


【解决方案1】:

您可以使用 RequestDispacher 转发您的请求:

RequestDispatcher rd = getServletContext().getRequestDispatcher(destination);
rd.forward(request, response);

【讨论】:

    【解决方案2】:

    正如 Kris 所说,我希望 RequestDispatcher 能够工作,但是当我看到像这样直接调用 servlet 时,我总是感到不舒服。您是否有机会将 servlet2 提供的逻辑移动到 servlet1 和 servlet2 都可以调用的单独对象中?如果可以的话,我认为它会给你一个更好、更容易测试的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多