解决乱码问题

如果不设置一个过滤器,那么参数涉及到中文的response回应(以及tomcat7以及下版本的request请求)展现给用户的时候就都会出现乱码的。当然可以每次request请求和response回应都可以进行乱码处理,但是这样就会显得十分麻烦,如果有一万次请求和回应,那就要写一万次一样的代码,这显然是不现实的,因此这就可以知道过滤器的作用了。

  1. package com.wjh.Test;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet("/servlet01")
  9. public class servlet01 extends HttpServlet {
  10. @Override
  11. protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. response.getWriter().write("你好呀,小可爱!");
  13. System.out.println("请求到达了servlet01...");
  14. }
  15. }

如果不设置过滤器,那么response呈现给用户的中文就会乱码,运行结果如下:
image.png

下面设置一个处理乱码的过滤器:

  1. package com.wjh.Test;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.WebFilter;
  4. import java.io.IOException;
  5. @WebFilter("/*")
  6. public class Filter02 implements Filter {
  7. private int count;
  8. @Override
  9. public void init(FilterConfig filterConfig) throws ServletException {
  10. }
  11. @Override
  12. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  13. servletRequest.setCharacterEncoding("UTF-8");
  14. servletResponse.setCharacterEncoding("UTF-8");
  15. servletResponse.setContentType("text/html;charset=UTF-8");
  16. filterChain.doFilter(servletRequest,servletResponse);
  17. }
  18. @Override
  19. public void destroy() {
  20. }
  21. }

运行结果:
image.png
可以看到乱码问题就解决了。