Java 重定向和POST方法

Java 重定向和POST方法,java,servlets,Java,Servlets,如何发布方法并将参数重定向到链接؟ 有这种可能性吗 link = http://92.42.51.91/CGGateway/Default.aspx 我目前发送的信息,我没有问题 但我不能改变方向 当我正确发送信息时,我可以使用链接 URL url = new URL("http://62.68.645.32/Default.aspx"); Map<String, Object> params = new LinkedHashMap<String, Objec

如何发布方法并将参数重定向到链接؟ 有这种可能性吗

link = http://92.42.51.91/CGGateway/Default.aspx
我目前发送的信息,我没有问题 但我不能改变方向

当我正确发送信息时,我可以使用链接

    URL url = new URL("http://62.68.645.32/Default.aspx");
    Map<String, Object> params = new LinkedHashMap<String, Object>();
    params.put("Timestamp", Timestamp);
    params.put("Callback", "google.com");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");

    resp.sendRedirect(Link);
URL=新URL(“http://62.68.645.32/Default.aspx");
Map params=新建LinkedHashMap();
参数put(“时间戳”,时间戳);
params.put(“回调”,“google.com”);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“POST”);
分别发送重定向(链接);

通常,当人们说“重定向”时,他们指的是HTTP代码302重定向。http客户机中302代码的许多实现仅使用GET进行重定向,而不考虑原始请求方法,因此使用此代码“重定向”到POST端点是不可靠的

克服这一问题的一个简单方法是使用自张贴表单:

<form name="autoform" action="..." method="POST">
    <input type="hidden" name="param1" value="value1">
    <input type="hidden" name="param2" value="value2">
    ...
</form>

在这种情况下,您将无法控制浏览器发送到该
url
的确切参数;相反,浏览器将自动发送与发送到重定向URL相同的参数。

通常,当人们说“重定向”时,他们指的是HTTP代码302重定向。http客户机中302代码的许多实现仅使用GET进行重定向,而不考虑原始请求方法,因此使用此代码“重定向”到POST端点是不可靠的

克服这一问题的一个简单方法是使用自张贴表单:

<form name="autoform" action="..." method="POST">
    <input type="hidden" name="param1" value="value1">
    <input type="hidden" name="param2" value="value2">
    ...
</form>

在这种情况下,您将无法控制浏览器发送到该
url
的确切参数;相反,浏览器将自动发送与发送到重定向URL相同的参数。

我不确定是否完全理解您的意思,但是,我编写了一个类来构建一个查询字符串,可以用于get或post:

public class QueryBuilder {
    private final String encoding;
    private final StringBuilder buf = new StringBuilder();

    public QueryBuilder(String encoding) {
        this.encoding = encoding;
    }

    public boolean isEmpty() {
        return buf.length() == 0;
    }

    public void add(String name, Object value) {
        try {
            if (value != null) {
                if (buf.length() > 0) {
                    buf.append('&');
                }
                buf.append(name);
                buf.append('=');
                buf.append(URLEncoder.encode(value.toString(), encoding));
            }
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException("Unsupported encoding " + encoding);
        }
    }

    public String toURL(String url) {
        if (buf.length() == 0) {
            return url;
        } else {
            return url + '?' + buf.toString();
        }
    }

    @Override
    public String toString() {
        return buf.toString();
    }
}
要将参数作为POST传递,请执行以下操作:

QueryBuilder query = new QueryBuilder("UTF-8");
query.add("Timestamp", Timestamp);
query.add("Callback", "google.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream out = cnt.getOutputStream();
try {
    out.write(query.toString().getBytes("UTF-8"));
} finally {
    out.close();
}
int stat = conn.getResponseCode();
if (stat < 200 || stat >= 300) {
    throw new IOException("HTTP Error " + stat + ": "
            + conn.getResponseMessage());
}
...
QueryBuilder query=newquerybuilder(“UTF-8”);
查询.添加(“时间戳”,时间戳);
query.add(“Callback”,“google.com”);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接设置输出(真);
conn.setRequestMethod(“POST”);
OutputStream out=cnt.getOutputStream();
试一试{
out.write(query.toString().getBytes(“UTF-8”);
}最后{
out.close();
}
int stat=conn.getResponseCode();
如果(统计值<200 | |统计值>=300){
抛出新IOException(“HTTP错误”+stat+”:“
+连接getResponseMessage());
}
...

我不确定是否完全理解您的意思,但是,我已经编写了一个类来构建一个查询字符串,可以用于get或post:

public class QueryBuilder {
    private final String encoding;
    private final StringBuilder buf = new StringBuilder();

    public QueryBuilder(String encoding) {
        this.encoding = encoding;
    }

    public boolean isEmpty() {
        return buf.length() == 0;
    }

    public void add(String name, Object value) {
        try {
            if (value != null) {
                if (buf.length() > 0) {
                    buf.append('&');
                }
                buf.append(name);
                buf.append('=');
                buf.append(URLEncoder.encode(value.toString(), encoding));
            }
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException("Unsupported encoding " + encoding);
        }
    }

    public String toURL(String url) {
        if (buf.length() == 0) {
            return url;
        } else {
            return url + '?' + buf.toString();
        }
    }

    @Override
    public String toString() {
        return buf.toString();
    }
}
要将参数作为POST传递,请执行以下操作:

QueryBuilder query = new QueryBuilder("UTF-8");
query.add("Timestamp", Timestamp);
query.add("Callback", "google.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream out = cnt.getOutputStream();
try {
    out.write(query.toString().getBytes("UTF-8"));
} finally {
    out.close();
}
int stat = conn.getResponseCode();
if (stat < 200 || stat >= 300) {
    throw new IOException("HTTP Error " + stat + ": "
            + conn.getResponseMessage());
}
...
QueryBuilder query=newquerybuilder(“UTF-8”);
查询.添加(“时间戳”,时间戳);
query.add(“Callback”,“google.com”);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接设置输出(真);
conn.setRequestMethod(“POST”);
OutputStream out=cnt.getOutputStream();
试一试{
out.write(query.toString().getBytes(“UTF-8”);
}最后{
out.close();
}
int stat=conn.getResponseCode();
如果(统计值<200 | |统计值>=300){
抛出新IOException(“HTTP错误”+stat+”:“
+连接getResponseMessage());
}
...
请将更多代码显示为一个列表。重定向取决于您使用的框架。请将更多代码显示为一个框架。重定向取决于您使用的框架