可以直接转换它的编码 也可用包装类实现
private String charset = "UTF-8";
public String convert(String city) {
System.out.println(city);
try {
return new String(city.getBytes("ISO8859-1"), charset);
} catch (UnsupportedEncodingException e) {
return city;
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String city= request.getParameter("city");
city = convert(city);
PrintWriter out = response.getWriter();
out.write(city);
}
还有一种以前讲过的是修改tomcat中的server.xml文件
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />在这个最后加上一句URIEncoding="UTF-8" 不建议采纳修改服务器的方法
还有就是动态代理的实现了 其实动态代理很简单 只起到中介左右 传递完就没它的事了
public class CharacterEncodingFilter implements Filter {
private String defaultEncoding = "utf-8";
private FilterConfig config = null;
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String charset= config.getInitParameter("charset");
if(charset == null){
charset = defaultEncoding;
}
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
response.setContentType("text/html;charset="+charset);
//用动态代理拦截getParameter()判断其方法为get还是post
chain.doFilter((ServletRequest) Proxy.newProxyInstance(CharacterEncodingFilter.class.getClassLoader(), request.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//判断方法是否是是get方法 如果不是 就不用增强 直接返回
if(!request.getMethod().equalsIgnoreCase("get")){
return method.invoke(request, args);
}
//如果传递进来的不是getParameter(),则不用增强
if(!method.getName().equals("getParameter")){
return method.invoke(request, args);
}
String value = (String) method.invoke(request, args);
if(value!=null){
value = new String(value.getBytes("ISO8859-1"),"UTF-8");
}
return value;
}
}), response);
}
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
public void destroy() {
}
}
private String charset = "UTF-8";
public String convert(String city) {
System.out.println(city);
try {
return new String(city.getBytes("ISO8859-1"), charset);
} catch (UnsupportedEncodingException e) {
return city;
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String city= request.getParameter("city");
city = convert(city);
PrintWriter out = response.getWriter();
out.write(city);
}
还有一种以前讲过的是修改tomcat中的server.xml文件
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />在这个最后加上一句URIEncoding="UTF-8" 不建议采纳修改服务器的方法
还有就是动态代理的实现了 其实动态代理很简单 只起到中介左右 传递完就没它的事了
public class CharacterEncodingFilter implements Filter {
private String defaultEncoding = "utf-8";
private FilterConfig config = null;
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String charset= config.getInitParameter("charset");
if(charset == null){
charset = defaultEncoding;
}
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
response.setContentType("text/html;charset="+charset);
//用动态代理拦截getParameter()判断其方法为get还是post
chain.doFilter((ServletRequest) Proxy.newProxyInstance(CharacterEncodingFilter.class.getClassLoader(), request.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//判断方法是否是是get方法 如果不是 就不用增强 直接返回
if(!request.getMethod().equalsIgnoreCase("get")){
return method.invoke(request, args);
}
//如果传递进来的不是getParameter(),则不用增强
if(!method.getName().equals("getParameter")){
return method.invoke(request, args);
}
String value = (String) method.invoke(request, args);
if(value!=null){
value = new String(value.getBytes("ISO8859-1"),"UTF-8");
}
return value;
}
}), response);
}
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
public void destroy() {
}
}