java web (sevlet)请求之get,post,forward,redirect

【参考】web请求之get,post,forward,redirect

1,form表单:可以采用post或者get请求,客户端主动跳转,url地址会改变为提交后的地址

2,forward:forward是转发请求,不转发地址。服务器直接访问目标地址,把目标地址响应内容读取过来,然后再发送到客户端,客户端浏览器根本不知道服务器的内容是从其他的目标地址获取的,客户端url地址也不会改变。forward不但转发请求内容,还把请求的方式也转发了,所以forward的请求是get还是post取决于启用forward的源请求是post方式还是get方式,如:a.jsp 以 post 方式调b.jsp,那么b.jsp 以forward的方式访问c.jsp也会以post方式访问。

3,redirect:redirect是通过服务端向客户端发送状态码,在客户端跳转url,redirect都是get的方式请求,而且url地址会跳转到目标地址

4,redirect会进行两次request和两次response,并且地址和参数都被暴露出来,forward只会进行一次请求,效率更高而且可以隐藏信息

5,如果需要在服务端通过post的方式进行重定向可以参考:点击打开链接

用POST方式 重定向

在项目里,如果发生异常,我会需要重定向到一个指定的页面去告诉别人出问题了。这个时候一般我们都是用response.sendRedirect(url?mesage=xxxx);这是GET方式的。如果我们要以POST方式重定向时,找了一下,发现没有现成的东西,可以办得到。这里要自己写一个方法去实现:

httpClient.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;
/**

* @author billtsang
*
*/
public class HttpClient {
Map<String, String> parameter=new HashMap<String, String>();
HttpServletResponse response;

public HttpClient(HttpServletResponse response)
{
   this.response=response;
}
public void setParameter(String key,String value)
{
   this.parameter.put(key, value);
}
public void sendByPost(String url) throws IOException
{
   this.response.setContentType("text/html");
   PrintWriter out = this.response.getWriter();
   out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
   out.println("<HTML>");
   out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
   out.println(" <BODY>");
   out.println("<form name="submitForm" action=""+url+"" method="post">");
     Iterator<String> it=this.parameter.keySet().iterator();
   while(it.hasNext())
   {
    String key=it.next();
    out.println("<input type="hidden" name=""+key+"" value=""+this.parameter.get(key)+""/>");
   }
   out.println("</from>");
   out.println("<script>window.document.submitForm.submit();</script> ");
   out.println(" </BODY>");
   out.println("</HTML>");
   out.flush();
   out.close();

}
}

在我们要跳转地方

HttpClient http=new HttpClient (response);

http.setParameter("message","xxxx");

http.sendByPost(url);


---------------------
作者:乔布斯基
来源:CSDN
原文:https://blog.csdn.net/tidu2chengfo/article/details/73801501
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/xdot/p/10481411.html