怎么用電腦做web服務(wù)器網(wǎng)站淘寶關(guān)鍵詞排名是怎么做的
最近接手一個(gè)項(xiàng)目,新項(xiàng)目需要調(diào)用老項(xiàng)目的接口,但是老項(xiàng)目和新項(xiàng)目不再同一個(gè)域名下,所以必須進(jìn)行跨域調(diào)用了,但是老項(xiàng)目又不能進(jìn)行任何修改,所以jsonp也無法解決了,于是想到了使用了Httpclient來進(jìn)行服務(wù)端的“跨域”來替代jsonp的客戶端跨域方案。
上一篇博文中,詳細(xì)剖析了jsonp的跨域原理,本文使用Httpclient來替代jsonp的客戶端跨域方案。
先去 http://hc.apache.org/downloads.cgi 下載最新版httpclient。解壓tutorial文件夾中有html和PDF的使用介紹。
下面實(shí)現(xiàn)從8888端口的html4項(xiàng)目中跨域訪問8080端口的html5項(xiàng)目中的JsonServlet:
1)在html4中建立一個(gè)中間代理servelt和一個(gè)工具類,工具類代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
?中間代理servlet代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
?html4項(xiàng)目中的訪問頁面代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
上面通過:url=http://localhost:8080/html5/JsonServlet 將我們最終要跨域訪問的url地址傳給自己服務(wù)器下的 HttpclientServlet. 然后在 HttpclientServlet?中使用httpclient訪問 跨域 url? 中的servlet,成功之后,將返回的結(jié)果返回給客戶端。
html5項(xiàng)目中被 跨域 訪問的servlet代碼如下:
@WebServlet("/JsonServlet") public class JsonServlet extends HttpServlet {private static final long serialVersionUID = 4335775212856826743L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {User user = new User();user.setName("yuanfang");user.setAge(100);Object obj = JSON.toJSON(user);System.out.println(user); // com.tz.servlet.User@164ff87System.out.println(obj); // {"age":100,"name":"yuanfang"}response.getWriter().println(obj);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }
啟動(dòng)8888和8080端口的tomcat,訪問 http://localhost:8888/html4/jsonp.html ,結(jié)果如下:
我們注意到第二和第三項(xiàng)都打印的是 undefined ,這是因?yàn)?中間代理的 HttpclientServlet,使用的是直接輸出流的方式,所以最終返回的結(jié)果不是Json對(duì)象,而是字符串,所以需要使用?var user = JSON.parse(data);?來進(jìn)行解析成 javascript對(duì)象就可以,所以第四和第五項(xiàng)都正常輸出了結(jié)果。
如果想返回的是json對(duì)象,加一句代碼?response.setContentType("text/json;charset=utf-8");?就可以:
1 2 3 4 5 6 7 8 |
|
這樣的話,瀏覽器在看到 contentType: "text/json;charset=utf-8" 時(shí),它的js執(zhí)行引擎會(huì)自動(dòng)幫助我們將字符串解析成json對(duì)象。也就是相當(dāng)于自動(dòng)調(diào)用了 JSON.parse(data) 的效果。