1

我正在用 Java 编写一个 Servlet,基本上,它在 Requests 正文中获取一个带有 XML 的请求,然后更改 XML 中的一些内容并使用新的 XML 将请求重定向/前言到另一个相同的 Servlet服务器,但它在不同的网络应用程序上。

如何使用新 XML 重定向/前言请求?我可以在任何地方找到代码示例吗?

这是我到目前为止所拥有的:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
   String body = getBody(request);
   MapXml mapXml = new MapXml(body,
               "C:\\Projects\\XmlMapper\\output.xml","C:\\Projects\\XmlMapper\\output\\");
   String outputXml = mapXml.getOutputXml();
}
public static String getBody(HttpServletRequest request) throws IOException {
    String body = null;
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader bufferedReader = null;
    try {
        InputStream inputStream = request.getInputStream();
        if (inputStream != null) {
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            char[] charBuffer = new char[128];
            int bytesRead = -1;
            while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                stringBuilder.append(charBuffer, 0, bytesRead);
            }
        } else {
            stringBuilder.append("");
        }
    } catch (IOException ex) {
        throw ex;
    } finally {
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException ex) {
                throw ex;
            }
        }
    }
    body = stringBuilder.toString();
    return body;
}

我不知道如何从这里继续。我是 servlet 世界的新手。谢谢!!!干杯:)

4

3 回答 3

1

如果两个 web-apps 在同一台服务器上,即 Tomcat

in its META-INF/context.xml set <Context crossContext="true" />

getServletContext().getContext("/app").getRequestDispatcher("f.jsp").forward(..);, 

其中 app 是另一个应用程序的名称。

或者您可能应该做的是,使用 URLConnection 向任何 URL 发送请求。

URLConnection connection = new URL(url + "?" + query).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
// ...

关于如何在请求中设置XML,可以在POST请求中携带相对较多的数据。您还可以找到 POST 数据的最大限制。

只需读取构成 XML 文件的字节(使用 FileInputStream)(如果文件中没有 xml,请使用 String 创建您的 xml)并将它们发送到 POST 正文中。确保相应地设置内容编码。

我第四次编辑这个,添加更多细节。如果您很难使用 Java 的 HTTP 客户端,您可以使用 Apache HTTP 客户端轻松发布 XML。

String xml = "your xml";
PostMethod post = new PostMethod(strURL);     
try {
    StringRequestEntity requestEntity = new StringRequestEntity(xml);
    post.setRequestEntity(requestEntity); ..
    ....
    ...
于 2013-08-21T11:31:19.747 回答
0

因为 xml 不会是请求的小主体,所以您必须让客户端为您发布新的 xml。或者你可以这样做:

  1. 与远程 Web 服务共享同一个数据库或缓存,并转发数据库或缓存中数据的密钥。

  2. 使用 HttpClient 为您的客户端发布请求,并使用修改后的 xml,并将远程服务的响应返回给您的客户端。

如果您可以确保 xml 正文很小,您可以只使用 GET 方法,将请求转发到远程服务器

于 2013-08-21T11:18:40.497 回答
0

我们先排除一些可能性:

  1. 您不能这样做,response.sendRedirect("/otherapp/servlet.do")因为它不允许您将 POST 数据发送到另一个 web 应用程序。
  2. 您无法使用session,因为您将数据发送到不同的 web 应用程序。
  3. 您显然不能使用 GET 在查询字符串中传递完整的 XML。

一旦排除了这些可能性,我能想到的唯一可能的方法是:

  1. 返回到调用页面,修改后的 XML 和其他 webapps servelt 的 URL 作为响应
  2. 让调用页面立即使用简单的 Javascript 将修改后的 XML POST 到其他 webapps 的 servelt
于 2013-08-21T11:25:51.400 回答