1. 程式人生 > >如何使用過濾器處理中文亂碼

如何使用過濾器處理中文亂碼

圖片 context port over insert except 技術 DDU 入參

如果瀏覽器提交數據給Servlet的時候含中文參數,那麽在Servlet中就要處理中文亂碼。如果有多個Servlet都要同時接收中文參數,那麽在Servlet中處理中文亂碼就比較麻煩。

解決辦法:使用過濾器處理中文亂碼。

技術分享圖片

處理post請求的亂碼

index.jsp代碼

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath }/AddUserServlet" method="post"> 用戶名:<input type="text" name="userName"
/><br> <input type="submit" value="提交" /> </form> <hr> <form action="${pageContext.request.contextPath }/AddProductServlet" method="post"> 產品名:<input type="text" name="productName" /><br> <input type="submit" value="提交" /> </form>
</body> </html>

AddUserServlet.java類代碼(Servlet 業務處理)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddUserServlet
 */
@WebServlet("/AddUserServlet")
public class AddUserServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取文本框輸入參數
        String userName=request.getParameter("userName");
        System.out.println("userName="+userName);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

AddProductServlet.java類代碼(Servlet 業務處理)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddProductServlet
 */
@WebServlet("/AddProductServlet")
public class AddProductServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取文本框輸入參數
        String productName=request.getParameter("productName");
        System.out.println("productName="+productName);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

創建一個CharacterEncodingFilter類來實現Filter接口,並實現Filter所有方法

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        chain.doFilter(request, response);

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

web.xml配置:

技術分享圖片

結果:

技術分享圖片

如果要處理Get請求的中文亂碼,這時候需要對request對象進行增強處理。

如何使用過濾器處理中文亂碼