2011/11/22
Java Thread.interrupt
2010/01/17
package security;
在QMaster分类里记录的相关源码是个人认为写得比较好、比较有用(可复用程度比较高)的一部分,并非QMaster的全部源码。欢迎评论。
MD5.java
/**
* 功能:MD5加密
*/
package security;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
public class MD5 {
public static String md5Encoder(String pwd) throws NoSuchAlgorithmException {
MessageDigest md5 = MessageDigest.getInstance(“MD5”);
BASE64Encoder base64en = new BASE64Encoder();
return base64en.encode(md5.digest(pwd.getBytes()));
}
}
package db;
在QMaster分类里记录的相关源码是个人认为写得比较好、比较有用(可复用程度比较高)的一部分,并非QMaster的全部源码。欢迎评论。
dbconfig.xml
<?xml version=”1.0″ encoding=”GB2312″?>
<!–数据库配置文件–>
<dbconfig>
<jdbcdriver>com.mysql.jdbc.Driver</jdbcdriver><!–JDBC Driver–>
<jdbcurl>jdbc:mysql://localhost:3306/questionnaire</jdbcurl><!–JDBC URL–>
<dbuser>root</dbuser><!–数据库用户名–>
<dbpwd>yarpee19890607</dbpwd><!–数据库密码–>
</dbconfig>
DBConfig.java
/**
* 功能:解析dbconfig.xml文件,提供数据库配置。
*/
package db;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
2009/12/26
浅谈字符集
强烈推荐一篇文章:理解字符编码
在写程序的过程中,字符集的问题遇到过N多。查查改改,解决问题,一直没有总结。这段时间做J2EE的项目,遇到了更多的字符集问题,在解决的过程中收获不少。写篇文章浅谈下字符集问题。
个人将字符集粗分为两大类:ASCII和UNICODE。简单介绍下它们:
众所周知,计算机是美国人发明的。因此,为了方便使用计算机,那么计算机起码要能表达他们(美国人)的语言。这也就是ASCII(美国信息交换标准代码)的由来了。计算机的最小信息单位是位(bit),但更常用的基本信息单位是字节(Byte),它们之间的转换是1Byte = 8bits(为什么是8而不是2、4、16等,我就不得而知了)。ASCII又分基础的(7位,最高位用作奇偶校验)和扩展的(8位),最多能表示256个字符。这对于表示全世界的语言字符是不可能的,因此有了UNICODE。
UNICODE简单的来说就是,用两个字节(16位)来表示一个字符。但是基于不同的考虑(如存储空间)又有UTF-8、UTF-16、UTF-32等不同的格式,这里就不详细介绍了。
正是ASCII和UNICODE给我们带来了字符集问题。一个比较好的程序,应该要能支持UNICODE。对于我们(中国人),更是如此,因为我们使用的是汉字而不是英文。接下来,我要以一个不完全的Java Web Server例子来说说个人的理解。
OS(Windows、Unix、Linux等)、Java、MySQL在全世界流行,因此很容易预见到它们都是支持ASCII和UNICODE的。先说说OS,个人用的是Windows XP(中文版)(Windows对于本地化的支持有个“代码页”的概念,在此不详细介绍),很容易知道OS的字符集是UNICODE的GBK。对于运行在该OS上的Java平台,也是如此。而MySQL对字符集的支持主要表现在它的存储。
在例子中,MySQL采用latin1(称之为ASCII或者ISO-8859-1都行),而JSP采用GB2312。
问题一:JSP page指令中的pageEncoding属性指定的字符集是指该JSP页面被打开时,OS用哪种字符集格式读取。这就相当于你在记事本里写篇文字(即有英文又有中文),保存的格式。如果为ASCII,则中文会丢失原有的信息,为UNICODE则能正常显示。因此,其实只要你在该JSP里面的注释仅有英文,是可以设置该属性为ISO-8859-1的。
问题二:JSP page指令中的contentType=”text/html;charset=gb2312″和HTML中的<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />意思一样,都是指该页面由浏览器解析时采用的字符集。
问题三:Java中所有字符都是两个字节,无论是ASCII还是UNICODE,但是建议你不要简单地认为它就是UNICODE。而网络上传输的字符是ISO-8859-1(1Byte)的(因为网络传输是基于字节流的)。所以前一个JSP页面的中文参数采用POST方法传到后一个页面接收后,它是乱码。详细:一个汉字两个字节都有数据**(GB2312),网络传输成* *(ISO-8859-1),后一个页面接收后成#* #*(GB2312)两个汉字四个字节。(*表示数据,#表示未知,空格表示字符间隔)当然乱码了。重新组合下new String(data.getBytes(“ISO-8859-1”))就好了(默认采用页面charset编码组合即GB2312)。采用GET方法则要在前一个页面先将中文编码后再在URL中传递参数:String msg = java.net.URLEncoder.encode(“中文”, “UTF-8”);在后一个页面取得msg后,对应的使用new String(msg.getBytes(“ISO-8859-1”), “UTF-8”)或者java.net.UREDecoder.decode(msg, “UTF-8”);。
2009/12/20
JavaMail
J2EE项目里有用到JavaMail,研究了下。下面是参考资料和我的JavaMail:
package mail;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mail {
private Properties props;//系统属性,可以get和put属性名值对。
private Session session;//根据系统属性设置会话
private Message msg;//MimeMessage为其子类
//管理员SMTP服务器信息
private String host;
private String username;
private String password;
private String from;
public Mail(String host, String username, String password, String from) {
props = System.getProperties();
//props.put(“mail.smtp.host”, “smtp.jspinsider.com”);
props.put(“mail.smtp.host”, host);
props.put(“mail.smtp.auth”, “true”);
session = Session.getDefaultInstance(props);
msg = new MimeMessage(session);
this.host = host;
this.username = username;
this.password = password;
this.from = from;
}
public void send(String to) throws MessagingException {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject(“测试”);
msg.setText(“测试”);
Transport transport = session.getTransport(“smtp”);
transport.connect((String)props.get(“mail.smtp.host”), username, password);
transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
transport.close();
//Transport.send(msg);
}
}