为了通用,从头到尾都是utf-8.
而webwork中JakartaMultiPartRequest对于多编码的处理并不如意.
apache的fileupload对于上传文件名为中文的需要首先指定HeaderEncoding的编码.
而webwork对于MultiPartRequest的request并没有设置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, 那么默认采用request的encoding,如果request也没有指定则采用系统的编码.
这里并没有指定request的encoding,往往导致上传文件的名字乱码.
自定义一个MultiPartRequest,设定一下就ok了
对于同时提交的表单域(form)参数,由于在form中指定的enctype的关系,并不能直接用request.getParameter()才取, 只能通过FileItem.getString()的方式.这里也是上面的问题, 取的CharacterEncoding是request中的,由于webwork的原因不一致.同样需要指定一下.
这样form和上传同时提交,参数,附件名都正常了 :)