1、java中服務端怎麼實現jsonp
1. JSONP定義
JSONP是英文JSON with Padding的縮寫,是一個非官方的協議。它允許在伺服器端生成script tags返回至客戶端,通過javascript callback的形式來實現站點訪問。 JSONP是一種script tag的注入,將server返回的response添加到頁面實現特定功能。
2.JSONP由來
要解釋JSONP的來由,先要說一下瀏覽器的「同源策略(SOP:Same Origin Policy)」。 簡而言之,就是瀏覽器限制腳本程序只能和同協議、同域名、同埠的腳本進行交互,這包括共享和傳遞變數等。cookie的傳遞也是遵從同樣策略。這就造成一些涉及到多個伺服器的應用在整合時一些麻煩。跨域訪問的問題造成A站點的Ajax代碼無法訪問B站點的數據。
如何解決跨域訪問呢?那就要藉助瀏覽器的一個特性:盡管瀏覽器不允許頁面中的腳本程序跨域讀取數據,但卻允許HTML引用跨域的資源,如圖片,CSS和腳本程序。對於腳本程序的引用比較特殊,它被瀏覽器解析以後,就和本地的腳本程序別無二致且可立即進行解釋並執行。如在B站點的一個js文件,一個簡單的提示框:alert(「This is Victor!」);。在A站點引用這個js,這個腳本就會在B站點的應用中執行,顯示一個alert信息。由於站外腳本的引用是通過script tag來實現的,而腳本程序又可通過DOM的方式可以對HTML頁面的所有標簽進行控制(包括動態的創建script標簽),這就可以實現通過調用站外程序對本地資源進行更改了。另外,通過<script> 標記的使用,就可從服務端直接返回可執行的JavaScript函數調用或者JSON數據。
3. JSONP原理與實現
首先在客戶端注冊一個callback, 然後把callback的名字傳給伺服器。此時,伺服器先生成 JSON數據。然後以JavaScript 語法的方式,生成一個function, function名字就是傳遞上來的參數jsonp.
然後,將JSON數據直接以入參的方式,放置到function中,這樣就生成了一段 js 語法的文檔,返回給客戶端。
最後,在客戶端瀏覽器中解析script標簽,並執行返回的JavaScript文檔,此時數據作為參數,傳入到了客戶端預先定義好的回調函數里(動態執行回調函數) 。
2、java用服務端怎麼用json數據傳輸到安卓客戶端
java用服務端怎麼用json數據傳輸到安卓客戶端
public class MainActivity extends Activity
{
private Button submit = null;
URL url = null;
String urlPath = "http://10.0.3.2:8080/XMLParse/AcceptJsonServlet";
EditText name = null;
EditText age = null;
EditText address = null;
Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
if (msg.what == 0x123)
{
Toast.makeText(MainActivity.this,
"發送成功", Toast.LENGTH_LONG)
.show();
}
else
{
Toast.makeText(MainActivity.this,
"發送失敗", Toast.LENGTH_LONG)
.show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = ((EditText) findViewById(R.id.name));
age = ((EditText) findViewById(R.id.age));
address = ((EditText) findViewById(R.id.address));
submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new Thread()
{
public void run()
{
JSONObject js = new JSONObject();
JSONObject params = new JSONObject();
// JSONArray array = new JSONArray();
Person p = new Person(name.getText().toString(), age
.getText().toString(), address.getText()
.toString());
// 封裝子對象
try
{
js.put("name", p.getName());
js.put("age", p.getAge());
js.put("address", p.getAddress());
// 封裝Person數組
params.put("Person", js);
}
catch (JSONException e)
{
e.printStackTrace();
}
// 把Json數據轉換成String類型,使用輸出流向伺服器寫
final String content = String.valueOf(params);
try
{
url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);
conn.setDoOutput(true);// 設置允許輸出
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type",
"application/json; charset=UTF-8"); // 內容類型
OutputStream os = conn.getOutputStream();
os.write(content.getBytes());
os.close();
if (conn.getResponseCode() == 200)
{
handler.sendEmptyMessage(0x123);
}
else
{
handler.sendEmptyMessage(0x122);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}.start();
3、javaweb如何在服務端創建文件(如txt,json等)
File writeName = new File(你要存的地方); // 相對路徑,如果沒有則要建立一個新
//的.txt文件
writeName.createNewFile(); // 創建新文件,有同名的文件的話直接覆蓋
FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer);
out.write(你要寫入的信息);
4、用java寫伺服器怎麼獲得從前端傳來的json數據
通過 JSONObject類就可以了
首先 你把這幾個包 下下來 放到你項目。如果有就不要下了:
1.commons-lang.jar
2.commons-beanutils.jar
3.commons-collections.jar
4.commons-logging.jar
5.ezmorph.jar
6.json-lib-2.2.2-jdk15.jar
像你這種是數據形式 就通過 JSONArray 如:
JSONArray datasJson = JSONArray.fromObject(datas);最好把datas toString 一下
5、java服務端如何輸出json,我目前只會servlet++jsp~求解。
得到數據後用JSONArray.fromObject(list);
6、java中從伺服器上獲取的json字元串,怎麼存map<integer object>中
如果使用的
net.sf.json
包,可以先用 JSONObject.fromJson(String)轉成jsonobject對象,然後使用toBean方法轉成map,或者用get去一個個的取。
如果用的jackson包,
private static ObjectMapper mapper = new ObjectMapper();
mapper.readValue(json, Map.class);
7、java後台怎樣傳json格式的數據
通過 JSONObject類就可以了
首先 你把這幾個包 下下來 放到你項目。如果有就不要下了:
1.commons-lang.jar
2.commons-beanutils.jar
3.commons-collections.jar
4.commons-logging.jar
5.ezmorph.jar
6.json-lib-2.2.2-jdk15.jar
像你這種是數內據形式容 就通過 JSONArray 如:
JSONArray datasJson = JSONArray.fromObject(datas);最好把datas toString 一下
8、java語言,如何獲取伺服器響應發來的json網頁(或代碼)
json分為json字元串和json對象,一般伺服器返回的是json字元串,這種字元串可以通過js提供的一些方法轉為json對象(其實也就是js對象),例如方法eval:data = eval('(' + jsonstr + ')');具體可以查看http://www.jb51.net/article/35090.htm
轉成js對象之後那就跟操作js一樣了
9、Java解析json數據
JSONObject dataJson=new JSONObject("你的Json數據「);
JSONObject response=dataJson.getJSONObject("response");
JSONArray data=response.getJSONArray("data");
JSONObject info=data.getJSONObject(0);
String province=info.getString("province");
String city=info.getString("city");
String district=info.getString("district");
String address=info.getString("address");
System.out.println(province+city+district+address);
10、java怎麼讀取json格式的數據
java可以使用JSONObject和JSONArray來操作json對象和json數組,具體用法如下
1:java對象與json串轉換:
java對象—json串:
JSONObject JSONStr = JSONObject.fromObject(object);
String str = JSONStr.toString();
json串—java對象:
JSONObject jsonObject = JSONObject.fromObject( jsonString );
Object pojo = JSONObject.toBean(jsonObject,pojoCalss);
2:java數組對象與json串轉換:
java數組—json串:
JSONArray arrayStr = JSONArray.fromObject(List<?>);
String str = arrayStr.toString();
json串—java數組:
JSONArray array = JSONArray.fromObject(str);
List<?> list = JSONArray.toList(array, ?.class);