【问题标题】:How to call Servlet from another Servlet page?如何从另一个 Servlet 页面调用 Servlet?
【发布时间】:2013-12-02 00:04:17
【问题描述】:

我有一个名为 X.java 的 servlet,它以 JSON 结构写出一些数据,如下所示:

{ "name":"JOHN" }

我还有另一个名为 Y.java 的 servlet。它必须调用 X.java 并读取 X servlet 的 JSON 结构:在变量 k 中,然后 Y 应该再次写出该变量 k,如下所示:

{ "name":"Hi John" } 

我怎样才能做到这一点,而不使用 Javascript 我需要将页面 Y 中的页面 X 称为:

只使用纯java。我的代码:

URL url = new URL( "myUrl/X");
HttpURLConnection connectionx = (HttpURLConnection) url.openConnection();
connectionx.setRequestMethod("GET");
connectionx.setRequestProperty("Content-Type","application/json");
connectionx.setRequestProperty("Accept", "application/json");
connectionx.setInstanceFollowRedirects(false);
InputStream myInput = connectionx.getInputStream();
BufferedReader reader = new BufferedReader( new InputStreamReader(myInput));
String line;
String returnString = null;
while ((line = reader.readLine()) != null) {
    returnString += line;
}

输出是第一个 JSON:{"name:": "John"}
谢谢

【问题讨论】:

  • 写成什么?
  • 您是在问如何读取文件吗?如何发送 HTTP 请求?
  • 它不是一个文件,它只是一个页面X.java,可以被Y.java调用来读取X {JSON-structure}的内容并显示来自Y.java的结果。 。 那可能吗 ??或者你可以给我什么建议??
  • 所以你问的是如何调用在不同类中定义的普通函数?

标签: java json


【解决方案1】:

我猜 servlet X 映射到某个 URL,两个 servlet(X 和 Y)提供某种服务... 为什么不使用 Y 的通用 HTTP 客户端库来调用 X?

Ps:抱歉所有的“猜测”,但你能提供更多细节吗?

【讨论】:

    【解决方案2】:

    在 Y servlet 中,使用请求调度程序来包含 X servlet。当您包含 X servlet 时,使用自定义 HttpServletResponseWrapper 来存储 servlet X 返回的 Json。就是这样。

    【讨论】:

      【解决方案3】:

      试试这个, J2EE中有九个对象是隐式对象,其中一个是会话,您可以做的是当X.java(1st servlet)进行处理然后将结果放入会话中,然后使用servletcontext.getRequestDispatcher().forward()或servletcontext.getRequestDispatcher ().redirect() 将您的请求转发到 Y.java。 forward() 和重定向方法有一些区别,请阅读这里

      http://javapapers.com/jsp/difference-between-forward-and-sendredirect/

      http://www.coderanch.com/t/365084/Servlets/java/whats-difference-redirect

      并选择适合你使用的方法,我猜你需要使用 forward() 方法。

      【讨论】:

      • 我需要通过在 Y 中调用 X-url 来获取 JSON,,
      【解决方案4】:

      所有这些想法虽然可能可行,但都是疯狂的。

      相反,将您的 X servlet 调用的例程放入它自己的类和方法中,然后简单地调用它。没有理由为了获取您的内容而跳过请求调度程序的障碍。将 servlet 的核心重构为可重用的组件并直接调用它,完全绕过整个 HTTP 和请求基础设施。

      【讨论】:

      • 由于 X 和 Y 是相同的 servlet 上下文,因此我认为最好使用 Request dispatcher INCLUDE 和自定义 HttpServletResponseWrapper。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多