java之初识服务器跨域获取数据

Posted 掏富小牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之初识服务器跨域获取数据相关的知识,希望对你有一定的参考价值。

当一个项目膨大到无法进行整理时,而作为新负责维护的团队是非常苦恼的。对于想实现两个系统的数据访问,使用Ajax数据请求方式获取jsonp格式的数据

需要有前端jquery库文件。

前端代码通过jquery的处理方式如下:

$.ajax({
        type : "get", //jquey是不支持post方式跨域的
        async:false,
        url : "http://192.168.0.113:8080/test/", //跨域请求的URL
        dataType : "jsonp",
        //传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback)
        jsonp: "callback",
        //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
        jsonpCallback:"success_jsonpCallback",
        //成功获取跨域服务器上的json数据后,会动态执行这个callback函数
        success : function(json){ 
          alert(json.name); 
        } 
    }); 

这时候,我是通过原生servlet进行测试的,通过获取jsonp的参数callback就可以拿到这个方法名字。

public class ServletTest extends HttpServlet {

    private final String gdtcUrl = "http://www.xxxxx
.cn/"; /** * 毫秒 */ private final long delayTime = 60 * 1000; /** * 定时器 */ private Timer mTimer = null; /** * 缓存json */ private String cashJson = null; @Override public void init() throws ServletException { String params = getInitParameter("iniParam"); System.out.println(params); mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { List<ModuleBean> datas = JdbcConnection.getFast5Hm(); cashJson = JSON.toJSONString(datas); System.out.println("数据定时来了:" + cashJson); } }, 0, delayTime); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("GBK"); resp.setContentType("text/plain;charset=UTF-8"); String referer = req.getHeader("Referer"); System.out.println("来访地址:" + referer); if (referer != null && referer.startsWith(gdtcUrl)) { // 当缓存为空时,请求一次数据库 if (cashJson == null) { cashJson = JSON.toJSONString(JdbcConnection.getFast5Hm()); }
         String renderStr
= req.getParameter("callback") + "(" + cashJson + ")"; resp.getWriter().write(renderStr); } else { resp.getWriter().write("error of no authority"); } resp.getWriter().flush(); } }

上面这种方式利用了缓存策略,把查询的数据缓存下来,缓解了服务器压力

通过referer对访问地址进行安全限制。重要的是把json数据拼接成jsonp格式返回给了前端ajax那个callback回调方法

初次在项目上着手后台,希望以后能有更大的进步

 


以上是关于java之初识服务器跨域获取数据的主要内容,如果未能解决你的问题,请参考以下文章

jsonp跨域请求数据实例之手机号码查询

Java初识方法

初识框架之MyBatis

初识Java爬虫之Jsoup,提供参考代码

Reactjs之Axiosfetch-jsonp获取后台数据

jsp初识servlet转发转发与重定向的比较