然后我们把这个servlet映射到某个url上,见web.xml:
<servlet>
<description>This servlet will create a jsonp object,it wraps the js function and the json object</description>
<display-name>JSONPServlet</display-name>
<servlet-name>JSONPServlet</servlet-name>
<servlet-class>com.charles.jsonp.JSONPServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSONPServlet</servlet-name>
<url-pattern>/JSONPServlet</url-pattern>
</servlet-mapping>
现在我们测试服务器端是否已经正确部署:
我们打开浏览器,输入访问服务器端这个servlet的url,注意带上请求参数,参数名为callbackFunc,参数值为任意函数名:则我们可以看到封装后的JSONP效果,的确是“函数名(json对象)”的字符串形式。比如我们例子中,我们传入的函数名是 someFunc ,而服务器端自身提供的json对象是{"title":"technical lead","name":"charles","info":"talent man"},则后服务器端返回的JSONP 字符串是someFunc{json}
客户端:
服务器端部署正确后,我们让客户端部署在另外一个域:http://localhost:8180上,要实现跨域访问,客户端必须有2部分,1是定义一个回调函数(这个函数用于将来处理服务器json数据),二是一个页面,这个页面要用<script src来指向服务器端能 提供JSONP的url),我们一步步来:
先定义一个回调函数:
这个回调函数能在控制台和alert窗口打印出服务器端的json对象提供的信息
//这段代码用于定义回调函数
function clientMethodWhichOperateServerResource(result){
console.log("Begin to execute the call function named clientMethodWhichOperateServerResource(result)");
//获取服务器端传递过来的json字符串,转为json对象
var jsonObject=result;
//从json对象中分离出一些相关信息
var name=jsonObject.name;
var title=jsonObject.title;
var info=jsonObject.info;
console.log("name: "+name);
console.log("title: "+title);
console.log("info: "+info);
var serverInfoString="姓名: "+name+",";
serverInfoString+="头衔: "+title+",";
serverInfoString+="信息: "+info;
alert(serverInfoString);
}