Java-重定向请求

时间:2013-08-21 11:08:58

标签: java xml java-ee servlets redirect

我正在用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世界的新手..谢谢!干杯:)

3 个答案:

答案 0 :(得分: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创建ur xml)并发送   他们在POST体内。确保设置内容编码   相应

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

String xml = "your xml";
PostMethod post = new PostMethod(strURL);     
try {
    StringRequestEntity requestEntity = new StringRequestEntity(xml);
    post.setRequestEntity(requestEntity); ..
    ....
    ...

答案 1 :(得分:0)

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

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

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

  3. 如果你能确保xml主体很小,你可以只使用GET方法,将请求转发给远程服务器

答案 2 :(得分:0)

让我们先排除一些可能性:

  1. 您无法执行response.sendRedirect("/otherapp/servlet.do"),因为它不允许您将POST数据发送到其他网络应用程序。
  2. 由于您要将数据发送到其他网络应用程序,因此无法使用session
  3. 使用GET显然无法在查询字符串中传递完整的XML。
  4. 一旦排除了这些可能性,我可以想到的只有这样:

    1. 返回调用页面,其中包含修改后的XML和其他webapps的servelt作为回应的URL
    2. 立即调用页面使用简单的Javascript
    3. 将修改后的XML发布到其他webapps的servelt