【参考】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
版权声明:本文为博主原创文章,转载请附上博文链接!

java web (sevlet)请求之get,post,forward,redirect的更多相关文章

  1. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  2. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...

  3. java web中请求和响应中包含中文出现乱码解析

    说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不 ...

  4. Java Web中请求转发和请求包含

    1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...

  5. Java Web 修改请求参数

    方法一.继承 HttpServletRequestWrapper , 实现自定义 request 1.除了修改的参数,其他 Header 等参数不变, 等同于修改了请求参数 2.实质是另一个请求 /* ...

  6. 从零写Java Web框架——请求的处理DispatcherServlet

    大概思路 继承 HttpServlet,实现 DispatcherServlet,拦截所有请求: DispatchServlet 重写 init()方法,负责初始化框架: 重写 service()方法 ...

  7. Java Web请求和响应机制

    1.请求响应流程图 =================== 服务器处理请求的流程: 服务器每次收到请求时,都会为这个请求开辟一个新的线程. 服务器会把客户端的请求数据封装到request对象中,req ...

  8. kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件

    小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...

  9. Java Web服务收到请求时线程的情况

    Web请求线程的状态 在开发中,突然想到了这样的一个问题, Java对每一次Web的请求,是否都会创建一条线程去进行处理呢?也就是说,当一个Class的方法同时有1000个请求访问时,线程是如何运作的 ...

随机推荐

  1. 如何使用TDD和React Testing Library构建健壮的React应用程序

    如何使用TDD和React Testing Library构建健壮的React应用程序 当我开始学习React时,我努力的一件事就是以一种既有用又直观的方式来测试我的web应用程序. 每次我想测试它时 ...

  2. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  3. Gson学习文档

    Gson:学习系列 http://www.codeceo.com/article/java-json-api-gson-1.html

  4. python3.5环境配置

    前言: python3应该是python的趋势所在,当然目前争议也比较大,这篇随笔的主要目的是记录在linux6.4下搭建python3环境的过程 以及碰到的问题和解决过程. 另外,如果本机安装了py ...

  5. REST风格的增删改查(1)

    一.RESTFUL风格的CRUD(增删改查)案例 1.需求: ①显示所有员工信息:URI:emps,请求方式:GET ②添加员工所有信息:显示添加页面:URI:emp,请求方式:GET, 添加员工信息 ...

  6. Sqoop导入到hdfs

    1.注意win下直接复制进linux 改一下--等 sqoop-list-databases --connect jdbc:mysql://122.206.79.212:3306/ --usernam ...

  7. Docker实现容器具有固定IP

    Docker的网络类型 Docker安装后,默认会创建三种网络 $ docker network ls NETWORK ID NAME DRIVER SCOPE 6bdc00ad2a8d bridge ...

  8. Go web编程实例

    1. go web编程入门 记录个web编程例子方便以后使用. 主要有: chan的使用(带缓存,不带缓存) client发起get/post请求 server解析get/post请求参数 http. ...

  9. Thymeleaf-语法整理

    Thymeleaf其他案例看其他网站 http://www.cnblogs.com/hjwublog/p/5051732.html http://blog.csdn.net/u012706811/ar ...

  10. Deep Learning.ai学习笔记_第四门课_卷积神经网络

    目录 第一周 卷积神经网络基础 第二周 深度卷积网络:实例探究 第三周 目标检测 第四周 特殊应用:人脸识别和神经风格转换 第一周 卷积神经网络基础 垂直边缘检测器,通过卷积计算,可以把多维矩阵进行降 ...