Java mail.jar发送邮件
Jbuilder 可以运行发送邮件,发布到服务器上 也打包了 mail.jar,但是发布了就是不能发送
邮件。后来发现C:\Program Files\Java\jdk1.6.0_16\jre\lib\ext 必须要包含mail.jar
Jbuilder 可以运行发送邮件,发布到服务器上 也打包了 mail.jar,但是发布了就是不能发送
邮件。后来发现C:\Program Files\Java\jdk1.6.0_16\jre\lib\ext 必须要包含mail.jar
我需要两个线程访问同一个List。
一个线程不停的往List中add数据。
一个线程往外get数据,get一条,remove一条。
ArrayList不是线程安全的 所以 synchronized 必须有 这一点是关键,其他的都是浮云。还有 两个线程sleep一会更好 否则 这个跟死循环一样了 机器受不了啊!。
public static List list = new ArrayList(); public static void main(String[] args) { Test tt = new Test(); myThreadClass1 thread1 = tt.new myThreadClass1(); myThreadClass2 thread2 = tt.new myThreadClass2(); Thread t1 = new Thread(thread1); Thread t2 = new Thread(thread2); t1.start(); t2.start(); } private synchronized Object getList(int index) { return list.get(index); } private synchronized List getLists() { return list; } private synchronized void setList(Object obj) { Test.list.add(obj); } private synchronized void removeList(int index) { Test.list.remove(index); } class myThreadClass1 implements Runnable { public void run() { int i = 0; while (1==1) { i++; setList("第一个------>" + i); System.out.println("第一个------>" + i); } } } class myThreadClass2 implements Runnable { public void run() { while(1==1){ if(list.size() > 0){ for(int i = 0; i < getLists().size() ; i++){ System.out.println("移除———————>"+getList(i)); removeList(i); } }else{ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
需要对list进行同步,保证只有一个线程在操作list。 class myThreadClass1 implements Runnable { public void run() { while(1 == 1){ synchronized (Test.list) { Test.list.add("123"); } Thread.yield(); // 别让他老是占着CPU啊 } } } 在向外取的时候,不允许别人向里加,所以需要同步list。 class myThreadClass2 implements Runnable { public void run() { while (true) { synchronized (Test.list) { if (!Test.list.isEmpty()) { String item = Test.list.get(0); System.out.println(item); Test.list.remove(0); } } Thread.yield(); // 别让他老是占着CPU啊 } }
原文链接http://zhidao.baidu.com/question/233617957.html
威瑞信–英文名为Verisign,这家注册局提供注册的域名后缀有.com/.net/.cc/.edu/.cc/.jobs/.name。不同的域名注册局提供的域名的后缀不一样。之前已经说了成为国际顶级域名注册商的流程,当你成功申请到国际顶级域名注册商资格的时候,下一步就是需要写域名注册的接口程序了,这个接口程序要跟你公司的业务系统联系在一起,比如当你的客户交了钱之后,可以自助申请注册域名,然后制定你自己的域名价格。
因为verisign是不保存域名注册者的详细信息的,所以注册商要自己提供一个whois查询的接口,这个接口可以根据传入的域名,返回这个域名的注册详细信息,包括注册所有者,技术联系人,财务联系人等等。。
此外中文域名也在这个接口里面,比如 新浪.com,这个就属于IDN的域名了,也在这个域名注册接口中。
申请成为国际域名注册商的流程是这样的。
1.得到ICANN的认证,然后ICANN会给你一个ssl的证书,你拿着这个证书可以到任何一家注册局去申请注册域名的接口(不过要想拿到ICANN的授权证书不容易的,要求挺多,大体上的要求就是公司的注册资金,公司的规模,以及公司每个月的域名注册量能达到多少。等等要求)
2.拿着ICANN的证书去域名注册局申请注册权,申请下来之后你就是域名注册商。他们会给你一个账户信息,起初会给你两个账号和密码,还有一个OT&E(这里解释一下OT&E的意思,就是你自己写域名注册接口的时候,测试的环境,那个环境跟真实的域名注册是一样的,所以只要在OT&E上测试通过了,你转成正式的注册接口之后肯定会成功的)的地址。然后具体的SSL通信过程,证书本地的安装,以及TLD的发送结构,全得由自己开发,默认情况下注册局都会提供一个接口程序的SDK开发包,用这个开发包写注册接口的时候要轻松很多,不用了解底层的SSL的通信协议。
3.拿着注册局给的账户信息在本地开发测试。等程序开发基本完毕之后,联系注册局开始参加 OT&E,就跟考试一样。注册局会给你一个时间段,这个时间段是你和注册局商量着定的,(因为注册局大多都在国外,一般选择的时间要注意时区,我们中国是东八区,在于注册局发送邮件交流的时候要注册时间格式,不然老外看到的时间跟你发送的时候不一样。最终测试的时间也就不一样),比如商量 好下午1点到4点测试,那么在段时间里,你要完成OT&E的实战操作,比如让你新建一个域名,删除一个域名,再转移一个域名(因为给你的账户是两个,所以就可以用这两个账户来回转了),如果在给定时间给没做完或是操作中出现问题的,得需要重新商量时间测试。。直到你测试完全通过了。。
4,等程序测试通过之后,一般暂时不会给你正式账户信息,会让你再做一个财务上的确认。。往注册局账户打上指定的金额之后,确认你那账户里有钱了之后,注册局会给你正式的账户信息,还有正式的域名注册API地址
5.至此申请过程基本完成,你可以登陆相应注册局查看你域名注册情况,以及账户余额
(注册局的收费一般是这样的,每个月的域名达到一定的数量之后会返款到你账户里,不过返的不是太多)
原文链接:http://www.ehelper.com.cn/blog/post/domain-api-process_1821.html
另外恭喜爱名网获得Icann认证,http://www.22.cn/news/message/2011-03-05-636.html,如果该注册商申请下来后,相信爱名网会在国内各大平台的国际域名业务中优势更加明显和突出。
在jbuilder里可以运行的sql的 打包成jar后 用cmd运行报错:
加载驱动器有错误:com.microsoft.jdbc.sqlserver.SQLServerDriver
原因是bat文件里没有将3个sql的jar包加进去
xml文件—-myXML.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="UTF-8"?> <MyXML xmlns="http://www.ttt.com/ttt-TrdInfo-1-0" xmlns:x="http://www.ttt.com/ttt/metadata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="res286.xsd"> <Hdr> <ReqId>001</ReqId> <Tid>1002</Tid> <Cid>500</Cid> <user>cuishen</user> <Mname>supermarket</Mname> <pwd>543200210</pwd> </Hdr> <Car> <Flg>T</Flg> <Cod>ccc</Cod> <Door>kkk</Door> <mktId>b01</mktId> <Key> <KeyID>t01</KeyID> </Key> </Car> </MyXML> |
下面是用dom4j解析上面xml文件的java源文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.io.File; import java.util.List; import java.util.Map; import java.util.HashMap; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.XPath; import org.dom4j.Attribute; import org.dom4j.io.SAXReader; import org.dom4j.DocumentException; public class ReadMyXML{ public static void main(String args[]){ File xmlFile = new File("c:/myXML.xml"); SAXReader xmlReader = new SAXReader(); try{ Document document = xmlReader.read(xmlFile); ///*测试代码 适用于读取xml的节点 HashMap xmlMap = new HashMap(); xmlMap.put("mo","http://www.ttt.com/ttt-TrdInfo-1-0"); XPath x = document.createXPath("//mo:ReqId"); x.setNamespaceURIs(xmlMap); Element valueElement = (Element)x.selectSingleNode(document); System.out.println(valueElement.getText()); //*/ }catch(DocumentException e){ e.printStackTrace(); } } } |
上面就是运用dom4j解析带命名空间的xml文件的节点的例子,只要给XPath设置默认的命名空间就行了,这个xml文件尽管定义了其他命名空间,但是没有用到它,所以不必管它,那个HashMap里的键是随便定义的字符串,值就是默认的命名空间对应的字符串。 document.createXPath()里传的参数是要读取的节点的XPath,即“//”+ HashMap里的键名 + “:”+ 要读取的节点名组成的字符串
如果要读取的是xml文件里的属性该怎么办,原理一样,只要在造XPath字符串的时候在属性前加个“@”就行了。
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="UTF-8"?> <MyXML xmlns="http://www.ttt.com/ttt-TrdInfo-1-0" xmlns:x="http://www.ttt.com/ttt/metadata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="res286.xsd"> <Hdr ReqId="001" Tid="1002" Cid="500" user="cuishen" Mname="supermarket" pwd="543200210"/> <Car Flg="T" Cod="ccc" Door="kkk" mktId="b01"> <Key KeyID="t01"/> </Car> </MyXML> |
解析上面xml文件的java文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.io.File; import java.util.List; import java.util.Map; import java.util.HashMap; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.XPath; import org.dom4j.Attribute; import org.dom4j.io.SAXReader; import org.dom4j.DocumentException; public class ReadMyXML2{ public static void main(String args[]){ File xmlFile = new File("c:/myXML2.xml"); SAXReader xmlReader = new SAXReader(); try{ Document document = xmlReader.read(xmlFile); ///*测试代码 解析xml的属性 HashMap xmlMap = new HashMap(); xmlMap.put("mo","http://www.ttt.com/ttt-TrdInfo-1-0"); XPath x = document.createXPath("//mo:Hdr/@ReqId"); x.setNamespaceURIs(xmlMap); Attribute valueAttribute = (Attribute)x.selectSingleNode(document); System.out.println(valueAttribute.getText()); //*/ }catch(DocumentException e){ e.printStackTrace(); } } } |
写了一个jsp文件 调用了其他的类的方法,但是当把那个方法改掉之后,还是会调用之前的方法。
就像是缓存一样。最后终于发现原来是路径的问题。因为那个文件根本不在webmodule下对应的class里。
所以一直编译的就像缓存一样。
1、利用System.getProperty()函数获取当前路径:
System.out.println(System.getProperty(“user.dir”));//user.dir指定了当前的路径
2、使用File提供的函数获取当前路径:
File directory = new File(“”);//设定为当前文件夹
try{
System.out.println(directory.getCanonicalPath());//获取标准的路径 System.out.println(directory.getAbsolutePath());//获取绝对路径
}catch(Exceptin e){}
File.getCanonicalPath()和File.getAbsolutePath()
大约只是对于new File(“.”)和new File(“..”)两种路径有所区别。
# 对于getCanonicalPath()函数,“.”就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹
# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径
# 至于getPath()函数,得到的只是你在new File()时设定的路径
比如当前的路径为 C:\test :
File directory = new File(“abc”);
directory.getCanonicalPath(); //得到的是C:\test\abc
directory.getAbsolutePath(); //得到的是C:\test\abc
direcotry.getPath(); //得到的是abc
File directory = new File(“.”);
directory.getCanonicalPath(); //得到的是C:\test
directory.getAbsolutePath(); //得到的是C:\test\.
direcotry.getPath(); //得到的是.
File directory = new File(“..”);
directory.getCanonicalPath(); //得到的是C:\
directory.getAbsolutePath(); //得到的是C:\test\..
direcotry.getPath(); //得到的是..
另外:System.getProperty()中的字符串参数如下:
System.getProperty()参数大全
# java.version Java Runtime Environment version
# java.vendor Java Runtime Environment vendor
# java.vendor.url Java vendor URL
# java.home Java installation directory
# java.vm.specification.version Java Virtual Machine specification version
# java.vm.specification.vendor Java Virtual Machine specification vendor
# java.vm.specification.name Java Virtual Machine specification name
# java.vm.version Java Virtual Machine implementation version
# java.vm.vendor Java Virtual Machine implementation vendor
# java.vm.name Java Virtual Machine implementation name
# java.specification.version Java Runtime Environment specification version
# java.specification.vendor Java Runtime Environment specification vendor
# java.specification.name Java Runtime Environment specification name
# java.class.version Java class format version number
# java.class.path Java class path
# java.library.path List of paths to search when loading libraries
# java.io.tmpdir Default temp file path
# java.compiler Name of JIT compiler to use
# java.ext.dirs Path of extension directory or directories
# os.name Operating system name
# os.arch Operating system architecture
# os.version Operating system version
# file.separator File separator (“/” on UNIX)
# path.separator Path separator (“:” on UNIX)
# line.separator Line separator (“\n” on UNIX)
# user.name User’s account name
# user.home User’s home directory
# user.dir User’s current working directory
tomcat下获得项目的绝对路径
private String projectName=”sz_pro”; // 你项目的名称
//获取当前项目的绝对路径
public String getPorjectPath(){
String nowpath; //当前tomcat的bin目录的路径 如 D:\java\software\apache-tomcat-6.0.14\bin
String tempdir;
nowpath=System.getProperty(“user.dir”);
tempdir=nowpath.replace(“bin”, “webapps”); //把bin 文件夹变到 webapps文件里面
tempdir+=”\\”+projectName; //拼成D:\java\software\apache-tomcat-6.0.14\webapps\sz_pro
return tempdir;
}
另外还有一个方法可以用来获取类的绝对路径(当前的classpath)
getClass().getResource(“/”).toString();
做OT&E的时候,要把rtk的现有包添加的Jbuilder中。
要先把对应的文件copy到当前的Project的src目录下,刷新就可以选择包
一开始以为东西坏了 然后重装还是一样。后来网上找了 居然有相同的情况,
主要是改一个启动的内存配置 路径是D:\Borland\JBuilder2006\bin\jbuild.config
# applications
vmmemmin 32m
vmmemmax 15%
vmparam -XX:MaxPermSize=128m
vmmemmax 15%原来75% 被我改成15%就可以 了