使用Filter处理中文乱码re-创新互联

  在web中当页面的编码格式和服务器的编码格式不一样时,向服务器传递中文就会出现乱码,那么如何解决呢?这里要分get请求和post请求,对于这两种不同的请求有不同的处理处理方式,处理方式如下:

10年积累的成都网站制作、成都网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有站前免费网站建设让你可以放心的选择与我们合作。

1.post请求

post请求处理中文乱码相对简单,只需要在doPost()方法中设置请求的编码格式就行了,因为post请求的参数在请求体中。处理方式如下:

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {        request.setCharacterEncoding("utf-8");

     response.setContentType("txt/html;charset=utf-8")

      ......

}

2.get请求

  get请求不能像上面post那样来处理中文乱码问题,因为get请求的参数url地址栏中,那么此时就要使用getBytes(String s)方法对接收到的参数进行反编码,得到服务器编码的字节码,再调用new String(byte[] bytes,String s)获得编码后的字符串。处理方法如下:

       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       String name = request.getParameter("username");

       byte[] bytes = name.getBytes("ISO-8859-1");

       String value = new String(bytes,"utf-8");

       ......

       }

  说完了get请求和post请求两种请求处理中文乱码的方法,那么接下来说下如何把这两种处理方法引入到Filter中。我们不可能为每个请求都对其做中文乱码处理,那样会出现太多的代码冗余,此时就可以用过滤器来做,先让每个请求达到Servlet之前,先被过滤器拦截,等过滤器处理完之后再调用其chain.doFilter(request,response)方法对此请求放行,那么此时到达Servlet的每个请求都被处理过了,就不用考虑中文乱码问题了。对于get请求怎样拿到每次请求的参数名呢?这里需要重写request的getParameters(String name)方法,处理方法如下:

    public class MyRealRequest extends HttpServletRequestWrapper {    
        private HttpServletRequest request;
        public MyRealRequest(HttpServletRequest req) {
            super(req);
            request = req;
        }
        @Override
        public String getParameter(String name) {
            String value = request.getParameter(name);
            try {
        byte[] bytes = value.getBytes("ISO-8859-1");
        value = new String(bytes,"utf-8");
            } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
            }
            return value;
        }
    }

有了这个类,我们就可以用它来处理get请求的中文乱码问题,在Filter中处理方法如下:

public class CharacterFilter implements Filter {
    public void init(FilterConfig fConfig) throws ServletException {}
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        String method = req.getMethod(); 
        if(method.equals("POST")){
            req.setCharacterEncoding("utf-8");
            res.setContentType("text/html;charset=utf-8");
            chain.doFilter(req, res);
        }else if(method.equals("GET")){
            MyRealRequest realRequest = new MyRealRequest(req);
            res.setContentType("text/html;charset=utf-8");
            chain.doFilter(realRequest, res);
        }
    }
    public void destroy() {}
}

通过以上的处理中文乱码的问题就解决了,那么接下就需要配置Filter,使它对每个请求都运用这个操作。配置方法如下:

     <filter>

     <filter-name>CharacterFilter</filter-name>

     <filter-class>com.web.filter.CharacterFilter</filter-class>

     </filter>

     <filter-mapping>

     <filter-name>CharacterFilter</filter-name>

     <url-pattern>/*</url-pattern>

     </filter-mapping>

到此,使用Filter处理中文乱码的问题就说完了。

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。

分享标题:使用Filter处理中文乱码re-创新互联
文章地址:https://www.cdcxhl.com/article8/echop.html

成都网站建设公司_创新互联,为您提供用户体验网站收录营销型网站建设电子商务做网站服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设