【參考】web請求之get,post,forward,redirecthtml
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的方式進行重定向能夠參考:點擊打開連接java
在項目裏,若是發生異常,我會須要重定向到一個指定的頁面去告訴別人出問題了。這個時候通常咱們都是用response.sendRedirect(url?mesage=xxxx);這是GET方式的。若是咱們要以POST方式重定向時,找了一下,發現沒有現成的東西,能夠辦獲得。這裏要本身寫一個方法去實現:web
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();jsp
}
}post
在咱們要跳轉地方this
HttpClient http=new HttpClient (response);url
http.setParameter("message","xxxx");spa
http.sendByPost(url);