国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

springMVC解決ajax請求亂碼的三種方法

2024-09-05 00:23:13
字體:
來源:轉載
供稿:網友

springMVC解決ajax請求亂碼的問題

前言:

最近在項目的使用過程中發現在springmvc的項目中,使用返回頁面的請求方式,數據都能正常顯示,但是對于ajax的請求,始終顯示亂碼。首先第一種是因為我們在web.xml中配置了spring的字符編碼過濾器,那么使用ajax請求為什么就不行了呢?下面簡單的分析一下,僅供參考。

先列出簡單的請求代碼:

瀏覽器端:

<script type="text/javascript">$.ajax({    type: "POST",    url: "/pages/ajax",    data: "name=garfield&age=18",    success: function(data){      console.log(data);   }  })</script>

服務器端:

@ResponseBody@RequestMapping("/ajax")public String ajaxCharacter(){  return "測試";}

web.xml:

<filter>  <filter-name>characterEncodingFilter</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <init-param><!-- 針對request -->    <param-name>encoding</param-name>    <param-value>UTF-8</param-value>  </init-param>  <init-param><!-- 針對response -->     <param-name>forceEncoding</param-name>    <param-value>true</param-value>  </init-param></filter>

首先,當一個請求到來時,會先經過spring的這個過濾器CharacterEncodingFilter,過濾器設置好編碼之后會進入springmvc的這個DispatcherServlet,通過springmvc的一系列轉化(此處省略。。。),到達我們的控制層,并且幫我們封裝好了參數。在springmvc中配置這個配置項之后<mvc:annotation-driven>,會默認配置RequestMappingHandlerAdapter和HttpMessageConverter,當我們使用@ResponseBody時,那么數據返回時會調用這個數據轉換器。經過查看源碼可知,默認情況下會轉換成ISO-8859-1格式。簡單源碼附上:

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {  public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");  private final Charset defaultCharset;  private final List<Charset> availableCharsets;  private boolean writeAcceptCharset;  protected void writeInternal(String s, HttpOutputMessage outputMessage)      throws IOException {    if (this.writeAcceptCharset) {      outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());    }    Charset charset = getContentTypeCharset(outputMessage.getHeaders()        .getContentType());    StreamUtils.copy(s, charset, outputMessage.getBody());  }  ...}public abstract class AbstractHttpMessageConverter<T> implements    HttpMessageConverter<T> {  protected final Log logger = LogFactory.getLog(super.getClass());  private List<MediaType> supportedMediaTypes = Collections.emptyList();  ...}

通過上面的源碼可以看出,對于字符串會自動編碼成默認格式ISO-8859-1,所以對應的就有解決方案。

方案一:

@RequestMapping(value = “/test”,produces=”text/html;charset=UTF-8;”)

方案二:

此注解需要注意的是一定要使用spring 3.1.x 以上。

<mvc:annotation-driven>  <mvc:message-converters register-defaults="true">    <bean class="org.springframework.http.converter.StringHttpMessageConverter">     <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>    </bean>   </mvc:message-converters> </mvc:annotation-driven>

方案三:

不使用@ResponseBody,將請求處理改成如下:

@RequestMapping("/ajax")public void ajaxCharacter(HttpServletResponse response) throws IOException{  PrintWriter out = response.getWriter();  out.print("測試");  out.close();}

以上就是解決springMVC的亂碼問題,如有疑問請留言或到本站社區交流,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旺苍县| 沽源县| 潜江市| 大港区| 彭山县| 广水市| 邓州市| 佛山市| 福清市| 临泽县| 武义县| 绩溪县| 夏邑县| 崇仁县| 栖霞市| 通城县| 溧阳市| 洛川县| 宜良县| 宁明县| 颍上县| 任丘市| 德阳市| 托克托县| 仁怀市| 清流县| 仙桃市| 苍梧县| 河北区| 新和县| 丰台区| 临清市| 龙岩市| 伽师县| 丹寨县| 岚皋县| 府谷县| 潜山县| 麦盖提县| 武功县| 洞头县|