麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色av电影在线播放 | 中文字幕伦乱 | 天天透天天狠天天爱综合97 | av在线日韩 | xxxx hd video 69| 免费在线观看成年人视频 | 色视频一区二区 | 狠狠婷婷综合久久久久久妖精 | 最新中文字幕在线视频 | 国产一级午夜 | 伊人亚洲精品 | 国产 一区 精品 | 成人国产精品色哟哟 | 久在线播放 | 一区二区三区日本在线观看 | 一区二区三区在线观看av | 91 在线 | 欧美一级精品片在线看 | 91网站在线观看视频 | 成人视屏在线 | 九九热九九| 久久精品亚洲国产奇米99 | 国产一国产精品一级毛片 | 国产a级片电影 | chengrenzaixian| 暖暖免费观看高清完整版电影 | 欧美成人精品一区二区三区 | 欧美激情天堂 | 一日本道久久久精品国产 | 国产成人精品午夜视频' | 成人偷拍片视频在线观看 | 国内一区 | 国产精品视频yy9299一区 | 日韩黄色成人 | 国产寡妇xxxxxxxx性开放 | 国产日韩欧美一区 | 久久国产在线观看 | 国产一区二区免费在线观看视频 | 国产99视频精品免视看9 | 国产成人高清在线观看 | 久草最新在线 |