zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    全局变量引用与声明
    Oracle基础~dg原理
    Oracle基础~dg管理
    Oracle基础~rman克隆
    oracle基础~rman恢复篇
    oracle基础~linux整体性能优化
    oracle基础~报错汇总与解决办法
    oracle基础~用户和权限
    oracle基础~rac-asm
    oracle基础~awr报告
  • 原文地址:https://www.cnblogs.com/xdot/p/10481411.html
Copyright © 2011-2022 走看看