[TOC]
# 中文問題
在Spring MVC中處理中文問題和Filter處理中文問題是一樣的手段
## 步驟 1 : 先運行,看到效果,再學習
先將完整的項目(向老師要相關資料),配置運行起來,確認可用之后,再學習做了哪些步驟以達到這樣的效果。
## 步驟 2 : 模仿和排錯
在確保可運行項目能夠正確無誤地運行之后,再嚴格照著教程的步驟,對代碼模仿一遍。
模仿過程難免代碼有出入,導致無法得到期望的運行結果,此時此刻通過比較**正確答案** ( 可運行項目 ) 和自己的代碼,來定位問題所在。
采用這種方式,**學習有效果,排錯有效率**,可以較為明顯地提升學習速度,跨過學習路上的各個檻。
## 步驟 3 : 效果
訪問地址提交中文
http://127.0.0.1:8080/springmvc/addProduct.jsp
提交數據

## 步驟 4 : 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>springmvc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
~~~
## 步驟 5 : addProduct.jsp
為form 設置method="post"
~~~
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="addProduct" method="post">
產品名稱:<input type="text" name="name" value=""><br>
產品價格:<input type="text" name="price" value=""><br>
<input type="submit" value="增加商品">
</form>
</body>
</html>
~~~
> 某些瀏覽器,會對get方式提交的數據進行二次編碼,導致服務端取出數據無法正確解碼,所以盡量使用post方式,確保中文可以正常處理。
## 步驟 6 : 測試
重啟tomcat,訪問頁面
http://127.0.0.1:8080/springmvc/addProduct.jsp
提交數據

注: SpringMVC會自動檢測類發生的變化,但是web.xml做的改動還是必須重啟tomcat才可以看到效果
## 常見問題
1. 對于filter標簽,和CharacterEncodingFilter不懂其作用
> 相對于自己手動實現Filter,springMVC是幫我們完成了實現Filter的相關方法:
HttpServletRequest request = (HttpServletRequest) req;
request.setCharacterEncoding("UTF-8");
我們只需要進行xml配置即可