我需要从一个JSP打开另一个JSP,并将POST参数发送到此JSP。我需要得到与response.sendRedirect(url);
相同的结果,但是使用这种方式我不能使用POST请求。另请注意,我不能使用requestDispatcher
因为这个JSP在另一个上下文中。我想我需要使用这样的东西:
URL url = new URL("http://www.somesite.com");
URLConnection conn = url.openConnection();
....
writer.write(data);
但我不确定我是否会打开新页面。
编辑:@jaxb,是的,我试过了。但是当我使用它时,我只在现有页面中获得新页面(即我将page1更改为page2,但是没有通过向其发送POST数据而打开新页面。)答案 0 :(得分:7)
我认为您可以使用以下代码:
public static String postRequest(String targetURL, String postParams) {
URL url;
HttpURLConnection connection = null;
try {
// Create connection
url = new URL(targetURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", ""
+ Integer.toString(postParams.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
// Send request
DataOutputStream wr = new DataOutputStream(connection
.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
// Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
答案 1 :(得分:2)
我觉得唯一的解决方案是使用会话。在一个jsp中将POST参数设置为会话,发送'重定向'到期望的jsp并让它从会话中获取参数。
session.setAttribute("parameter","value");
//In the second jsp.
session.getAttribute("parameter");
答案 2 :(得分:2)
我猜你需要的是一种构建有效的HTTP Post Request的方法。当我遇到类似问题时,我发现在http://www.devx.com/Java/Article/17679/1954共享的httpclient库非常有用且易于使用。它公开了设置发布请求的简单方法,然后调用post方法来执行实际发布。文章中一切都很好解释,我建议你试一试。
在本文的最后,作者(Vlad Patryshev)说:
回答永恒的问题 现在您知道HTML表单(GET或POST)如何作为HTTP请求传递给服务器,以及如何在Java程序中重现此行为,而不会使用协议详细信息对其进行重载。你可以说这个解决方案回答了永恒的问题:如何从另一个servlet或JSP调用servlet或JSP?
我认为这与您可能正在寻找的非常相似。
答案 3 :(得分:0)
您可以让客户端使用javascript重定向来提交表单:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><%-- file: redirectToPage2.jsp - redirects to Page2.jsp sending all parameters with POST method --%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Redirecting... Please Wait.</title>
<script type="text/javascript">
var submitform=function(){document.getElementById('form1').submit();};
</script>
</head>
<body onload="setTimeout(submitform,200);">
<form name="form1" id="form1" action="Page2.jsp" method="post">
<%
Map<String,String> params = request.getParameterMap();
Set<String> keys = params.keySet();
for(String key:keys)
{
String val = params.get(key);
%><input type="hidden" name="<%=key %>" value="<%=val %>"/><%
}
%>
</form>
</body>
</html>