1 说明
乱码问题:
  • 获取请求参数中的乱码问题;

    • POST请求:request.setCharacterEncoding(“utf-8”);
    • GET请求:new String(request.getParameter(“xxx”).getBytes(“iso-8859-1”), “utf-8”);
      • Tomcat 8.5.20、Tomcat 9.0.0.M26 默认编码都是utf-8,所有不出现GET请求乱码问题,所以不需处理
  • 响应的乱码问题:response.setContextType(“text/html;charset=utf-8”)。
2、当GET请求出现乱码问题时(默认编码为ISO-8859-1时),可采用以下方法解决:
 1 package web.filter;
2
3 import javax.servlet.*;
4 import javax.servlet.annotation.WebFilter;
5 import javax.servlet.http.HttpServletRequest;
6 import java.io.IOException;
7
8 @WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
9 public class EncodingFilter implements Filter {
10 public void destroy() { }
11 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
12 //处理post请求编码问题
13 req.setCharacterEncoding("utf-8");
14
15 HttpServletRequest request = (HttpServletRequest) req;
16 //处理get请求的编码问题
17 if ( request.getMethod().equals("GET")){
18 EncodingRequest er = new EncodingRequest(request);
19 chain.doFilter(er, resp);
20 } else {
21 chain.doFilter(req,resp);
22 }
23 }
24 public void init(FilterConfig config) throws ServletException { }
25 }
 1 package web.filter;
2
3 import javax.servlet.http.*;
4 import java.io.UnsupportedEncodingException;
5
6 /**
7 * 装饰request
8 */
9 public class EncodingRequest extends HttpServletRequestWrapper{
10 private HttpServletRequest request ;
11 public EncodingRequest(HttpServletRequest req) {
12 super(req);
13 this.request = req;
14 }
15 public String getParameter(String s) {
16 String value = request.getParameter("s");
17 //处理编码问题
18 try {
19 value = new String(value.getBytes("iso-8859-1"),"utf-8");
20 } catch (UnsupportedEncodingException e) {
21 throw new RuntimeException(e);
22 }
23 return value;
24 }
25 }
 1 package web.servlet;
2
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8 import java.io.IOException;
9
10 @WebServlet(name = "AServlet",urlPatterns = "/AServlet")
11 public class AServlet extends HttpServlet {
12 protected void doPost(HttpServletRequest request, HttpServletResponse response)
13 throws ServletException, IOException {
14 response.setContentType("text/html;charset=utf-8");
15 String username = request.getParameter("username");
16 response.getWriter().println(username);
17 }
18
19 protected void doGet(HttpServletRequest request, HttpServletResponse response)
20 throws ServletException, IOException {
21 response.setContentType("text/html;charset=utf-8");
22 String username = request.getParameter("username");
23 response.getWriter().println(username);
24 }
25 }
 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3 <html>
4 <head>
5 <title>$Title$</title>
6 </head>
7 <body>
8 <a href="<c:url value='/AServlet?username=张三'/>">点击这里</a>
9 <form action="<c:url value='/AServlet'/> " method="post">
10 用户名:<input type="text" name="username" value="李四"/>
11 <input type="submit" value="提交"/>
12 </form>
13 </body>
14 </html>

3、当只有POST请求出现乱码问题时(服务器默认编码为UTF-8时),可采用以下方法解决:

 1 @WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
2 public class EncodingFilter implements Filter {
3 public void destroy() { }
4 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
5 //处理post请求编码问题
6 req.setCharacterEncoding("utf-8");
7 chain.doFilter(req,resp);
8 }
9 public void init(FilterConfig config) throws ServletException {}
10 }
 1 @WebServlet(name = "AServlet",urlPatterns = "/AServlet")
2 public class AServlet extends HttpServlet {
3 protected void doPost(HttpServletRequest request, HttpServletResponse response)
4 throws ServletException, IOException {
5 response.setContentType("text/html;charset=utf-8");
6 String username = request.getParameter("username");
7 response.getWriter().println(username);
8 }
9
10 protected void doGet(HttpServletRequest request, HttpServletResponse response)
11 throws ServletException, IOException {
12 response.setContentType("text/html;charset=utf-8");
13 String username = request.getParameter("username");
14 response.getWriter().println(username);
15 }
16 }

解决全站字符乱码(POST和GET中文编码问题)的更多相关文章

  1. Java_Web学习笔记_过滤器应用案例(解决全站字符乱码)

    解决全站字符乱码(POST和GET中文编码问题) servlet: l  POST:request.setCharacterEncoding(“utf-8”); l  GET: String user ...

  2. 04_过滤器Filter_05_Filter解决全站中文乱码问题(POST方式)

    [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns: ...

  3. mysql字符乱码

    解决mysql字符乱码思路: mysql服务器字符集 mysql客户端字符集 系统字符集 生产环境改字符集: 1.导出表结构到 scam.sql文件中 2.更改scam.sql文件中的字符集为想要的字 ...

  4. 【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)

      http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ [已解决]python中文字符乱码(GB2312,GB ...

  5. 彻底解决mysql中文乱码的办法,修改mysql解压缩版(免安装版或zip版)字符编码

    MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如server字符编码还停留在latin12.table的语系设定问题(包含character与collation)3.客 ...

  6. 如何彻底解决MySQL更改默认字符集以及字符乱码问题!!!

    在我们使用MySQL数据库时,字符乱码,对我们来说是一个很头疼的问题.今天笔者就来教大家如何彻底解决更改默认字符集以及字符乱码问题. 当我们使用压缩包进行MySQL安装后,系统会使用默认的字符集,这时 ...

  7. hive中文字符乱码 解决方法【转】

    一.个人初始开发环境的基本情况以及Hive元数据库说明 ①hive的元数据库改成了mysql(安装完mysql之后也没有进行其它别的设置) ②hive-site.xml中设置元数据库对应的配置为  j ...

  8. JAVA and JAVA WEB with TOMCAT and ECLIPSE 学习过程中遇到的字符乱码问题及解决方法汇总(随时补充)

    JAVA语言具有跨平台,unicode字符集编码的特点. 但是在开发过程中处理数据时涉及到的字符编码问题零零散散,尤其是处理中文字符时一不留神就可能出现一堆奇奇怪怪的符号,俗称乱码. 对于乱码,究其原 ...

  9. 彻底解决mysql中文乱码的办法 ???

      MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如p ...

随机推荐

  1. 读取图片信息(exif),使用com.drew.metadata.Metadata

    ---恢复内容开始--- 最近在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享.本身工作也是经常和 ...

  2. JDK7,8,JD9的hashmap,hashtable,concurrenthashmap及他们的区别

    1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希表,也称为哈希数组(默认数组大小是16,每对key-value键值对其实是存在map的内部类entry ...

  3. sql自查询各种状态数据总和

  4. [温故]图解java多线程设计模式(一)

    去年看完的<图解java多线程设计模式>,可惜当时没做笔记,导致后来忘了许多东西,打算再温习下这本书,顺便在这里记录一下~  1.顺序执行.并行.并发 顺序执行:多个操作按照顺序依次执行. ...

  5. 获得自己电脑的SSH公匙

    关于什么是SSH请点击此"www.Baidu.com”网站了解 我这里只说怎么获取属于自己电脑的SSH公匙 本人是Win10电脑 所以相对来说简单一点  点击win ->选择设置-&g ...

  6. prim /kruskal 最小生成树

    #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #inc ...

  7. (转)OpenStack之服务端口号

    原文:https://blog.csdn.net/henulwj/article/details/47276391 在部署openstack的过程中,你会遇到配置各种服务的endpoint,opens ...

  8. value power two

    /** *topPower2 use to set unsigned int to power of two *@param value input value *@return return the ...

  9. io流之节点流inputstream、outputstream、reader、writer

    例子程序:读取工作空间下 package io; import java.io.*; public class TestFileInputStream { public static void mai ...

  10. EJB与JavaBean

    JavaBean是一个组件,而EJB就是一个组建框架.JavaBean面向的是业务逻辑和表示层的显示,通过编写一个JavaBean,可以将业务逻辑的事件和事务都放在其中,然后通过它的变量属性将所需要的 ...