a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区二区三区在线观看视频 | 精品九九 | 久久人妖 | 蜜桃精品在线观看 | 黄色一级毛片 | 99re在线视频 | 国产乱码精品一区二区三区忘忧草 | 国产精品一区二区不卡 | 国产精品久久国产精品99 gif | 精品一区久久 | 国产一区精品视频 | 国产精品欧美久久久久一区二区 | 一区二区三区在线观看视频 | 91精品一区 | h视频在线免费观看 | 欧美日韩精品在线一区 | 亚洲欧美第一页 | 在线久草 | 亚洲日本韩国在线观看 | 国产精品一区二区三区四区在线观看 | 国产精品视频看看 | 欧美不卡一区二区三区 | 午夜影院在线观看免费 | 国产一页 | 九月色综合 | 色视频一区 | 欧美无遮挡 | 欧美日韩在线一区二区三区 | 日本一区二区三区在线播放 | 国产一区二区三区四区五区加勒比 | 一区二区三区视频 | 中文字幕在线免费 | 成人黄色在线 | 免费毛片网| 精品日韩一区二区三区免费视频 | 蜜桃视频成人m3u8 | 男女免费视频 | 亚洲精品乱码久久久久久9色 | 国产精品久久国产愉拍 | 狠狠操夜夜操 | 成人免费视频一区二区 |