eclipse调试java程序技巧

  categories:java资料  tags:  author:

java程序调试(debug)的九个技巧:

  1. 逻辑结构
  2. 条件debug
  3. 异常断点
  4. 单步过滤
  5. 跳到帧
  6. Inspect
  7. expressions
  8. display
  9. 远程debug

 

最早开始用eclipse的debug的时候,只会F5 F6 F7 F8,甚至F7都不是很搞的明白是怎么用的,那时候资浅,碰不到需要复杂debug的代码,慢慢工作深入了,场景碰多了,就需要各种debug技巧来提升 定位bug效率,以前找人帮忙排查问题,看他开各种窗口debug各种溜甚是羡慕嫉妒恨,慢慢久病成医自己也用溜了eclipse的一些主要的debug 技巧。稍作整理分享出来。

F5678这四个基本技能就略过不说了,但是最基本的技能能解决90%问题,所以虽然略过不说 ,但是必须用的很溜,相信园友达人们这四个肯定比我用的溜的多。

1. 逻辑结构

逻辑结构主要用来展示map之类的collection数据结构存储的值的,它只展示存储值的逻辑部分,而屏蔽了数据结构详细的内部结构,更方便我们查看map之类collection结构里存储的值,推荐使用。

这个按钮就是展示逻辑结构的按钮,下面两个图,上图是不展示逻辑结构,下图是展示逻辑结构,很明显,下图的结构可读性更强,可以专注于debug的变量。

 

2. 条件debug

条件debug用在需要满足某种条件才会触发断点的场景,比如只有id是12345这条记录会有问题,那就当id等于12345时才触发断点,其他都放过。

右击断点选择断点属性,就能看到这样一个配置框,右边的文本区块可以填写条件代码,比如id==12345,由于每次都要做这个判断,如果循环数很大的话,还是有点点慢的,你可以去上个厕所接个水啊什么的,还是很方便的。

 

 

 

 

 

 

 

 

 

 

 

 

阅读全文

Spring加载resource的写法

  categories:java资料  tags:  author:

我们会讨论两种加载资源的方法: classpth: 和file:

在使用spring时,经常会看到类似 classpth:、classpath*: 这样的前缀,不管是加载spring xml配置文件还是其配置文件中加载资源文件都会看到这两种前缀配置,其实这两种前缀是有区别的,下面将举例详细解释。

[一]、测试项目准备

我们以spring中加载properties资源文件为例讲解,目录结构大致如下:
src
├─main
│  ├─filters
│  │
│  ├─java
│  │  └─com
│  │      └─micmiu
│  │          ├─demoweb
│  │          │  │ ….
│  │          │  │
│  │          │  └─utils
│  … 阅读全文

jnetpcap简介

  categories:java资料  tags:  author:

通过Fiddler可以嗅探Http协议网络数据包, 如何在Java平 台下通过第三方包来进行底层网络嗅探。

Java平台本身不支持底层网络操作,需要第三方包利用JNI封装不同系统的C库来提供Java的上层接口。常用的类库包括 JPcap,JNetPcap等,他们都是基于TcpDump/LibPcap的Java封装。其中JPcap已经一年多没更新了,而JNetPcap (jnetpcap.com) 在上周刚刚发布了1.2 RC5版本,添加了很多实用的类库,诸如高级协议分析等,本文就以JNetPcap作为例子来进行介绍。

使用JNetPcap之前必须在目标系统中安装WinPcap(Windows系统),以提供JNetPcap所需要的链接库。另外要把JNetPcap包和所属的dll文件都加入到开发目录的环境变量中。

Pcap类是JNetPcap中最为核心的类,是一个对LibPcap中方法的Java直接映射,提供了取得网卡设备列表、打开嗅探、设置过滤器等等必须的工作。

一、获得网卡列表

通过Pcap.findAllDevs(alldevs, errbuf) 这个静态方法将所有本机网卡加入到alldevs的List<PcapIf >中。然后用户可以选择一个网卡进行监听。注意基于PPPOE拨号的网络连接在实际测试中似乎并不能被嗅探到,例如笔者的铁通连接无法被嗅探,其中 的问题还有待考证。

二、打开连接

调用Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf)静态方法,返回一个Pcap对象。其中5个参数分别表示设备的系统名称(不是设备别名)、每次捕捉的数据量、捕捉方式、超时和错误信息缓冲 区。推荐的参数配置在JNetPcap的文档中有详细说明,这里不再赘述。需要注意的是超时不宜过小,否则会造成数据包捕捉不完全的问题。时间至少应该保 证一个数据包完全接收。

三、开始监听
调用pcap.loop(int cnt, JPacketHandler<T> handler, T user) 方法即可进行监听,在loop方法的参数中有两点需要关注,第一点是用户指定的数据包分析器,在之后的文章中将详细介绍;第二点是一个泛型参数,表示传输 给分析器的用户指定类型的消息。

四、数据包分析

捕捉到数据包后当然要进行分析。在这里我们使用继承JPacketHandler来实现自己的处理方法。
在JPacketHandler有 一个nextPacket(JPacket packet, T user)

阅读全文

java读取jar包里资源

  categories:java资料  tags:  author:

下面是sts插件里的一段配置文件里面的代码

<uri name=”http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_0.xsd” uri=”jar:file:/E:/all-mybatis-mvc/sts-bundle-3.7.1-for-mybatis-mvc/sts-3.7.1.RELEASE/plugins/org.eclipse.jpt.common.eclipselink.core_1.3.100.v201308091549.jar!/schemas/eclipselink_orm_2_0.xsd”/>

下面是从网络上查找的 关于这个写法的相关情况

我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:

//源代码1:
package  edu.hxraid;
import  java.io.*;
public   class  Resource {
public    void  getResource()  throws  IOException{
File file= new  File( “bin/resource/res.txt” );
BufferedReader br= new  BufferedReader( new  FileReader(file));
String s= “” ;
while ((s=br.readLine())!= null … 阅读全文

Storm高级原语Trident API 综述

  categories:资料  tags:  author:
本文翻译自Storm wiki中的Trident API,部分地方加入了笔者自己的理解。

“Stream”是Trident中的核心数据模型,它被当做一系列的batch来处理。在Storm集群的节点之间,一个stream被划分成很多partition(分区),对流的操作(operation)是在每个partition上并行进行的。注:

①“Stream”是Trident中的核心数据模型:有些地方也说是TridentTuple,没有个标准的说法。

②一个stream被划分成很多partition:partition是stream的一个子集,里面可能有多个batch,一个batch也可能位于不同的partition上

Trident有五类操作(operation):

1、Partition-local operations,对每个partition的局部操作,不产生网络传输

2、Repartitioning operations:对数据流的重新划分(仅仅是划分,但不改变内容),产生网络传输

3、Aggregation operations:聚合操作

4、Operations on grouped streams:作用在分组流上的操作

5、Merge、Join操作

Partition-local operations

对每个partition的局部操作包括:function、filter、partitionAggregate、stateQuery、partitionPersist、project等。

Functions

一个function收到一个输入tuple后可以输出0或多个tuple,输出tuple的字段被追加到接收到的输入tuple后面。如果对某个 tuple执行function后没有输出tuple,则该tuple被过滤(filter),否则,就会为每个输出tuple复制一份输入tuple的 副本。假设有如下的function:

public class MyFunction extends BaseFunction {
public void execute(TridentTuple tuple, TridentCollector collector) {… 阅读全文

Java中JKS不同类型的keystore

  categories:资料  tags:,   author:

Java中JKS不同类型的keystore

JKS是Java中的keystore,keystore是java的密钥库、用来进行通信加密用的、比如数字签名。keystore就是用来保存密钥对的,比如公钥和私钥。具体用法,在网上搜java数字签名,文件加密就行了、有很多教程的。

接下来我们将展示如何使用纯Java代码的JKS keystore。

1.创建JKS的keystore

创建一个硕密钥库创建一个空的密钥库的最简单的方法。我们可以先得到密钥库实例,然后加载一个空库。加载后的空库,我们只需要为密钥的密钥。密钥名称和密码store()。

下面是一个简单的演示:

package cn.iigrowing.keystore.store;

import java.io.FileOutputStream;
import java.security.KeyStore;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class IigJavaStore {
    final static Logger logger = LoggerFactory.getLogger(IigJavaStore.class);

    public static void main(String[] args) throws Exception {
        try {
            KeyStore keyStore 
阅读全文

不同格式证书导入keystore方法

  categories:资料  tags:,   author:

Java自带的keytool工具是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。

    keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。

Java KeyStore的类型

JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS, JCEKS, PKCS12, BKS,UBER)。

JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。
jks(java key store):
java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般 是.jks或者.keystore或.truststore等,千奇百怪。不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已。比如把只包含”受 信任的公钥”的容器存成.truststore文件等。
用jdk\bin目录下的keytool.exe对其进行查看,导入,导出,删除,修改密码等各种操作。可以对jks容器加密码,输入正确才可以操作此容器中密钥。还有一个密码的概念与上者不同,是jks中存储着的私钥的密码,通常是绝密的。
JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。
PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。
BKS 来自BouncyCastle Provider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个 bit都会产生错误),BKS能够跟JKS互操作,读者可以用Keytool去TryTry。
UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish 加密,因此keystore能够防止被误改、察看以及校验。以前,Sun JDK(提供者为SUN)允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。

证书导入
Der/Cer证书导入:

要从某个文件中导入某个证书,使用keytool工具的-import命令:
  1. keytool -import -file mycert.der -keystore mykeystore.jks
如果在 -keystore 选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。… 阅读全文

mybatis集成spring的事务管理

  categories:资料  tags:, ,   author:

第一 创建一个测试实体

  1. public class Order {
  2.     private int id;
  3.     private String orderName;
  4.     public Order(String orderName) {
  5.         this.orderName = orderName;
  6.     }
  7.     public int getId() {
  8.         return id;
  9.     }
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.     public
阅读全文

MyBatis一对多和多对一

  categories:资料  tags:,   author:

在MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。

一、表

orders

建表语句:

CREATE TABLE `orders` (
`o_id` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) DEFAULT NULL,
`price` decimal(11,0) DEFAULT NULL,
PRIMARY KEY (`o_id`),
UNIQUE KEY `o_id` (`o_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

persons

建表语句:

CREATE TABLE `person` … 阅读全文

Spring事务配置的五种方式

  categories:java资料  tags:, ,   author:

前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。

总结如下:

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。

具体如下图:

Spring事务配置 (2)

根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

第一种方式:每个Bean都有一个代理

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:context=”http://www.springframework.org/schema/context”
xmlns:aop=”http://www.springframework.org/schema/aop”
xsi:schemaLocation=”http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”><bean id=”sessionFactory”
class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<property name=”configLocation” value=”classpath:hibernate.cfg.xml” />
<property name=”configurationClass” value=”org.hibernate.cfg.AnnotationConfiguration” />
</bean><!– 定义事务管理器(声明式的事务) –>
<bean id=”transactionManager”
class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory” 

阅读全文


快乐成长 每天进步一点点