12341432

1.迭代器(Iterator)

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

2.对于这两种方式,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用

3.default package是没有文件夹的,在Eclipse项目的真实工程目录里,是没有文件夹的。是直接存在src目录下的
4..java的java代码文件,经过编译后生成.class文件,存储在项目目录下的bin文件夹。.class文件是打开后乱码的,不能直接查看。
5.我们下载的外来jar包,里面就全都是.class文件,是编译好的class文件,可以直接被import引用后使用。
6.jar包里面全是class文件,没事其他的东西,没有.java文件
7.每一个Eclipse工程文件路径下,都有个.classpath文件,里面包含了创建的文件夹/外来引入的jar包等。
8.<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="config2"/>
<classpathentry kind="src" path="config"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="D:/ECcipseSVNWorkSpace/zzgjs1.0.0/src/J2EE/APP-INF/lib/log4j-1.2.15.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

9.spring mvc @requestbody的使用位置,并不是在类上,而是在方法参数前面,()里面。
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
userService.batchSave(users);
}

10.@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;

11.前端是怎样发送post请求的var parm = "act=" + act + "&cityname=" + cityname + "&antique=" + antique;//构造URL参数
//xmlobj.open("POST", "{dede:global.cfg_templeturl/}/../include/weather.php", true); //调用weather.php
xmlobj.open("POST", "/weather/include/weather.php", true); //调用weather.php
xmlobj.setRequestHeader("cache-control","no-cache");
xmlobj.setRequestHeader("contentType","text/html;charset=uft-8") //指定发送的编码
xmlobj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); //设置请求头信息
xmlobj.onreadystatechange = StatHandler; //判断URL调用的状态值并处理
xmlobj.send(parm); //设置为发送给服务器数据

12.Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性
13.HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包
14.httpclient jar包和log4j jar包都是apace研发的
15.HttpClient使用方法:
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3.4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6.httpclient-4.1.3.jar和httpcore-4.1.4.jar 适用于HTTP请求类操作

7.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
:commons-logging.jar记录日志的公共包,缺少jar包,commons.jar吧。
8. HttpClient简单使用:
HttpClient 代表Http客户端 里面定义了很多http 请求执行行为
HttpEntity 消息载体,发送或者接收消息的载体,可以通过客户端请求或者服务器响应获取实例

9.http的get或者post请求,指的都是tcp走向服务器端的请求流,请求流也就是请求报文里,可以选择get请求方式或者post请求方式,选择带不带请求体。服务器收到请求后,都会有个带消息体的返回流,这是不能选择的。即服务器返回的流都带有消息体!!!!
10.服务器返回的流都带有消息体!这个不能选择,请求流中程序员可以自己选择带不带请求提,即用get或者post请求。
11.http,一来一回才代表完整的请求。来,回。来,是去向服务器,选择get或者post。回,是服务器返回,都带有消息体。
一来一回,也就是http的底层,tcp,都带有两个方向的流。


12.httpclient使用方法:
要引入3个jar包:httpclient jar包和http-core jar包和commos-logging jar包,httpclient是Apache研发的,这三个jar包夜都是Apache研发的
// 创建默认的客户端实例
HttpClient httpCLient = new DefaultHttpClient();
// 创建get请求实例
HttpGet httpget = new HttpGet("http://www.baidu.com");
// 客户端执行get请求 返回响应实体
HttpResponse response = httpCLient.execute(httpget);
// 服务器响应状态行
System.out.println(response.getStatusLine());

Header[] heads = response.getAllHeaders();
// 打印所有响应头
for(Header h:heads){
System.out.println(h.getName()+":"+h.getValue());
}

// 获取响应消息实体
HttpEntity entity = response.getEntity();
if(entity != null){

//响应内容
System.out.println(EntityUtils.toString(entity));

System.out.println("----------------------------------------");
// 响应内容长度
System.out.println("响应内容长度:"+entity.getContentLength());
}


13.Junit的测试用例中,是无法使用log4j记录日志的。因为log4j是伴随着项目启动而启动的。而项目的启动,是不启动junit的。所以两者的启动时间不一样。
解决办法:junit单元测试使用log4j
直接在src 的根目录下,建立log4j.property文件.
系统启动后会自动加载这个文件.
这样就ok了.
http://www.educity.cn/wenda/118857.html

14.post 请求可不可以在url中加参数,可以?key=value
答:可以,GET 有限制,POST两个地方都可以

15.get的参数是跟在url后面,那post的参数是加在什么地方。
get的参数在Url后面跟一个?,然后是参数列表。也就是参数在http请求的请求头中
post的参数在http请求的请求体中,并且是经过urlencode编码的

16.抓包,就是抓取http发送的数据包。发送的包,
HTTPwatch抓包工具 抓的post数据怎么都是分隔开的。
点post数据 右边的“流” ,上面是Header 空行下面就是实际的post数据流!
“POST数据” 这页,分开,只是便于查看!

17.2.在Composer面板中的第一个下拉框中选择Post请求方式。

3.填写请求的URL,比如:
http://10.134.218.34:8080/starCWebEvaluation/jaxrs/weightSetService/saveTotalWeightOfEvaluation

4.fiddler抓包工具模拟post请求
Request Headers中输入:
Content-Type: application/json; charset=utf-8
Content-Length: 398 (也可以不输入)

5.在Request Body中输入json数据,比如:
{
“siteId”:”680004011001571”,
“learnTimeWeight”:30,
“workWeight”:30,
“testWeight”:30,
“forumWeight”:30,
“status”:1
}
6.点击Execute执行,若结果返回200表示操作成功!
http://blog.csdn.net/dodan/article/details/52082099

7.Junit对Spring Controller进行单元测试
:首先要明白用junit启动spring 和spring mvc。要引入spring的启动文件@(locations={“classpath:applicationContext.xml”})
如下:
所以在测试类中有使用到注解:

@RunWith(SpringJUnit4ClassRunner.class)

设置运行方式

@(locations={“classpath:applicationContext.xml”})
引入配置文件

8.平时对junit测试service/DAO层已经很熟悉不过了,如果不了解,可以猛戳这里,但是我们要测试controller层,不能总重启服务器吧,(重启tomcat好慢的飘过,别。。。别走啊),那么我们就用junit4模拟请求,测试controller层的方法。

20.MockMvc为spring测试下的一个非常好用的类
21.spring mvc测试框架:通过相应的Mock API进行模拟测试,无须启动服务器
22.spring 集成测试中 对mock 的集成实在是太棒了!但是使用请注意一下3个条件。

 

junit 必须使用4.9以上

同时您的框架必须是用spring mvc

spring 3.2以上才完美支持

24.EasyMock 使用方法与原理剖析
Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。
Mock 对象能够模拟其它协同模块的行为,被测试模块通过与 Mock 对象协作,可以获得一个孤立的测试环境。此外,使用 Mock 对象还可以模拟在应用中不容易构造(如 HttpServletRequest 必须在 Servlet 容器中才能构造出来)和比较复杂的对象(如 JDBC 中的 ResultSet 对象),从而使测试顺利进行。

25.Junit中怎么只运行一个测试方法?(@Test方法)?:选中方法名,右键run as junit test
26.java string中包括"name"双引号怎么办?答:用反斜线转义字符修饰双引号。 如:String temp = "\"name\"";注意是反斜线。
27.string中indexof()方法,返回第一个出现字符串的位置。
28.jsonObject怎么用?答:将json字符串转换为jsonObject对象,jsonObject对象类似于hashmap那样,可以通过get(key)方法获得对应的值。
什么叫json字符串?一种特殊格式的字符串。能方便的转换为jsonObject。
29.所以jsob的用途就是,传输json字符串。方便读取解析出来数据。
30.A传数据给B,A将对象转换为JSON字符串,B将json字符串反解析出来,反解析成json对象,然后jsonobject读取。
31.JSON字符串就是一种传输格式,传世的字符串规范。
32.使用介绍:
Fastjson的最主要的使用入口是com.alibaba.fastjson.JSON

import com.alibaba.fastjson.JSON;

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

33.具体使用办法:
1.将javebean转换为json字符串:
User user = new User();
user.setAge(3);
user.setNameString("tom");
user.setPhoneString("21314862847");
String userJsonString = JSON.toJSONString(user);
2.将json字符串转换为javebean,这是无法的。fastjson是无法将json字符串直接转换为java bean的。spring mvc可以直接将json字符串转换为java bean的。用request body。
User user = new User();
user.setAge(3);
user.setNameString("tom");
user.setPhoneString("21314862847");
String userJsonString = JSON.toJSONString(user);
User tempUser = (User) JSON.parse(userJsonString);//这里会报错,无法将jsonobject转换为java bean

posted @ 2017-02-10 20:33  跨境电商杂货铺  阅读(325)  评论(3编辑  收藏  举报