客户端和服务器编码问题

来源:互联网 发布:union all 不同数据库 编辑:程序博客网 时间:2024/05/21 08:38

request 请求

request请求:

         post:

              request.setCharacterEncoding(“utf-8”);

         get(tomcat8和以上的不需要处理):

              Stringuname=request.getParameter(“uname”);

              uname=new String(uname.getBytes(“ISO-8859-1”),”UTF-8”);

              //把传入的中文解码成ISO-8859-1,然后转成utf-8编码

              Request.setAttribute(“unmae”,uname);

               //把转成utf-8的uname有放到requst中传过去给servlet



response响应:

response.setCharacterEncoding("UTF-8");//告知服务器

response.setHeader("content-type","text/html;charset=UTF-8"); //告知客户端

以上两句可以合并成一句

response.setContentType("text/html;charset=UTF-8");


代码

public class CharSetFilter implements Filter {




public void destroy() {
}


// 过滤方法,在这个方法中我们要对请求和响应进行处理
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
resp.setContentType("text/html;charset=UTF-8");
System.out.println("dofilter....");
// 根据不同的情况进行不同的处理
// 请求方式, 服务器版本
String method = req.getMethod();
// 得到服务器版本
String serverInfo = req.getServletContext().getServerInfo(); // Apache Tomcat/8.0.23

if("POST".equalsIgnoreCase(method)){
req.setCharacterEncoding("UTF-8");
chain.doFilter(req, resp);
}else{
int start = serverInfo.indexOf("/");
serverInfo = serverInfo.substring(start+1, start+1+1);
System.out.println(serverInfo);
int version = Integer.parseInt(serverInfo);
if(version<8){
/*String str = req.getParameter("name");
str = new String(str.getBytes("ISO-8859-1"),"UTF-8");*/
MyRequestWrapper myreq = new MyRequestWrapper(req);
chain.doFilter(myreq, resp);
}else{
chain.doFilter(req, resp);
}
}



}


public void init(FilterConfig fConfig) throws ServletException {
}


}


class MyRequestWrapper extends HttpServletRequestWrapper{
HttpServletRequest req = null;

public MyRequestWrapper(HttpServletRequest request) {
super(request);
req = request;
}

@Override
public String getParameter(String name) {
String temp = req.getParameter(name);
if(temp!=null){
try {

temp = new String(temp.getBytes("ISO-8859-1"),"UTF-8");

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return temp; // 正常的字符串了
}

}


阅读全文
0 0
原创粉丝点击