commons-beanutilslg是Jakarta Commons目l中的一个,可以到Jakarta官网上去下蝲。我们今天讨论的主要是commons-beanutils中的BeanUtilsq个c,q个c都是静态方法,可以很方便的操纵各个JavaBean对象Q包括获取属性、设|属性等Q我们以例子来进行说明?/p>
假设有如下一个JavaBean对象Q?/p>
public TestBean
{
private String stringValue;
private int intValue;
public void setStringValue(String value)
{
this.stringValue = value;
}
public String getStringValue()
{
return this.stringValue;
}
public void setIntValue(int value)
{
this.intValue = value;
}
public int getIntValue()
{
return this.intValue;
}
}
那么我们可以用BeanUtils来对其进行设|值和获取g。如下:(x)
TestBean tb = new TestBean();
BeanUtils.setProperty(tb, "stringValue", "hello world!");
BeanUtils.setProperty(tb, "intValue", 123);
通过上述的语句我们就可以l新new的对象设|两个属性了Q注意其中第一个参数就是我们的属性名Uͼq里也是我们在用这个工L(fng)时候最需要注意的地方。这个属性名U就是我们的TestBean中的getXXXҎ(gu)中的XXXQ比如getStringValue中其属性名U就是stringValueQ在使用属性名U的时候,除了XXX中的W一个字母不需要大写之外Q其他的部分是需要严格区分大写的,q也是JavaBean的规范?font color="#990000">q里有一炚w要特别注意的是Q如果属性名UCW一个单词(我们界定的)只有一个字母的话,那么其属性名U必d写!我们可以看这样一个例子:(x)
我们lTestBean加如下一个属性:(x)
……
public void setTName(String name)
{
this.name = name;
}
public void getTName()
{
return this.name;
}
……
那么在用BeanUtilsq行属性赋值的时候,如果你这样写Q?/p>
BeanUtils.setProperty(tb, "tName", "hello");
那么׃(x)被抛Z个异常,表示q个属性找不到Q?strong>因ؓ(f)按照JavaBean的规范,属性名UC如果有多个单词,则每一个单词的首字母要大写Q?/strong>q里BeanUtils׃(x)认ؓ(f)属性TName是两个单词,分别是T和NameQ所以取属性的时候第一个字母必要大写Q所以其属性就应该是;TNameQ那么我们就应该如下写操作语句:(x)
BeanUtils.setProperty(tb, "TName", "hello");
q样写才是正的。那么我们来看在B/Sl构的程序中Q如何将表单域的参数Q不一定是表单域,是参数都可以Q{换成一个JavaBean对象Q我们以上面的BeanZ子,我们在页面上q行~写如下Q?/p>
……
<form name="form1" action="/getbean.jsp">
字符串|(x)<input type="text" name="stringValue" /><br/>
数字|(x)<input type="text" name="intValue" /><br/>
</form>
……
然后我们在服务器端进行编写如下代码来获取参数Qƈl装成一个TestBean对象Q代码如下:(x)
……
TestBean tb = new TestBean();
BeanUtils.populate(tb, request.getParameterMap());
// 使用BeanUtils工具cL获取对象的属?br />
System.out.println(BeanUtils.getProperty("stringValue"));
System.out.print(BeanUtils.getProperty("intValue"));
// 直接获取对象的属?br />
System.out.println(tb.getStringValue());
System.out.println(tb.getIntValue());
……
我们注意刎ͼ在表单区域中~写的几个输入框的名UͼU色标识的部分)是我们的TestBean对象的属性名Uͼ然后服务器端的代码中Q我们首先用request.getParameterMap()来获取提交的参数Qƈ转换成一个map对象存储Q键是参数名Uͼ值是提交的|Q然后我们用BeanUtils的populateҎ(gu)来进行赋倹{通过打印后,我们可以看到我们输入的D成功的设|到对象中去了,可以看到单的两行代码可以搞定参数到对象的数据绑定工作,如果一个对象有十几个甚臛_十个参数属性的话,那么q样的方式将是非常简便的Q至可以少写十几行甚至几十行的代码?/p>
可以看到利用BeanUtilsq个工具cd以很方便的进行JavaBean的属性操作和request的参数到JavaBean的属性绑定操作。其他的功能大家可以参看它的API文档?br />
其实Jakarta Commons目l中q有很多实用的工L(fng),?common-io,common-lang,common-logging,common-pool{等.
利用javamail发送邮Ӟ你需要导入包mail.jar和activation.jarq两个包 Q否则是没法发邮件的 Q下辚w|文仉l色行显C的是发给两个接收者ac和ae?/font>
q里?x)出C文ؕ码问题,主要有两斚w的ؕ码,一是标题ؕ码;二是正文q。下边具体说明这两种q的解x案?
一?标题q
Log4J日志邮g的标题在配置文glog4j.properties里设定,如下
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=ab@163.com
log4j.appender.MAIL.SMTPHost=smtp@163.com
log4j.appender.MAIL.Subject= Log4J提醒(zhn):(x)pȝ发生了严重错?/font>
log4j.appender.MAIL.To=ac@163.com,ae@163.com
log4j.appender.MAIL.layout=com.sun.DefineLayOut
log4j.appender.MAIL.layout.LocationInfo=true
灰色的行是标题Qlog4J配置文g默认的读取方式是ISO-88591Q遇C文会(x)出现qQ我们可以把q个配置文glog4j.properties用jdk的工具native2asii转换一下编码方式?
命o(h)Qnative2asii log4j.properties log4jxx.properties
把这个log4jxx.properties改名为log4j.properties取代原来的log4j.propertiesok了?
灰色行重新编码后是:(x)
log4j.appender.MAIL.Subject=Log4J\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
二?正文q
正文qQ解决也比较单。阅读Log4J的源码类SMTPAppenderQ我们可以发现sendBuffer()Ҏ(gu)中有q样一句:(x)
part.setContent(sbuf.toString(), layout.getContentType());
我们l箋q踪发现l(f)ayout是配置文g里的layout属性对应的布局模式。但是这些布局模式都是l承自LayoutQ而contentType是只可通过getContentTypeҎ(gu)取得Q不能修攏V所有的布局模式getContentTypeҎ(gu)q回的都?#8221;text/plain”Q?
为处理中文ؕ码,我们可以写一个布局模式。如果你要用HTMLLayoutQ我们就写一个HTMLLayout的子c,覆盖HTMLLayout的getContentTypeҎ(gu)卛_。假如我要用org.apache.log4j.HTMLLayout。我们就可以写一个DefineLayOutc,代码如下Q?
package com.sun;
import org.apache.log4j.HTMLLayout;
public class DefineLayOut extends HTMLLayout{
public String getContentType() {
return "text/html;charset=GBK";
}
}
对应的配|文件设|如黄色行所C?nbsp;
呵呵,觉得W二点的思\不错,卌学会(x)怎样改开源的东西,以适合自已所需.