`
- 浏览:
190978 次
- 性别:
- 来自:
上海
-
1.Get方式这种方式是最简单的参数传递方式。例如:http://www.zlex.org/get.do?a=3&b=5&c=7这个url中,a、b和c是url参数,具体的说是参数名,与之用“=”隔开的是对应的参数值。也就是说参数a的值为3、参数b的值为5、参数c的值为7。get.do是请求地址,紧跟这个地址的参数a需要用“?”作为分隔符,其余参数用“&”做分隔符。这种get请求发起后,服务器端可以通过request.getParameter()方法来获得参数值。如要获得参数a的值可以通过request.getParameter("a");2.Post方式相比get方式,post方式更为隐蔽。例如:http://www.zlex.org/post.do在这个url中,你看不到任何参数,真正的参数隐藏在Http请求的数据体中。如果了解网络监听的话,就会对这一点深有体会。我们举一个简单的例子:通过表单做登录操作。我们简化一个登录表单:
-
<formaction="login.do"method="post">
-
<ul>
-
<li><labelfor="username">用户名</label><inputid="username"
-
name="username"type="text"/></li>
-
<li><labelfor="password">密码</label><inputid="password"
-
type="password"/></li>
-
<li><label><inputtype="submit"value="登录"/><input
-
type="reset"value="重置"/></label></li>
-
</ul>
-
</form>
表单中有2个字段,用户名(username)和密码(password)注意form标签中的method参数值是post!即便是表单,在服务器端仍然可以通过request.getParameter()方法来获得参数值。Post方式,其实是将表单字段和经过编码的字段值经过组合以数据体的方式做了参数传递。经过一番阐述,相信大家对两种网络参数传递方式都有所了解了。Get方式比较简单,通过构建一个简单HttpURLConnection就可以获得,我们暂且不说。我们主要来描述一下如何通过java代码构建一个表单提交。仔细研究表单提交时所对应的http数据体,发现其表单字段是以如下方式构建的:
-
arg0=urlencode(value0)&arg1=urlencode(value1)
当然,尤其要注意字段名,参数名只不能使用中文这类字符。作为表单,Content-Type也会有所不同,其值为application/x-www-form-urlencoded以下做一个代码展示,以后再需要我就不用翻“旧账”了!我常用的网络工具,其功能远不止模拟一个post请求
-
-
-
-
packageorg.zlex.commons.net;
-
-
importjava.io.DataInputStream;
-
importjava.io.DataOutputStream;
-
importjava.io.UnsupportedEncodingException;
-
importjava.net.HttpURLConnection;
-
importjava.net.URL;
-
importjava.net.URLDecoder;
-
importjava.net.URLEncoder;
-
importjava.util.Map;
-
importjava.util.Properties;
-
-
-
-
-
-
-
-
-
publicabstractclassNetUtils{
-
publicstaticfinalStringCHARACTER_ENCODING="UTF-8";
-
publicstaticfinalStringPATH_SIGN="/";
-
publicstaticfinalStringMETHOD_POST="POST";
-
publicstaticfinalStringMETHOD_GET="GET";
-
publicstaticfinalStringCONTENT_TYPE="Content-Type";
-
-
-
-
-
-
-
-
-
-
publicstaticbyte[]requestPost(StringurlString,byte[]requestData)
-
throwsException{
-
PropertiesrequestProperties=newProperties();
-
requestProperties.setProperty(CONTENT_TYPE,
-
"application/octet-stream;charset=utf-8");
-
-
returnrequestPost(urlString,requestData,requestProperties);
-
}
-
-
-
-
-
-
-
-
-
-
-
publicstaticbyte[]requestPost(StringurlString,byte[]requestData,
-
PropertiesrequestProperties)throwsException{
-
byte[]responseData=null;
-
-
HttpURLConnectioncon=null;
-
-
try{
-
URLurl=newURL(urlString);
-
con=(HttpURLConnection)url.openConnection();
-
-
if((requestProperties!=null)&&(requestProperties.size()>0)){
-
for(Map.Entry<Object,Object>entry:requestProperties
-
.entrySet()){
-
Stringkey=String.valueOf(entry.getKey());
-
Stringvalue=String.valueOf(entry.getValue());
-
con.setRequestProperty(key,value);
-
}
-
}
-
-
con.setRequestMethod(METHOD_POST);
-
-
con.setDoInput(true);
-
con.setDoOutput(true);
-
-
-
if(requestData!=null){
-
DataOutputStreamdos=newDataOutputStream(con
-
.getOutputStream());
-
dos.write(requestData);
-
dos.flush();
-
dos.close();
-
}
-
-
intlength=con.getContentLength();
-
-
if(length!=-1){
-
DataInputStreamdis=newDataInputStream(con.getInputStream());
-
responseData=newbyte[length];
-
dis.readFully(responseData);
-
dis.close();
-
}
-
}catch(Exceptione){
-
throwe;
-
}finally{
-
if(con!=null){
-
con.disconnect();
-
con=null;
-
}
-
}
-
-
returnresponseData;
-
}
-
-
-
-
-
-
-
-
-
-
-
publicstaticbyte[]requestPostForm(StringurlString,
-
PropertiesformProperties)throwsException{
-
PropertiesrequestProperties=newProperties();
-
-
requestProperties.setProperty(CONTENT_TYPE,
-
"application/x-www-form-urlencoded");
-
-
returnrequestPostForm(urlString,formProperties,requestProperties);
-
}
-
-
-
-
-
-
-
-
-
-
-
-
publicstaticbyte[]requestPostForm(StringurlString,
-
PropertiesformProperties,PropertiesrequestProperties)
-
throwsException{
-
StringBuildersb=newStringBuilder();
-
-
if((formProperties!=null)&&(formProperties.size()>0)){
-
for(Map.Entry<Object,Object>entry:formProperties.entrySet()){
-
Stringkey=String.valueOf(entry.getKey());
-
Stringvalue=String.valueOf(entry.getValue());
-
sb.append(key);
-
sb.append("=");
-
sb.append(encode(value));
-
sb.append("&");
-
}
-
}
-
-
Stringstr=sb.toString();
-
str=str.substring(0,(str.length()-1));
-
-
returnrequestPost(urlString,str.getBytes(CHARACTER_ENCODING),
-
requestProperties);
-
-
}
-
-
-
-
-
-
-
-
publicstaticStringdecode(Stringurl){
-
try{
-
returnURLDecoder.decode(url,CHARACTER_ENCODING);
-
}catch(UnsupportedEncodingExceptionex){
-
returnurl;
-
}
-
}
-
-
-
-
-
-
-
-
publicstaticStringencode(Stringurl){
-
try{
-
returnURLEncoder.encode(url,CHARACTER_ENCODING);
-
}catch(UnsupportedEncodingExceptionex){
-
returnurl;
-
}
-
}
-
}
注意上述requestPostForm()方法,是用来提交表单的。测试用例
-
-
-
-
packageorg.zlex.commons.net;
-
-
importstaticorg.junit.Assert.*;
-
-
importjava.util.Properties;
-
-
importorg.junit.Test;
-
-
-
-
-
-
-
-
-
publicclassNetUtilsTest{
-
-
-
-
-
-
-
@Test
-
publicfinalvoidtestRequestPostStringByteArray()throwsException{
-
PropertiesrequestProperties=newProperties();
-
-
-
requestProperties
-
.put(
-
"User-Agent",
-
"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;TencentTraveler;.NETCLR1.1.4322)");
-
-
byte[]b=NetUtils.requestPost("http://localhost:8080/zlex/post.do",
-
"XML".getBytes());
-
System.err.println(newString(b,"utf-8"));
-
}
-
-
-
-
-
-
-
@Test
-
publicfinalvoidtestRequestPostForm()throwsException{
-
PropertiesformProperties=newProperties();
-
-
formProperties.put("j_username","Admin");
-
formProperties.put("j_password","manage");
-
-
byte[]b=NetUtils.requestPostForm(
-
"http://localhost:8080/zlex/j_spring_security_check",
-
formProperties);
-
System.err.println(newString(b,"utf-8"));
-
}
-
}
测试用例中的第二个方法是我用来测试SpringSecurity的登录操作,结果是可行的!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
9.网络10.日志 11.Zookeeper 12.Kafka 13.RabbitMQ 14.Hbase 15.MongoDB 16.Cassandra 17.设计模式 18.负载均衡 19.数据库 20.一致性算法 21.JAVA算法 22.数据结构 23.加密算法 24.分布式缓存 25.Hadoop 26.Spark 27...
作者最近也是面临离职,重找下家的情况,之前大学学过的《计算机网络》,自己看过《TCP/IP》一些的书,发现作为一个java工程师,对于网络的概念划分不清。因为互联网本身有一定的模型分层,所以本文,根据模型分层,...
关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...
本资源为整理网络上Java工作中常用的知识点,主要针对工作问题和面试问题,对于各个阶段的Java程序员有很强的实用性
整理互联网常见面试题,为春招、校招和社招做准备。如若不能下载,关注公众号“每日技术分享”,可免费下载资源。
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
文档内容包括JVM,JAVA基础,数据库,计算机网络,微服务等知识点。
(3)根据对需求的分类、整理,结合当前可利用的技术手段,设计系统原型; (4)实现系统。使用Java、stripes,实现编号、布点等核心算法与服务器端MVC结构、后台与前台的数据交互接口;通过HTML、CSS、JavaScript、Ajax...
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
Java网络爬虫(蜘蛛)源码_zhizhu.zip是一个基于Java语言开发的网络爬虫项目,适用于毕业设计、课程设计等场景。该项目主要功能是通过网络爬虫技术,自动抓取互联网上的信息,并将这些信息进行整理和存储。这个项目的...
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
9. 网络 10. 日志 11. ZOOKEEPER 12. KAFKA 13. RABBITMQ 14. HBASE 15. MONGODB 16. CASSANDRA 17. 设计模式 18. 负载均衡 19. 数据库 20. 一致性算法 21. JAVA 算法 22. 数据结构. 23. 加密算法. 24. 分布式缓存 ...
包括Java基础、Java并发、JVM、MySQL、Redis、Spring、MyBatis、Kafka、计算机操作系统、计算机网络、系统设计、多个、Java项目实战等
本文档是本人5年JAVA经验整理的文档(持续性的),由于CSDN只能单个附件只能上传15MB,所以只好分包压缩了(4个包),希望各位同行能够理解。 本文档包括JAVA/FLEX/数据建模/Database/移动办公/项目管理/单点登录/...
java各知识点详细总结(毕向东笔记整理)。第一章:编程基础 3-11 第二章:数组 11 -31 第三章:面向对象程序开发 31 -74 第四章:异常机制 74 -89 第五章:多线程技术 89 -122122122 第六章:常用类 API 122API 122 ...
Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...
Java后端面试手册 生成资源简介 Java后端面试手册是一本针对Java后端开发岗位的面试准备指南,旨在帮助求职者更好地准备和应对Java后端面试。...JAVA核心面试知识整理.pdf Java面试手册.pdf 算法小抄官方完整版.pdf
Java 语言是编程语言史上的一个里程碑,在此基础上形成的 Java Applet技术是综合了计算机图形学、多媒体技术、网络技术的新技术,近年来在很多领域得到了快速的发展和应用。 本文是为大家整理的java的毕业论文范文,...