為了通用,從頭到尾都是utf-8.
而webwork中JakartaMultiPartRequest對(duì)于多編碼的處理并不如意.
apache的fileupload對(duì)于上傳文件名為中文的需要首先指定HeaderEncoding的編碼.
而webwork對(duì)于MultiPartRequest的request并沒有設(shè)置encoding編碼
詳見DispatcherUtils.java中 387行
????????
if
?(encoding?
!=
?
null
?
&&
?
!
MultiPartRequest.isMultiPart(request))?
{

????????????
try
?
{
????????????????request.setCharacterEncoding(encoding);

????????????}
?
catch
?(Exception?e)?
{
????????????????LOG.error(
"
Error?setting?character?encoding?to?'
"
?
+
?encoding?
+
?
"
'?-?ignoring.
"
,?e);
????????????}
????????}
如果沒有指定HeaderEncoding, 那么默認(rèn)采用request的encoding,如果request也沒有指定則采用系統(tǒng)的編碼.
這里并沒有指定request的encoding,往往導(dǎo)致上傳文件的名字亂碼.
自定義一個(gè)MultiPartRequest,設(shè)定一下就ok了
對(duì)于同時(shí)提交的表單域(form)參數(shù),由于在form中指定的enctype的關(guān)系,并不能直接用request.getParameter()才取, 只能通過FileItem.getString()的方式.這里也是上面的問題, 取的CharacterEncoding是request中的,由于webwork的原因不一致.同樣需要指定一下.
這樣form和上傳同時(shí)提交,參數(shù),附件名都正常了 :)