如何使用過濾器處理中文亂碼
阿新 • • 發佈:2018-03-09
圖片 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對象進行增強處理。
如何使用過濾器處理中文亂碼