springmvc上傳亂碼
A. springmvc參數傳遞的幾種亂碼情況
@RequestParam 或者@PathVariable 等從URL或者Form Data 獲取參數數據。
當其中有中文的時候,會發生了亂碼。
1.方法一:修改Tomcat的server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
2.方法二:手動更改
String name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
其次POST方法
方法一:使用Spring的字元過濾器
配置在web.xml中:
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
方法二:手動更改
B. springmvc js ajax請求 中文亂碼問題
初略的看了一下你的問題,大概明白了,出現亂碼的原因大概是你的伺服器編碼問題,tomcat的默認編碼是ISO-8859-1這種編碼,所以如果你需要更改,tomcat/conf/server.xml中找到 Connector 在後面加上 URIEncoding="UTF-8" 即可,如果不更改的話,你就得在action中,也就是接受端用ISO-8859-1解碼回來,如new String(str.getBytes("ISO-8859-1"),"UTF-8");如果用了攔截器的話,就在攔截器中統一解碼好啦。你可以試試!希望能幫到你哦!
C. spring mvc用註解方式配置控制器,怎麼出現亂碼
1:表單提交controller獲得中文參數後亂碼解決方案
注意: jsp頁面編碼設置為UTF-8
form表單提交方式為必須為post,get方式下面spring編碼過濾器不起效果
[html] view plain
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
[html] view plain
<form action="${ctx}/user/addUser" name="userForm" method="post">
D. spring MVC接收中文亂碼問題
1:表單提交controller獲得中文參數後亂碼解決方案
注意:jsp頁面編碼設置為UTF-8
form表單提交方式為必須為post,get方式下面spring編碼過濾器不起效果
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<formaction="${ctx}/user/addUser"name="userForm"method="post">
修改web.xml,增加編碼過濾器,如下(注意,需要設置forceEncoding參數值為true)
<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>
2:表單提交controller獲得中文參數後正常顯示控制台,然後保存資料庫出現亂碼
注意:資料庫編碼是否支持中文
資料庫表和表欄位是否正確
在配置連接資料庫的參數設置修改:
<propertyname="url"value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8"></property>第一種情況:
jsp頁面中文輸入,到controller亂碼,這時候需要設置的是在web.xml文件中添加一個編碼的過濾器(filter)將編碼統一為UTF-8,代碼如下:
Web.xml配置文件:
view
sourceprint?
01.<filter>
02.<filter-name>CharacterEncodingFilter</filter-name>
03.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
04.<init-param>
05.<param-name>encoding</param-name>
06.<param-value>utf-8</param-value>
07.</init-param>
08.</filter>
09.<filter-mapping>
10.<filter-name>CharacterEncodingFilter</filter-name>
11.<url-pattern>/*</url-pattern>
12.</filter-mapping>
這里需要注意的是,最好把這段代碼放在web.xml中開頭的位置,因為攔截有順序,如果放在後面的話容易攔截不到。
第二種情況:
資料庫中文數據,jsp頁面顯示亂碼(不是嚴格意義上的亂碼,而是以問號的形式呈現)
由於我們前後台的數據交互使用的是json數據,出現這種情況的原因我也不太清楚,之前也沒遇到過,只能怪自己做過的項目太少,解決起來也不困難,只需要在轉json的時候設置一下編碼格式就可以了,代碼如下:
view
sourceprint?
1.response.setContentType("application/json;charset=UTF-8");//防止數據傳遞亂碼
寫上這句話就不會再出現亂碼了。
第三種情況:
頁面中文,傳遞到controller也是正確的,但是保存到資料庫之後就是亂碼(也不是嚴格意義的亂碼,跟上面一樣全是問號)
這個問題困擾了我一段時間,開始覺得資料庫的編碼格式不正確,重新創建了編碼格式為utf-8的資料庫也還是不可以,最後覺得是jboss的問題,我們的伺服器用的是jboss,上網查了資料在連接數據源的時候加上編碼格式就可以了
E. springmvc redirect 傳參為什麼是亂碼
spring redirect
用spring redirect中文會亂碼:如下示例
public String redirectTest(){
redirect:/payment/alipay?body="中文";
}
瀏覽器會出現 body=??中文亂碼
[編輯]解決方案
spring mvc 有自定義的org.springframework.ui.Model類用與封裝url攜帶的參數具體方式如下:
public String redirectTest(Model model){
model.addAttribute("body", "中文");
return "redirect:/payment/alipay";
}
或者如下方式
public ModelAndView redirectTest(){
return new ModelAndView("redirect:/payment/alipay").addObject("body","中文");
}
以上兩種方法都是將方法參數添加到spring自定義的對像中這樣就不會亂碼的情況了
建議將url的攜帶參數add到Model對象中
F. springmvc怎樣控制頁面傳值亂碼
最近在做一個項目。用的springmvc框架,遇到了頁面傳值亂碼的問題。
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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
這種方式可以解決大部分亂碼的問題,但是需要注意的是該過濾器只對post請求有用。如果form表單沒寫傳值方式的話會默認為get。
很小的一個細節,但是很重要。