Java 如何通过发送POST查询通过URL打开新页面?

Java 如何通过发送POST查询通过URL打开新页面?,java,http,post,Java,Http,Post,我需要从一个JSP打开另一个JSP,并将POST参数发送到此JSP。我需要生成与response.sendRedirecturl相同的结果;但是用这种方式我不能使用POST请求。还要注意,我不能使用requestDispatcher,因为这个JSP在另一个上下文中。我想我需要用这样的东西: URL url = new URL("http://www.somesite.com"); URLConnection conn = url.openConnection(); ...

我需要从一个JSP打开另一个JSP,并将POST参数发送到此JSP。我需要生成与response.sendRedirecturl相同的结果;但是用这种方式我不能使用POST请求。还要注意,我不能使用requestDispatcher,因为这个JSP在另一个上下文中。我想我需要用这样的东西:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
但我不确定我是否会打开新的一页

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);

编辑:@jaxb,是的,我试过了。但当我使用它时,我只会在现有页面中获得新页面,即我将第1页更改为第2页,但不会打开新页面并向其发送POST数据。

我觉得唯一的解决方案是使用会话。在一个jsp中设置会话的POST参数,将“重定向”发送到所需的jsp,并使其从会话中获取参数

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
session.setAttribute("parameter","value");

//In the second jsp.
session.getAttribute("parameter");

我觉得唯一的解决办法是使用会话。在一个jsp中设置会话的POST参数,将“重定向”发送到所需的jsp,并使其从会话中获取参数

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
session.setAttribute("parameter","value");

//In the second jsp.
session.getAttribute("parameter");

我认为您可以使用以下代码:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);

我认为您可以使用以下代码:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);

我想您需要的是一种构造有效HTTP Post请求的方法。当我遇到类似的问题时,我发现在上共享的httpclient库非常有用并且使用简单。它公开了设置post请求,然后调用post方法来执行实际post的简单方法。这篇文章对每件事都做了很好的解释,我建议您尝试一下

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
在这篇文章的结尾,作者弗拉德·帕特里谢夫说:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
永恒问题的答案 现在您知道了HTML表单GET或POST是如何作为HTTP请求传递到服务器的,以及如何在Java程序中重现这种行为,而不必使用协议细节重载它。您可以说这个解决方案回答了一个永恒的问题:如何从另一个servlet或JSP调用servlet或JSP

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);

我觉得这与您可能正在寻找的非常相似。

我想您需要的是一种构造有效HTTP Post请求的方法。当我遇到类似的问题时,我发现在上共享的httpclient库非常有用并且使用简单。它公开了设置post请求,然后调用post方法来执行实际post的简单方法。这篇文章对每件事都做了很好的解释,我建议您尝试一下

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
在这篇文章的结尾,作者弗拉德·帕特里谢夫说:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
永恒问题的答案 现在您知道了HTML表单GET或POST是如何作为HTTP请求传递到服务器的,以及如何在Java程序中重现这种行为,而不必使用协议细节重载它。您可以说这个解决方案回答了一个永恒的问题:如何从另一个servlet或JSP调用servlet或JSP

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);

我觉得这与您可能要查找的内容非常相似。

您只需让客户端使用javascript进行重定向即可提交表单:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
<%@ 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>

您只需让客户端使用javascript执行重定向以提交表单:

    URL url = new URL("http://www.somesite.com");
    URLConnection conn = url.openConnection();
    ....
    writer.write(data);
<%@ 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>