做了两年半的iOS,偶尔也去做点Android的东西(不过实在拿不出手),突然感觉对于自己接触了两年半的移动端服务一窍不通,甚是感觉无力,虽然之前也学过一点JSP的东西可是那都是上学的事情了,可是突然感觉我要去做服务器的东西,从没有这么冲动的去学东西,之前接触iOS和Android都是为了好奇,可是这一次是那么的强烈。就从JSP开始一点一滴的做起…
首先是字符编码的各种乱码。我们需要把默认的"ISO-8859-1",转化为中文的支持,比如utf8,GB2312 ,GBK的编码。方法友好有坏都能解决问题,你可以在每个页面都设置,也可以一劳永逸进行全局设置。
1.手动每个页面添加
【思路】写一个全局的类进行转化
public class Request {
private static final String Request_Origin_Encoding = "ISO-8859-1";
private static final String Request_Convert_Encoding = "utf8";
public static Map<String, String> parameterNames(HttpServletRequest request)
throws UnsupportedEncodingException {
// request.setAttribute(arg0, arg1);
Enumeration<String> enumerator = request.getParameterNames();
Map<String, String> map = new HashMap<String, String>();
while (enumerator.hasMoreElements()) {
String key = (String) enumerator.nextElement();
String value = request.getParameter(key);
map.put(key, new String(value.getBytes(Request_Origin_Encoding),
Request_Convert_Encoding));
}
return map;
}
public static String getConvertParameter(HttpServletRequest request,
String parameterName) {
Map<String, String> map;
try {
map = parameterNames(request);
return map.get(parameterName);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
2.使用FIlter进行转化,这个独有JSP和servlet都使用
【思路】首先,配置这个Filter,其次,在Filter中转化
1⃣️1配置:配置为转化为utf8的编码,并初始化参数encoding为utf8
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<servlet-name>*</servlet-name>
<url-pattern>*</url-pattern>
</filter-mapping>
2⃣️2Filter转化编码
//初始化数据
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
this.encoding = fConfig.getInitParameter("encoding");
}
编码转化:将默认的ISO-8859-1转化为utf8
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
//request.setCharacterEncoding(encoding);
//response.setCharacterEncoding(encoding);
response.setContentType("text/html");
Enumeration<String> enumeration = request.getParameterNames();
Map<String, String[]> paramMap = request.getParameterMap();
for (String key : paramMap.keySet()) {
String[] values = paramMap.get(key);
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"), this.encoding);
}
}
while (enumeration.hasMoreElements()) {
String parameName = (String) enumeration.nextElement();
String value = request.getParameter(parameName);
}
// pass the request along the filter chain
chain.doFilter(request, response);
}