【Java】向一个页面发送post请求并获取其处理之后的结果与用javascript创建一个表单后提交的安全性

本文对比与《【Java】读取网页中的内容》(点击打开链接)一文,向一个页面发送get请求,并获取其处理之后的结果,这里是向一个页面发送post请求,并获取其处理之后的结果。如果向一个页面发送get请求,并获取其处理之后的结果,只需要直接读取一个网页用?后接各种用&参数连接的参数即可,而向一个页面发送post请求,并获取其处理之后的结果,就不是这么简单了。

这里方法可能在普通的Java文件中不会太常见,但在jsp、安卓等javaweb的网页编程中却十分常用

import java.io.*;
import java.net.*;

public class HttpRequestPost {
	/**
	 * @param url
	 *            需要相应post请求的url
	 * @param param
	 *            请求参数,应该为param1=value1&param2=value2的形式。
	 * @return 所代表远程资源的响应结果
	 */
	public static String sendPost(String url, String param) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		try {
			// 打开链接并且配置,这是指定动作
			URLConnection conn = new URL(url).openConnection();
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent",
					"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			conn.setDoOutput(true);
			conn.setDoInput(true);
			// 获取URLConnection对象对应的输出流
			out = new PrintWriter(conn.getOutputStream());
			// 发送请求参数
			out.print(param);
			// 输出流的缓冲
			out.flush();

			// 定义BufferedReader输入流来读取post响应之后生成的数据
			in = new BufferedReader(
					new InputStreamReader(conn.getInputStream()));
			String line = null;
			while ((line = in.readLine()) != null) {
				result += line;
			}
			// 人走带门
			out.close();
			in.close();
		} catch (Exception e) {
			System.out.println("发送 POST 请求出现异常!" + e);
		}
		return result;
	}

	public static void main(String[] args) {
		//如果http://localhost:8080/a.jsp是一个post请求的响应页面
		//希望其得到param=1&param=2的结果,则如此调用
		System.out.println(HttpRequestPost.sendPost("http://localhost:8080/a.jsp",
				"param=1&param=2"));
	}
}

由此可见,使用Java编程可以轻松地向一个页面发送post请求并获取其处理之后的结果。在网页编程时,如果我们希望jsp把数据提交到javascript再数据提交到jsp的交互,不应该使用利用JavaScript创建一个form表单,然后把jsp数据写入这个form并提交的方法:

function MakeForm(){
    var FormToJsp = document.createElement("form");
    FormToJsp.id = "FormToJsp";
    FormToJsp.name = "FormToJsp";
    document.body.appendChild(FormToJsp);
    // 创建一个隐藏域,把jsp的值写到这个隐藏域
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "value1";
    input.value = "<%=JspValue%>";
    FormToJsp.appendChild(input);
    FormToJsp.method = "POST";
    FormToJsp.action = "/Servlet_address";
    FormToJsp.submit();
}

因为别有用心的浏览者可以在源代码里面看到你这段脚本,然后如上编写Java程序,向你这个“隐藏表单”的响应地址不停地发送post内容,从而达到一定的目的。正确的方法是jsp把那些需要多个Servlet里面使用的值,利用request.getSession().setAttribute("JspValueName", JspValue);这一条语句存到Session中,需要使用的话,则利用String
JspValue=request.getSession().getAttribute("JspValueName").toString();来取出这个JspValue。

时间: 2024-12-09 05:55:22

【Java】向一个页面发送post请求并获取其处理之后的结果与用javascript创建一个表单后提交的安全性的相关文章

[Java拾遗五]使用Session防止表单重复提交

申明:此文章属于转载, 转自博客: http://www.cnblogs.com/xdp-gacl/p/3859416.html在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提交的常见应用场景 有如下的form.jsp页面 1 <%@ page language="java" import="java.util.*&qu

[原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

避免表单重复提交与等待页面

一.为什么会出现表单重复提交    1.当用户在表单中填写完信息,点击提交按钮后,肯能会因为没有看到成功信息而在此点击提交按钮,从而导致在服务器端收到两条同样的信息,如果这个信息要保存到数据库中的,那么就会出现两条重复的数据,或者可能出现数据库操作异常. 2.当用户填写表单信息完成后,点击表单提交,即使响应及时,也有可能会出现表单重复提交的情况.一般服务器端的程序在处理完用户提交的信息后,调用的是Request.Dispatcher.forward()方法将用户的请求导向成功页面,用户看到成功信

[原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

不同编码页面之间表单的提交方法

关键词:编码 表单 GB2312 POST UTF8 使用accept-charset 属性 accept-charset 属性规定服务器处理表单数据所接受的字符集.accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据.该属性的值是用引号包含字符集名称列表.如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待.此属性的默认值是 "unknown",表示表单的字符集与包含表单的文档的字符集

在javaweb项目里如何防止一个表单重复提交

1:利用javascript防止表单重复提交() 以上2种方法都是利用javascript来防止用户反复点击提交按钮来提交页面,但是对于表单提交后用户点击刷新按钮导致表单重复提交以及用户提交表单后点击后退按钮回退到表单页面后再次提交是没有效果的.那么针对这2种情况应该如何处理呢??

用HTTP状态码实现提交表单后刷新页面不重复提交

正常情况下,表单提交后如果用户刷新页面会重复提交表单,有些情况下我们不希望表单重复提交,利用HTTP协议中的307状态码重定向页面可以实现这个目的.实例如下: 表单页面代码: <form action="1.php" method="post"> <input type="text" name="na"> <input type="submit" value="提交&

JavaScript 创建一个 form 表单并提交

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input onclick="MakeForm()" type="button" class="btn grey"

用html5的canvas和JavaScript创建一个绘图程序

本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. 1 <canvas id="canvasInAPerfectWorld" width="490" height="220"></canvas> 获取绘图环境,context对象提供了用于在画布上绘图的方法和属性 1 context = document.getEleme