我正在用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世界的新手..谢谢!干杯:)
答案 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。或者你可以这样做:
与远程Web服务共享相同的数据库或缓存,并在数据库或缓存中转发数据的密钥。
使用HttpClient通过修改后的xml发布客户端请求,并将响应从远程服务返回给您的客户端。
如果你能确保xml主体很小,你可以只使用GET方法,将请求转发给远程服务器
答案 2 :(得分:0)
让我们先排除一些可能性:
response.sendRedirect("/otherapp/servlet.do")
,因为它不允许您将POST数据发送到其他网络应用程序。session
。一旦排除了这些可能性,我可以想到的只有这样: