今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。
实现的思路是重载request的调取参数的几个方法,然后做下转换。
转换类用的是网上的ZHConverter,就不多讲了,看一个例子就好:
public class Test { public static void main(String[] args) throws Exception { // Instantiation will fetch the property file which load the Chinese character mappings ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED); String traditionalSrc = "有背光的機械式鍵盤"; String simplified = converter.convert(traditionalSrc); System.out.println(simplified); // Or String simplifiedSrc = "简体字"; String traditional = ZHConverter.convert(simplifiedSrc, ZHConverter.TRADITIONAL); System.out.println(traditional); } }
1. 首先实现一个filter
/** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // perform request filtering HttpServletRequest httpServletRequest = (HttpServletRequest) request; CharChangeHttpRequest requestWrapper = new CharChangeHttpRequest(httpServletRequest); // continue the filter chain chain.doFilter(requestWrapper, response); // perform response filtering }
2. 由于自己封装了HttpServletRequest, 下面是自己写的实现
public class CharChangeHttpRequest extends HttpServletRequestWrapper { public CharChangeHttpRequest(HttpServletRequest request) { super(request); } @Override public String[] getParameterValues(String name) { String[] value = super.getParameterValues(name); if(value == null){ return null; } else { String[] rValues = new String[value.length]; for(int i = 0; i < rValues.length; i++){ rValues[i] = convert(value[i]); } return rValues; } } @Override public String getParameter(String name) { String value = super.getParameter(name); if(value == null || value.length() == 0){ return value; } return convert(value); } private String convert(String value){ ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED); try { return converter.convert(new String(value.getBytes("iso-8859-1"),"utf-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } private String[] convert(String[] values){ String[] rValues = new String[values.length]; for(int i = 0; i < rValues.length; i++){ rValues[i] = convert(values[i]); } return rValues; } @Override public Map getParameterMap() { Map originMap = super.getParameterMap(); Map<String,String[]> newMap = new HashMap<String,String[]>(originMap); for (Iterator it = newMap.entrySet().iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry)it.next(); entry.setValue(convert((String[])entry.getValue())); } return Collections.unmodifiableMap(newMap); } }
由于时间有限,写的比较仓促,如有考虑不周情况,请大家批评指正。