转发与重定向是什么类型的请求?

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地址会跳转到目标地址

注:1、redirect会进行两次request和两次response,并且地址和参数都被暴露出来,forward只会进行一次请求,效率更高而且可以隐藏信息
2、如果需要在服务端通过post的方式进行重定向可以参考:用POST请求重定向

demo:
用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);
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值