แก้ปัญหา Hibernate 4 เชื่อมต่อ Mysql ของ Webserver Xampp อาการเพิ่มข้อมูลแต่ไม่เป็น UTF-8 (ตอนที่ 2)

Sharing is caring!

เมื่อการแก้ปัญหาเรื่อง encoding utf-8 ที่ไม่เป็นภาษาไทยสักทีวันนี้ผมจะแก้ปัญหานั้นต่อ ถ้าเพื่อนคนใดใช้วิธี ขั้นตอนที่ 1 ไปเรียบร้อยแล้ว

สำหรับการสร้าง web application ด้วย Java ถ้าเน้นหลัก Object Oriented จำต้องพึ่งพา Servlet ฉะนั้นแล้วต้องไป config อะไรกันนิดหน่อย ก่อน

1. สร้าง Java class ขึ้นมา ผมใช้ชื่อว่า UTF8Filter.java

public class UTF8Filter implements Filter {
	private String encoding;

	public void init(FilterConfig config) throws ServletException {
		encoding = config.getInitParameter("requestEncoding");

		if (encoding == null)
			encoding = "UTF-8";
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException,
			ServletException {
		servletRequest.setCharacterEncoding(encoding);
		filterChain.doFilter(servletRequest, servletResponse);
	}
}

2. mapping filter นีในไฟล์ web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>PoolsawatJSF</display-name>

	<filter>
		<filter-name>CharsetFilter</filter-name>
		<filter-class>com.tss.poolsawatjsf.UTF8Filter</filter-class> <!-- อ้างพาธ package ที่เก็บไฟล์ UTF8Filter.java -->
		<init-param>
			<param-name>requestEncoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>CharsetFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

3. save ไฟล์ web.xml แล้ว restart server ซะเท่านี้ก็จะแก้ไข ปัญหาเรื่อง Encoding UTF-8 ได้แล้ว