最近做毕业设计,使用S2SH完成项目时,遇到了JSP传值乱码。刚开始在网上搜索,有通过JSP页面编码解决的,还要strus.xml设置解决,还要设置tomcat的。
我不知道这是遇到了什么问题,本来我的页面编码全部统一用的UTF-8,但是还是出现乱来,于是查资料好像是中文转码问题。于是便携了一个工具类,来完成转码。
做一下笔记:
实体类
package com.test;
public class User {
private int id;
private String name;
private String address;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
转码工具类:
package com.test;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
public class TransCharsetUtil {
public static Class trans(Object obj) {
Class cla = obj.getClass();
Method[] me = cla.getDeclaredMethods();
try {
for (Method method : me) {
// 出来set方法
if (method.getName().startsWith("set")) {
//System.out.println("set方法: " + method.getName());
String str = method.getName().substring(
method.getName().indexOf("set") + 3);
// 得到get方法
Method mm = cla.getMethod("get" + str);
//System.out.println("get方法 : " + mm.getName());
// 得到get方法返回值类型
Type resultType = mm.getGenericReturnType();
// 只有当返回值类型为String类型时才转换
if (resultType.equals(String.class)) {
// 执行get方法得到返回值
String resultStr = (String) mm.invoke(obj);
System.out.println("未转码前反射类get方法返回值 :" + resultStr);
// 如果返回值不为空,则执行转码
if (resultStr != null) {
String stransStr = new String(
resultStr.getBytes("ISO-8859-1"), "UTF-8");
System.out.println("反射类转换后的 值: " + stransStr);
method.invoke(obj, stransStr);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return cla;
}
}
测试类
package com.test;
import java.io.UnsupportedEncodingException;
public class Test {
public static void main(String[] args) {
User user = new User();
user.setId(1);
try {
user.setName(new String("中文转换测试".getBytes("UTF-8"),"ISO-8859-1"));
user.setAddress(new String("地址".getBytes("UTF-8"),"ISO-8859-1"));
user.setDescription(new String("描述".getBytes("UTF-8"),"ISO-8859-1"));
System.out.println("==========转换前信息 : ========\n" + user.getId()
+ "," + user.getName() +"," + user.getAddress()
+ "," + user.getDescription());
TransCharsetUtil.trans(user);
System.out.println("==========转换后信息 : =========\n" + user.getId()
+ "," + user.getName() +"," + user.getAddress()
+ "," + user.getDescription());
//TransCharsetUtil.trans(user);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
以上完成,在项目中可以将JSP页面传过来的User对象转码,只需在Action类中引用就行。