Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-重定向请求_Java_Xml_Jakarta Ee_Servlets_Redirect - Fatal编程技术网

Java-重定向请求

Java-重定向请求,java,xml,jakarta-ee,servlets,redirect,Java,Xml,Jakarta Ee,Servlets,Redirect,我正在用Java编写一个Servlet,基本上,它在请求主体中获取一个包含XML的请求,然后在XML中更改一些内容,并使用新的XML将请求重定向/前言到位于同一服务器上但位于不同web应用程序上的另一个Servlet 如何用新的XML重定向/前言请求?我可以在任何地方找到代码示例吗 这就是我到目前为止所做的: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws Se

我正在用Java编写一个Servlet,基本上,它在请求主体中获取一个包含XML的请求,然后在XML中更改一些内容,并使用新的XML将请求重定向/前言到位于同一服务器上但位于不同web应用程序上的另一个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世界还不熟悉。。谢谢干杯:)

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

  • 与远程web服务共享同一数据库或缓存,转发数据库或缓存中数据的密钥

  • 使用HttpClient以修改后的xml发布客户机的请求,并将远程服务的响应返回给客户机


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

    ,因为xml对于请求来说不是一个小正文,所以您必须让客户端为您发布新的xml。或者你可以:

  • 与远程web服务共享同一数据库或缓存,转发数据库或缓存中数据的密钥

  • 使用HttpClient以修改后的xml发布客户机的请求,并将远程服务的响应返回给客户机


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

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

  • 您不能执行
    response.sendRedirect(“/otherapp/servlet.do”)
    ,因为它不允许您将POST数据发送到另一个Web应用程序
  • 您无法使用
    会话
    ,因为您正在将数据发送到另一个Web应用程序
  • 显然,不能使用GET在查询字符串中传递完整的XML
  • 一旦排除了这些可能性,我能想到的唯一可能的方法是:

  • 返回调用页面,并使用修改后的XML和其他Web应用的servelt的URL作为响应
  • 让调用页面使用简单的Javascript立即将修改后的XML发布到其他Web应用的servelt

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

  • 您不能执行
    response.sendRedirect(“/otherapp/servlet.do”)
    ,因为它不允许您将POST数据发送到另一个Web应用程序
  • 您无法使用
    会话
    ,因为您正在将数据发送到另一个Web应用程序
  • 显然,不能使用GET在查询字符串中传递完整的XML
  • 一旦排除了这些可能性,我能想到的唯一可能的方法是:

  • 返回调用页面,并使用修改后的XML和其他Web应用的servelt的URL作为响应
  • 让调用页面使用简单的Javascript立即将修改后的XML发布到其他Web应用的servelt

  • 如果两个web应用都在同一台服务器上,即Tomcat

    in its META-INF/context.xml set <Context crossContext="true" />
    
    getServletContext().getContext("/app").getRequestDispatcher("f.jsp").forward(..);, 
    
    关于如何在请求中设置XML,您可以在POST请求中携带相对较大数量的数据。您还可以找到POST数据的最大限制


    只需读取组成XML文件的字节(使用FileInputStream) (如果文件中没有xml,请使用字符串创建xml)并发送 他们在邮政机构。确保设置内容编码 因此

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

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

    如果两个web应用都在同一台服务器上,即Tomcat

    in its META-INF/context.xml set <Context crossContext="true" />
    
    getServletContext().getContext("/app").getRequestDispatcher("f.jsp").forward(..);, 
    
    关于如何在请求中设置XML,您可以在POST请求中携带相对较大数量的数据。您还可以找到POST数据的最大限制


    只需读取组成XML文件的字节(使用FileInputStream) (如果文件中没有xml,请使用字符串创建xml)并发送 他们在邮政机构。确保设置内容编码 因此

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

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


    你想过用过滤器吗。你想过用过滤器吗。这个问题提到了不同的Webapp吗?我猜它只是不同的Servlet/JSP,在同一台服务器上。这是OP写的:
    新的XML到同一台服务器上的不同Servlet,
    但它在不同的web应用程序上。
    你可以通过在谷歌上搜索轻松找到代码片段。你需要基本的Javascript知识。这个问题提到了不同的Webapp吗?我猜它只是不同的Servlet/JSP,在同一台服务器上。这是OP写的:
    新的XML到同一台服务器上的不同Servlet,
    但它在不同的web应用程序上。
    你可以通过在谷歌上搜索轻松找到代码片段。你需要基本的Javascript知识。这对我没有帮助-没有数据库涉及如何使用HttpClient为你的客户端发布请求?然后返回响应。例如?我不知道你说的HttpClient是什么意思,它是apache提供的一套工具,它通过java代码像浏览器一样发送请求。演示在这里,这对我没有帮助-没有涉及数据库如何使用HttpClient为您的客户发布请求?然后返回响应。例如?我不知道你说的HttpClient是什么意思,它是apache提供的一套工具,它通过java代码像浏览器一样发送请求。演示就在这里,我在哪里设置它来使用新的xml?我还没有介绍这一部分。我想告诉你的是你想问的。您应该在请求中设置xml,然后转发它。。或者您应该使用URLConnection并在请求中设置所有参数,然后将该请求提交到URL……但这就是我的问题:如何在请求中设置XML?只需读取构成XML文件的字节(使用FileInputStream)(如果文件中没有XML,则使用字符串创建ur XML)并将它们发送到POST正文中。确保