今天在整合 SSM 出现了中文乱码问题,所以来记录下解决方案
我是 POST 请求,所以对于 get 请求出错的问题,你可以考虑修改 tomcat 的配置文件 service.xml
- 最开始以为是 web.xml 过滤器设置有问题
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 问题无法解决,检查了 database.properties
# 注意在电脑上启动 mysql 服务
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
其实这里就出现问题了,但是我没有注意到
3. 我然后又检查了 spring-dao.xml 文件,感觉并没有问题
<context:property-placeholder location="classpath:database.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置连接池属性 -->
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- c3p0 连接池私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接后不自动 commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- 获取连接超时时间 -->
<property name="checkoutTimeout" value="10000"/>
<!-- 获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
- 将
<property name="jdbcUrl" value="${jdbc.url}"/>
换为<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
不再使用变量名的形式,结果发现:竟然成功了!!!
重点来了
我将 database.properties
文件内的 jdbc.url
改为
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=falseuseUnicode=true&characterEncoding=UTF-8
注意中间的 & ,再使用变量名,发现成功解决乱码问题