91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Filter處理中文亂碼re

發布時間:2020-08-05 18:03:01 來源:網絡 閱讀:207 作者:智者無疆 欄目:開發技術

    在web中當頁面的編碼格式和服務器的編碼格式不一樣時,向服務器傳遞中文就會出現亂碼,那么如何解決呢?這里要分get請求和post請求,對于這兩種不同的請求有不同的處理處理方式,處理方式如下:


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處理中文亂碼的問題就說完了。











向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三都| 临沂市| 曲沃县| 南京市| 治多县| 北宁市| 筠连县| 噶尔县| 无锡市| 奉新县| 大庆市| 满洲里市| 丰镇市| 巴中市| 荥经县| 略阳县| 灵川县| 苏尼特左旗| 嘉义市| 夏河县| 仙游县| 阿克苏市| 桃源县| 青川县| 大安市| 岳阳市| 虹口区| 毕节市| 平舆县| 报价| 木兰县| 嵊泗县| 商水县| 邢台县| 长沙县| 叙永县| 确山县| 胶州市| 连州市| 绥宁县| 阳江市|