JSP+ MySQL中文乱码问题post提交乱码解决方案

JSP + MySQL 中文乱码问题主要发生在使用post方式提交数据时,提交的中文字符在数据库中查询后会变成乱码。下面我将详细讲解如何解决此问题。

问题分析

JSP中表单提交后,浏览器会自动将中文字符转码为UTF-8编码,而JDBC默认使用ISO8859_1编码与数据库进行交互,因此,需要将数据先从UTF-8编码转换为ISO8859_1编码,再进行插入,这样才能保证数据不会出现乱码。

解决方法

Java在处理字符编码时,会首先根据系统默认编码来进行解码和编码。在进行字符转码时,可以设置编码格式为UTF-8,这样可以确保数据正常存储。

以下是具体的解决方法:

  1. 将JDBC连接串修改为:jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&characterEncoding=utf-8,其中myDatabase是你的数据库名。将连接串中的useUnicode和characterEncoding参数设置为true和utf-8,这样MySQL就会自动将所有数据编码为UTF-8格式,解决中文乱码问题。

  2. 在JSP页面中添加以下代码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这样浏览器就会自动识别页面编码为UTF-8,从而解决中文乱码问题。

示例代码

以下是使用JSP和MySQL实现用户注册和登录的示例代码,包含解决中文乱码问题的代码:

注册页面(register.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
    <form action="register.do" method="post">
        用户名:<input type="text" name="username"><br> 密码:<input
            type="password" name="password"><br> <input type="submit"
            value="注册">
    </form>
</body>
</html>

注册处理(register.do)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");

Connection con = null;
PreparedStatement ps = null;

try {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&characterEncoding=utf-8",
            "root", "");
    String sql = "INSERT INTO user(username, password) VALUES(?,?)";
    ps = con.prepareStatement(sql);
    ps.setString(1, username);
    ps.setString(2, password);
    ps.executeUpdate();
    out.print("注册成功!");
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (ps != null)
            ps.close();
        if (con != null)
            con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
%>

登录页面(login.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
    <form action="login.do" method="post">
        用户名:<input type="text" name="username"><br> 密码:<input
            type="password" name="password"><br> <input type="submit"
            value="登录">
    </form>
</body>
</html>

登录处理(login.do)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/myDatabase?useUnicode=true&characterEncoding=utf-8",
            "root", "");
    String sql = "SELECT * FROM user WHERE username=? AND password=?";
    ps = con.prepareStatement(sql);
    ps.setString(1, username);
    ps.setString(2, password);
    rs = ps.executeQuery();
    if (rs.next()) {
        out.print("登录成功!");
    } else {
        out.print("用户名或密码错误!");
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (rs != null)
            rs.close();
        if (ps != null)
            ps.close();
        if (con != null)
            con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
%>

通过以上示例代码,可以看到在注册处理和登录处理中,都添加了以下代码,解决中文乱码问题:

request.setCharacterEncoding("UTF-8");

同时,在注册页面和登录页面中,也添加了以下代码,设置页面编码为UTF-8:

<meta charset="UTF-8">

结论

通过以上的方法,可以解决JSP + MySQL中的中文乱码问题。在开发过程中,一定要注意字符编码的设置,以确保数据正常存储和查询。同时也可以在MySQL的my.ini配置文件中设置默认的字符集为UTF-8。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP+ MySQL中文乱码问题post提交乱码解决方案 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • springboot清除字符串前后空格与防xss攻击方法

    Spring Boot 提供了多种方法,可以清除字符串前后的空格和防止 XSS 攻击。本文将详细讲解这些方法的使用。 清除字符串前后空格 使用 String 类的 trim() 方法 String 类的 trim() 方法可以去除字符串前后的空格。示例如下: public class StringUtil { public static String tri…

    Java 2023年5月27日
    00
  • 详解Java对象结构与对象锁的升级

    详解Java对象结构与对象锁的升级 Java对象结构 Java对象在内存中的实际存储由三部分组成:对象头、实例数据和对齐填充。 对象头 对象头是Java对象的一部分,用于存储对象自己的运行时数据,包括以下内容: Mark Word: 用来锁定对象、记录对象哈希值、记录对象所属的分代年龄等信息。 Class: 指向对象的Class对象。 在Java 8中,对象…

    Java 2023年5月26日
    00
  • Java实现创建Zip压缩包并写入文件

    下面是详细讲解Java实现创建Zip压缩包并写入文件的完整攻略: 1. ZipOutputStream Java中可以使用ZipOutputStream类来实现创建Zip压缩包,并写入文件。ZipOutputStream是OutputStream类的子类,因此我们可以将需要进行压缩的文件写入ZipOutputStream,再通过ZipOutputStream…

    Java 2023年5月19日
    00
  • java实现联机五子棋

    Java实现联机五子棋完整攻略 引言 联机五子棋是一种经典的、非常受欢迎的棋类游戏。在实现联机五子棋游戏过程中,需要采用 Java编程语言 进行设计和开发。本文将为您提供一份完整的攻略,指导您如何使用 Java实现联机五子棋游戏。 前置技能 在开始实现联机五子棋游戏前,我们需要掌握以下技能: 掌握 Java编程语言 ; 对 Java I/O相关API的使用必…

    Java 2023年5月19日
    00
  • 解析Java中所有错误和异常的父类java.lang.Throwable

    解析Java中所有错误和异常的父类java.lang.Throwable,可以分为以下两个步骤: 了解Throwable类 Throwable类是Java中所有错误和异常的父类。它有两个直接的子类:Error和Exception。其中,Error表示严重的系统错误,如虚拟机错误、线程死锁等,是无论如何也无法处理的错误,只能让程序退出。而Exception则表…

    Java 2023年5月27日
    00
  • Java有哪些操作字符串的类?区别在哪?

    Java中有多个类可以用于操作字符串,以下是比较常用的几个类: String 类: String 是一个 final 类,字符串是一个对象,一旦被创建,就不能被修改。因为Java中的String对象是可以共享的,所以每次对String进行修改时,都会创建一个新的String对象,影响了性能。 示例1:使用加号操作字符串,每次操作都会创建一个新的 String…

    Java 2023年5月27日
    00
  • Java数组的声明与创建示例详解

    下面我来详细讲解“Java数组的声明与创建示例详解”。 Java数组的声明 Java数组的声明方式有两种: 声明数组类型后再声明数组变量 声明数组时直接初始化 下面分别来看这两种方式的示例。 声明数组类型后再声明数组变量 // 声明一个整型数组 int[] arr; // 声明一个字符串数组 String[] strArr; 在这种方式下,只声明了数组类型并…

    Java 2023年5月26日
    00
  • 基于JavaCore文件的深入分析

    基于JavaCore文件的深入分析攻略 1. 确定JavaCore文件 JavaCore文件是JVM在遇到严重错误时生成的一种二进制文件,记录了JVM在运行时栈、堆、方法、线程等状态的信息。要深入分析JavaCore文件,首先需要确定要分析的JavaCore文件。 2. 安装Java SE开发工具箱 Java SE开发工具箱(JDK)提供了jstack和jm…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部