• eclipse SSM项目,前端填写表单往数据表存数据,中文乱码,导致后端显示也乱码


    问题描述

    eclipse项目,SSM,前端填写表单(form元素),提交所填写的中文“收货地址”,存到数据库,出现中文乱码的问题
    (数据表中是乱码的,从数据库读到页面上的也是乱码的)
    在这里插入图片描述

     
     
     

    可能

    1.eclipse项目编码格式(这个估计最影响)

    修改eclipse项目的编码格式
     
    说明:Windows下eclipse默认编码为GBK。
     
    注意:如果你不介意项目中的中文注释全乱码,可以直接修改。如果介意,建议重新建一个项目,然后用原项目的src文件夹和WebContent文件夹覆盖新项目的src和WebContent文件夹
    在这里插入图片描述
    在这里插入图片描述

     
     
     
     

    2.修改tomcat的server.xml(这个也很重要)

    1)用文本编辑器(如记事本),打开tomcat安装目录下conf文件夹下的server.xml

    说明:如果不记得安装路径,可以用everything软件搜索tomcat-

    在这里插入图片描述

     
    在这里插入图片描述

    2)搜索connectionTimeout="20000",加上URIEncoding="UTF-8",保存文件。

    在这里插入图片描述

     
     
     
     

    3.数据库连接时要写上encoding=UTF8

    1)如果你是直接在applicationContext.xml中配置数据源,检查下url的值

    即下方的<property name="url" value="jdbc:mysql://localhost:3306/easymall?characterEncoding=utf8"/>
    看是否写了characterEncoding=utf8

    	<!--配置数据源-->
    	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    		<property name="url" value="jdbc:mysql://localhost:3306/easymall?characterEncoding=utf8"/>
    		<property name="username" value="root"/>
    		<property name="password" value="12345678"/>
    		<!--最大连接数-->
    		<property name="maxTotal" value="30"/>
    		<!--最大空闲连接数-->
    		<property name="maxIdle" value="10"/>
    		<!--初始化连接数-->
    		<property name="initialSize" value="5"/>
    	</bean>
    

     
     
     
    注意(才疏学浅,踩过坑,所以补充一下,轻喷): 不要写成<property name="url" value="jdbc:mysql://localhost:3306/easymall?useUnicode=true&characterEncoding=utf8"/>或者<property name="url" value="jdbc:mysql://localhost:3306/easymall?characterEncoding=utf8&useUnicode=true"/>
    即不要加上useUnicode=true,否则无法启动服务器,无法访问页面,如果报错了,建议翻下console面板中的控制台输出(多往上翻,不要只看最后一块的报错信息)
     
     
     
    我就因为多加了useUnicode=true,遇到下面这2个错误
    BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

    Server Tomcat v9.0 Server at localhost failed to start.

    后来往上翻才发现,它已经提示了我applicationContext.xml中连接数据库的url,useUnicode需要以;为分隔符(其实就是写错了,不应该写,导致服务器无法启动

     
     
     
     
     
    2)如果你是加载配置文件,则修改配置文件中url的编码

    具体参考此文:SSM解决中文存入数据库乱码问题(记录自己的问题)
     
     
     
     

    4.jsp视图加上UTF8(在新建jsp文件时就要注意)

    一般在新建jsp时注意改过来就行(一般是ISO-8859-1

    文件顶部的pageEncoding设置

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

     
     
     
     

    5.项目的web.xml写上一些配置代码(影响不是很大)

    注意:filter中的filter-name的值与filter-mapping中filter-name的值一致

    <!-- 避免中文乱码 -->
      <filter>
      	<filter-name>characterEncodingFilter</filter-name>
      	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      	<init-param>
      		<param-name>encoding</param-name>
      		<param-value>UTF-8</param-value>
      	</init-param>
      	<init-param>
      		<param-name>forceEncoding</param-name>
      		<param-value>true</param-value>
      	</init-param>
      </filter>
      <filter-mapping>
      	<filter-name>characterEncodingFilter</filter-name>
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
    

     
     
     
     

    参考

    解决springmvc接受前端传来的中文出现中文乱码情况

    SSM解决中文存入数据库乱码问题(记录自己的问题)

    IDEA向数据库中插入中文数据乱码问题永久解决方法

    BeanFactory not initialized or already closed - call 'refresh' before access ... 的解决方法

  • 相关阅读:
    Struts2的配置中:Could not find action or result 问题的解决方法
    Oracle 数据库 Record is locked by another user 问题解决办法
    设计模式六大原则(2):里氏替换原则
    在PL/SQL中 自动复制转换StringBuffer的SQL
    反射setAccessible()方法
    对允许任意图片上传的发布内容模式的啊哈的想法
    如果你真的想做一件事,你一定会找到一个方法;如果你不想做一件事,你一定会找到一个借口.
    xaml 的 intellisense失效的解决办法
    Blog技术词汇之Rss篇 什么是Rss以及其定义[翻译]
    多个存储过程之间相互调用的原子性问题
  • 原文地址:https://www.cnblogs.com/zyaire/p/14638351.html
Copyright © 2020-2023  润新知