i found it's the Strut tag that's _NOT_ handling the utf-8 encoding correctly. I outputted the following on my result jsp after the chinese is inputted: Here, the 'name' is inputted in Chinese and encoded as utf-8: .... <H1> With the Bean Write tag </H1> NAME=====><bean:write name="loginForm" property="name"/> <BR> password ==><bean:write name="loginForm" property="password"/> <HR> <H1> With the standard Http request object </H1> Name==><%= request.getParameter("name")%><BR> password==><%= request.getParameter("password")%><BR> With the bean:write tag the name is printed out as ???, while the standard request object display the chinese characters correctly. Can someone clarify why this is the case? I thought this would not matter since reflection is doing the same call using request.getParameter("property") to map the input to the form's property.