书签 分享 收藏 举报 版权申诉 / 8

类型09解决AJAX中文乱码与跨域访问.docx

  • 文档编号:11976406
  • 上传时间:2023-04-16
  • 格式:DOCX
  • 页数:8
  • 大小:40.99KB

--div和span的直观差异,div中的内容独占行,span中的内容和前后其他内容相处良好-->

--

123
456

123456

显示效果如下:

123

456

123456

-->

XMLHttpRequest的一个特殊安全问题:

IE:

访问跨域页面时会给出提示,用户确认后会访问

MozillaFireFox及其他:

不允许访问跨域页面

解决办法:

使用代理:

在浏览器端的代码中,我们需要在调用open方法之前判断一下要连接的地址是不是以http开头的,如果是则认为要访问的是跨域的资源,首先将当前url中的”?

”变成”&”,这是因为将要连接的地址改为”Proxy?

url=”+url以后,如果原来url地址中有参数的话,新的url地址中就会有两个“?

”这会导致服务器端解析参数错误,”url=”之后的内容表示本来要访问的跨域资源的地址。

functionconvertURL(url){

if(url.substring(0,7)=="http:

//"){

     url=url.replace("?

","&");

     url="Proxy?

url="+url;

}

returnurl;

}

注意Proxy中针对GET方式和POST方式进行了分别的处理,其中GET方式仍然将参数信息拼到URL中,而POST方式则向HttpURLConnection的数据流中添加参数信息。

由于对本来请求的地址和其包含的参数进行了转换,导致url参数中只包含原来请求的地址信息,而原来请求的参数信息则需要我们解析出来和地址信息一起重新组成本来的请求URL,因此方法开头的一段while就做了这个工作。

注意由于进入servelt之前参数信息已经被做过一次URLDecoder,因此这个时候参数信息中的中文信息传到真正要访问的servlet时解码会出现乱码,因此我们再拼接参数信息之前又再一次通过URLEncoder.encode方法对所有参数信息进行了一次编码,这样就解决了中文的乱码问题。

在从远端服务器读取数据时,要显示的指定输入流的编码格式,这样才可以保证通过BufferReader读到的内容不会有乱码信息。

Proxy.java:

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importjava.io.PrintWriter;

importjava.io.OutputStreamWriter;

import.*;

importjava.util.Enumeration;

publicclassProxyextendsjavax.servlet.http.HttpServlet{

   protectedvoiddoPost(javax.servlet.http.HttpServletRequestrequest,javax.servlet.http.HttpServletResponseresponse)

           throwsjavax.servlet.ServletException,java.io.IOException{

       response.setContentType("text/html;charset=GB2312");

       Stringurl=request.getParameter("url");

       StringBufferparam=newStringBuffer();

       Enumerationenu=request.getParameterNames();

       inttotal=0;

       while(enu.hasMoreElements()){

           Stringname=(String)enu.nextElement();

           if(!

name.equals("url")){

               if(total==0){

                   param.append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));

               }else{

                   param.append("&").append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));

               }

               total++;

           }

       }

       PrintWriterout=response.getWriter();

       if(url!

=null){

           URLconnect=newURL(url.toString());

           URLConnectionconnection=connect.openConnection();

           connection.setDoOutput(true);

           OutputStreamWriterparamout=newOutputStreamWriter(connection.getOutputStream());

           paramout.write(param.toString());

           paramout.flush();

           BufferedReaderreader=newBufferedReader(newInputStreamReader(connection.getInputStream(),"GB2312"));

           Stringline;

           while((line=reader.readLine())!

=null){

              out.println(line);

           }

           paramout.close();

           reader.close();

       }

   }

   protectedvoiddoGet(javax.servlet.http.HttpServletRequestrequest,javax.servlet.http.HttpServletResponseresponse)throwsjavax.servlet.ServletException,java.io.IOException{

       response.setContentType("text/html;charset=GB2312");

       StringBufferurl=newStringBuffer();

       url.append(request.getParameter("url"));

       Enumerationenu=request.getParameterNames();

       inttotal=0;

       while(enu.hasMoreElements()){

           Stringname=(String)enu.nextElement();

           if(!

name.equals("url")){

               if(total==0){

                   url.append("?

").append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));

               }else{

                   url.append("&").append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));

               }

               total++;

           }

       }

       PrintWriterout=response.getWriter();

       if(url!

=null){

            URLconnect=newURL(url.toString());

            BufferedReaderreader=newBufferedReader(newInputStreamReader(connect.openStream(),"GB2312"));

            Stringline;

            while((line=reader.readLine())!

=null){

               out.println(line);

            }

            reader.close();

       }

       

       Proxy?

url=

       url=

       

//我们

}

}

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
09 解决 AJAX 中文 乱码 访问
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:09解决AJAX中文乱码与跨域访问.docx
链接地址:https://www.bdocx.com/doc/11976406.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开